理论基础:
线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系,即:
(1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素;
(2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。
也就是说,数据元素是一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。
线性表(List)是由n(n≥0)个相同类型的数据元素构成的有限序列.
注意:“有限”,指的是线性表中的数据元素的个数是有限的,线性表中的每一个数据元素都有自己的位置(Position)。本书不讨论数据元素个数无限的线性表。
“相同类型”,指的是线性表中的数据元素都属于同一种类型。
C#实现:
1接口
由于现在只考虑线性表的基本操作,所以以C#接口的形式表示线性表,接口中的方法成员表示基本操作。并且,为了使线性表对任何数据类型都适用,数据元素的类型使用泛型的类型参数。在实际创建线性表时,元素的实际类型可以用应用程序中任何方便的数据类型来代替,比如用简单的整型或者用户自定义的更复杂的类型来代替。
线性表的接口如下所示。
1
public interface IListDS<T>2

{3

/**//// <summary>4
/// 获取长度5
/// </summary>6
/// <returns></returns>7
int GetLength();8

9

/**//// <summary>10
/// 清空操作11
/// </summary>12
void Clear();13

14

/**//// <summary>15
/// 判断线性表是否为空16
/// </summary>17
/// <returns></returns>18
bool IsEmpay();19

20

/**//// <summary>21
/// 附加操作,线性表未满,将值为item的新元素添加到末尾22
/// </summary>23
/// <param name="item"></param>24
void Append(T item);25

26

/**//// <summary>27
/// 插入操作28
/// </summary>29
/// <param name="item"></param>30
/// <param name="i"></param>31
void Insert(T item,int i);32

33

/**//// <summary>34
/// 删除操作35
/// </summary>36
/// <param name="i"></param>37
/// <returns></returns>38
T Delete(int i);39

40

/**//// <summary>41
/// 去表元42
/// </summary>43
/// <param name="i"></param>44
/// <returns></returns>45
T GetElem(int i);46

47

/**//// <summary>48
/// 按值查找49
/// </summary>50
/// <param name="value"></param>51
/// <returns></returns>52
int Locate(T value);53
}2 实现
实现过程中,算法时间复杂度没有做过多的考虑和计算,有兴趣的朋友可以完成
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
get15

{16
return data[index];17
}18
set19

{20
data[index] = value;21
}22
}23

24
//最后一个数据元素的位置属性25
public int List26

{27
get28

{29
return last;30
}31
}32

33
//容量属性34
public int MaxSize35

{36
get37

{38
return maxsize;39

40
}41
set42

{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
else83

{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
else99

{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
else143

{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
else177

{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[i]))229

{230
break;231
}232
}233
if (i > last)234

{235
return -1;236
}237
return i;238
}239
}以上代码用C#实现了线性表的操作,具体的测试没有做,有兴趣的朋友,可以写一个简单的测试程序,
如有问题,请及时告知!谢谢!