线性表链式表示的C#实现(参考数据结构(C语言版))
实现部分
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace CA_HomeWork_1
6{
7 enum returnValue
8 {
9 TRUE = 1,
10 FALSE = 0,
11 OK = 1,
12 ERROR = 0,
13 INFEASIBLE = -1,
14 OVERFLOW = -2
15 }
16
17 public class LinkList
18 {
19 public LinkList Next;
20 public int data;
21 }
22
23 public class List
24 {
25 static void Main(string[] args)
26 {
27 LinkList La = new LinkList();
28 LinkList Lb = new LinkList();
29 LinkList Lc = new LinkList();
30 Initlist(ref La);
31 ShowList(La);
32 Initlist(ref Lb);
33 ShowList(Lb);
34 Initlist(ref Lc);
35 MergeList(La, Lb, ref Lc);
36 ShowList(Lc);
37 return;
38 }
39
40 private static returnValue Initlist(ref LinkList L)
41 {
42 int i, n;
43 LinkList p, s;
44 Console.Write("pleast input the list's Elem Number:");
45 n = Convert.ToInt32(Console.ReadLine());
46 L.Next = null;
47 p = L;
48 for (i = 1; i <= n; i++)
49 {
50 s = new LinkList();
51 s.Next = null;
52 Console.Write("please input {0} Elem:", i);
53 s.data = int.Parse(Console.ReadLine());
54 p.Next = s;
55 p = s;
56 }
57 return (returnValue.OK);
58 }
59
60 private static int ListLength(LinkList L)
61 {
62 int i = 0;
63 LinkList p;
64 p = L;
65 while (p.Next != null)
66 {
67 p = p.Next;
68 i++;
69 }
70 return (i);
71 }
72
73 private static returnValue GetElem(LinkList L, int i, out int e)
74 {
75 LinkList p;
76 int j = 1;
77 e = 0;
78 p = L.Next;
79 while ((p != null) && (j < i))
80 {
81 p = p.Next;
82 j++;
83 }
84 if ((p == null) || (j > i)) return (returnValue.ERROR);
85 e = p.data;
86 return (returnValue.OK);
87 }
88
89 private static returnValue ListInsert(ref LinkList L, int i, int e)
90 {
91 LinkList p, s;
92 int j = 0;
93 p = L;
94 j = 0;
95 while ((p != null) && (j < i - 1))
96 {
97 p = p.Next;
98 j++;
99 }
100 if ((p == null) || (j > i - 1)) return (returnValue.ERROR);
101 s = new LinkList();
102 s.data = e;
103 s.Next = p.Next;
104 p.Next = s;
105 return (returnValue.OK);
106 }
107
108 private static void ShowList(LinkList L)
109 {
110 LinkList p;
111 p = L.Next;
112 Console.Write("This list is: ");
113 while (p != null)
114 {
115 Console.Write("{0} ", p.data);
116 p = p.Next;
117 }
118 Console.Write("\n");
119 return;
120 }
121
122 private static void MergeList(LinkList La, LinkList Lb, ref LinkList Lc)
123 {
124 int i, j, k, La_len, Lb_len;
125 int ai, bj;
126 i = 1;
127 j = 1;
128 k = 0;
129 La_len = ListLength(La);
130 Lb_len = ListLength(Lb);
131 while ((i <= La_len) && (j <= Lb_len))
132 {
133 GetElem(La, i, out ai);
134 GetElem(Lb, j, out bj);
135 if (ai <= bj)
136 {
137 ListInsert(ref Lc, ++k, ai);
138 ++i;
139 }
140 else
141 {
142 ListInsert(ref Lc, ++k, bj);
143 ++j;
144 }
145 }
146 while (i <= La_len)
147 {
148 GetElem(La, i++, out ai);
149 ListInsert(ref Lc, ++k, ai);
150 }
151 while (j <= Lb_len)
152 {
153 GetElem(Lb, j++, out bj);
154 ListInsert(ref Lc, ++k, bj);
155 }
156 return;
157 }
158
159 //建立单链表(头插法)
160 //注:生成的链表中结点的次序和输入的顺序相反
161 private void CreateList(ref LinkList L, int n)
162 {
163 L.Next = NULL;
164 for (i = n; i > 0; --i)
165 {
166 LinkList p = new LinkList();
167 p.data = int.Parse(Console.ReadLine());
168 p.Next = L.Next;
169 L.Next = p;
170 }
171 return;
172 }
173 }
174}
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace CA_HomeWork_1
6{
7 enum returnValue
8 {
9 TRUE = 1,
10 FALSE = 0,
11 OK = 1,
12 ERROR = 0,
13 INFEASIBLE = -1,
14 OVERFLOW = -2
15 }
16
17 public class LinkList
18 {
19 public LinkList Next;
20 public int data;
21 }
22
23 public class List
24 {
25 static void Main(string[] args)
26 {
27 LinkList La = new LinkList();
28 LinkList Lb = new LinkList();
29 LinkList Lc = new LinkList();
30 Initlist(ref La);
31 ShowList(La);
32 Initlist(ref Lb);
33 ShowList(Lb);
34 Initlist(ref Lc);
35 MergeList(La, Lb, ref Lc);
36 ShowList(Lc);
37 return;
38 }
39
40 private static returnValue Initlist(ref LinkList L)
41 {
42 int i, n;
43 LinkList p, s;
44 Console.Write("pleast input the list's Elem Number:");
45 n = Convert.ToInt32(Console.ReadLine());
46 L.Next = null;
47 p = L;
48 for (i = 1; i <= n; i++)
49 {
50 s = new LinkList();
51 s.Next = null;
52 Console.Write("please input {0} Elem:", i);
53 s.data = int.Parse(Console.ReadLine());
54 p.Next = s;
55 p = s;
56 }
57 return (returnValue.OK);
58 }
59
60 private static int ListLength(LinkList L)
61 {
62 int i = 0;
63 LinkList p;
64 p = L;
65 while (p.Next != null)
66 {
67 p = p.Next;
68 i++;
69 }
70 return (i);
71 }
72
73 private static returnValue GetElem(LinkList L, int i, out int e)
74 {
75 LinkList p;
76 int j = 1;
77 e = 0;
78 p = L.Next;
79 while ((p != null) && (j < i))
80 {
81 p = p.Next;
82 j++;
83 }
84 if ((p == null) || (j > i)) return (returnValue.ERROR);
85 e = p.data;
86 return (returnValue.OK);
87 }
88
89 private static returnValue ListInsert(ref LinkList L, int i, int e)
90 {
91 LinkList p, s;
92 int j = 0;
93 p = L;
94 j = 0;
95 while ((p != null) && (j < i - 1))
96 {
97 p = p.Next;
98 j++;
99 }
100 if ((p == null) || (j > i - 1)) return (returnValue.ERROR);
101 s = new LinkList();
102 s.data = e;
103 s.Next = p.Next;
104 p.Next = s;
105 return (returnValue.OK);
106 }
107
108 private static void ShowList(LinkList L)
109 {
110 LinkList p;
111 p = L.Next;
112 Console.Write("This list is: ");
113 while (p != null)
114 {
115 Console.Write("{0} ", p.data);
116 p = p.Next;
117 }
118 Console.Write("\n");
119 return;
120 }
121
122 private static void MergeList(LinkList La, LinkList Lb, ref LinkList Lc)
123 {
124 int i, j, k, La_len, Lb_len;
125 int ai, bj;
126 i = 1;
127 j = 1;
128 k = 0;
129 La_len = ListLength(La);
130 Lb_len = ListLength(Lb);
131 while ((i <= La_len) && (j <= Lb_len))
132 {
133 GetElem(La, i, out ai);
134 GetElem(Lb, j, out bj);
135 if (ai <= bj)
136 {
137 ListInsert(ref Lc, ++k, ai);
138 ++i;
139 }
140 else
141 {
142 ListInsert(ref Lc, ++k, bj);
143 ++j;
144 }
145 }
146 while (i <= La_len)
147 {
148 GetElem(La, i++, out ai);
149 ListInsert(ref Lc, ++k, ai);
150 }
151 while (j <= Lb_len)
152 {
153 GetElem(Lb, j++, out bj);
154 ListInsert(ref Lc, ++k, bj);
155 }
156 return;
157 }
158
159 //建立单链表(头插法)
160 //注:生成的链表中结点的次序和输入的顺序相反
161 private void CreateList(ref LinkList L, int n)
162 {
163 L.Next = NULL;
164 for (i = n; i > 0; --i)
165 {
166 LinkList p = new LinkList();
167 p.data = int.Parse(Console.ReadLine());
168 p.Next = L.Next;
169 L.Next = p;
170 }
171 return;
172 }
173 }
174}
有许多不足之处,希望见者指评,谢谢!