2 實現
實現過程中,算法時間復雜度沒有做過多的考慮和計算,有興趣的朋友可以完成
Code
[copy to clipboard]
CODE:
1/**//// <summary>
2 /// 線性表
3 /// </summary>
4 /// <typeparam name="T"></typeparam>
5 public class SeqList<T> : IListDS<T>
6 {
7 private int maxsize; //順序表的容量
8 private T[] data; //數組,用於存儲順序表中的數據元素
9 private int last; //指示順序表最後一個元素的位置
10
11 //索引器
12 public T this[int index]
13 {
14 get
15 {
16 return data[index];
17 }
18 set
19 {
20 data[index] = value;
21 }
22 }
23
24 //最後一個數據元素的位置屬性
25 public int List
26 {
27 get
28 {
29 return last;
30 }
31 }
32
33 //容量屬性
34 public int MaxSize
35 {
36 get
37 {
38 return maxsize;
39
40 }
41 set
42 {
43 maxsize = value;
44 }
45 }
46
47 //構造函數
48 public SeqList(int size)
49 {
50 data = new T[size];
51 maxsize = size;
52 last = -1;
53 }
54 /**//// <summary>
55 /// 獲取長度
56 /// </summary>
57 /// <returns></returns>
58 public int GetLength()
59 {
60 return last + 1;
61 }
62
63 /**//// <summary>
64 /// 清空操作
65 /// </summary>
66 public void Clear()
67 {
68 last = -1;
69 }
70
71
72 /**//// <summary>
73 /// 判斷線性表是否為空
74 /// </summary>
75 /// <returns></returns>
76 public bool IsEmpay()
77 {
78 if (last == -1)
79 {
80 return true;
81 }
82 else
83 {
84 return false;
85 }
86 }
87
88 /**//// <summary>
89 /// 判斷線性表是否已滿
90 /// </summary>
91 /// <returns></returns>
92 public bool IsFull()
93 {
94 if (last == maxsize - 1)
95 {
96 return true;
97 }
98 else
99 {
100 return false;
101 }
102 }
103
104 /**//// <summary>
105 /// 附加操作,線性表未滿,將值為item的新元素添加到末尾
106 /// </summary>
107 /// <param name="item"></param>
108 public void Append(T item)
109 {
110 if (IsFull())
111 {
112 Console.Write("list is full");
113 return;
114 }
115
116 data[++last] = item;
117 }
118
119 /**//// <summary>
120 /// 插入操作
121 /// </summary>
122 /// <param name="item"></param>
123 /// <param name="i"></param>
124 public void Insert(T item, int i)
125 {
126 if (IsFull())
127 {
128 Console.Write("List is full");
129 return;
130 }
131
132 if (i < 1 || i > last + 2)
133 {
134 Console.Write("Posotion is error");
135 return;
136 }
137
138 if (i == last + 2)
139 {
140 data[last + 1] = item;
141 }
142 else
143 {
144 for (int j = last; j >= i - 1; --j)
145 {
146 data[j + 1] = data[j];
147 }
148 data[i - 1] = item;
149 }
150 ++last;
151 }
152
153 /**//// <summary>
154 /// 刪除操作
155 /// </summary>
156 /// <param name="i"></param>
157 /// <returns></returns>
158 public T Delete(int i)
159 {
160 T t = default(T);
161 if (IsEmpay())
162 {
163 Console.Write("List is empty!");
164 return t;
165 }
166 if (i < 1 || i > last + 1)
167 {
168 Console.Write("Position is Error");
169 return t;
170 }
171 if (i == last + 1)
172 {
173 t = data[last--];
174
175 }
176 else
177 {
178 t = data[i - 1];
179 for (int j = i; j <= last; j++)
180 {
181 data[j] = data[j + 1];
182 }
183 }
184 --last;
185 return t;
186
187 }
188
189 /**//// <summary>
190 /// 取表元
191 /// </summary>
192 /// <param name="i"></param>
193 /// <returns></returns>
194 public T GetElem(int i)
195 {
196 T t = default(T);
197 if (IsEmpay())
198 {
199 Console.Write("List is Empty");
200 return t;
201 }
202
203 if (i < 1 || i > last + 1)
204 {
205 Console.Write("Position is error");
206 return t;
207 }
208 return data[i - 1];
209
210 }
211
212 /**//// <summary>
213 /// 按值查找
214 /// </summary>
215 /// <param name="value"></param>
216 /// <returns></returns>
217 public int Locate(T value)
218 {
219 if (IsEmpay())
220 {
221 Console.Write("List is empty");
222 return -1;
223 }
224
225 int i = 0;
226 for ( i = 0; i <= last; ++i)
227 {
228 if (value.Equals(data))
229 {
230 break;
231 }
232 }
233 if (i > last)
234 {
235 return -1;
236 }
237 return i;
238 }
239 }
以上代碼用C#實現了線性表的操作,具體的測試沒有做,有興趣的朋友,可以寫一個簡單的測試程序。