线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系。 这种一对一的关系指的是数据元素之间的位置关系,即: (1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素; (2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。
线性表的接口如下所示。
public interface IListDS<T>//线性表的接口 { int GetLength(); //求长度 void Clear(); //清空操作 bool IsEmpty(); //判断线性表是否为空 bool IsFull(); void Append(T item); //附加操作 void Insert(T item, int i); //插入操作 T Delete(int i); //删除操作 T GetElem(int i); //取表元 int Locate(T value); //按值查找 void Reverse();//倒置 }
在计算机内,保存线性表最简单、最自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表(Sequence List)。顺序表的特点是表中相邻的数据元素在内存中存储位置也邻。
1 public class SeqList<T> : IListDS<T> 2 { 3 private int last; 4 private int maxSize; 5 private T[] data; 6 7 public T this[int index] 8 { 9 get { return data[index]; } 10 set { data[index] = value; } 11 } 12 public SeqList(int size) 13 { 14 maxSize = size; 15 data = new T[size]; 16 last = -1; 17 } 18 public int Last 19 { 20 get { return last; } 21 } 22 public int MaxSize 23 { 24 get { return maxSize; } 25 set { maxSize = value; } 26 } 27 28 public int GetLength() 29 { 30 return last + 1; 31 } 32 33 public void Clear() 34 { 35 last = -1; 36 } 37 38 public bool IsEmpty() 39 { 40 return last == -1; 41 } 42 public bool IsFull() 43 { 44 return last == maxSize - 1; 45 } 46 public void Append(T item) 47 { 48 if (IsFull()) 49 { 50 Console.WriteLine("List is full"); 51 return; 52 } 53 data[++last] = item; 54 } 55 56 public void Insert(T item, int i) 57 { 58 if (IsFull()) 59 { 60 Console.WriteLine("List is full"); 61 return; 62 } 63 if (i < 1 || i > last + 2) 64 { 65 Console.WriteLine("Position is error!"); 66 return; 67 } 68 if (i == last + 2) 69 { 70 data[last + 1] = item; 71 } 72 else 73 { 74 for (int j = i - 1; j <= last; j++) 75 { 76 data[j + 1] = data[j]; 77 } 78 data[i - 1] = item; 79 } 80 ++last; 81 } 82 83 public T Delete(int i) 84 { 85 T tmp = default(T); 86 if (IsEmpty()) 87 { 88 Console.WriteLine("List is empty"); 89 return tmp; 90 } 91 if (i < 1 || i > last + 1) 92 { 93 Console.WriteLine("Position is error!"); 94 return tmp; 95 } 96 if (i == last + 1) 97 { 98 tmp = data[last]; 99 } 100 else 101 { 102 tmp = data[i - 1]; 103 for (int j = i; j < last + 1; j++) 104 { 105 data[j] = data[j + 1]; 106 } 107 } 108 --last; 109 return tmp; 110 } 111 112 public T GetElem(int i) 113 { 114 if (IsEmpty() || i < 1 || i > last + 1) 115 { 116 Console.WriteLine("List is empty or Position is error!"); 117 return default(T); 118 } 119 return data[i - 1]; 120 } 121 122 public int Locate(T value) 123 { 124 if (IsEmpty()) 125 { 126 Console.WriteLine("List is empty!"); 127 return -1; 128 } 129 int i = 0; 130 for (i = 0; i <= last; i++) 131 { 132 if (value.Equals(data[i])) 133 break; 134 } 135 if (i > last) 136 return -1; 137 return i; 138 } 139 public void Reverse() 140 { 141 T tmp = default(T); 142 int len = GetLength(); 143 for (int i = 0; i <= len / 2; i++) 144 { 145 tmp = data[i]; 146 data[i] = data[len - i]; 147 data[len - i] = tmp; 148 } 149 } 150 } 151 }
时间: 2024-10-23 02:06:49