顺序表的操作:(为了适用于多种数据类型,此处采用泛型) public interface IListDS<T> { int GetLength(); //求长度 void Clear(); //清空操作 bool IsEmpty(); //判断线性表是否为空 void Append(T item); //附加操作 void Insert(T item,int i); //插入操作 T Delete(int i); //删除操作 T GetElem(int i); //取表元 int Locate(T value); //按值查找 void Reverse(); } public class SeqList<T>:IListDS<T> { private int maxsize; //顺序表的容量 private T[] data; //数组,用于存储顺序表中的数据元素 private int last; //指示顺序表最后一个元素的位置 //构造器 public SeqList(int size) { data=new T[size]; maxsize=size; last=-1; } //索引器 public T this[int index] { get { return data[index]; } set { data[index]=value; } } //最后一个数据元素位置属性 public int Last { get { return last; } } //容量属性 public int Maxsize { get { return maxsize; } } //求顺序表的长度 public int GetLength() { return last+1; } //清空顺序表 public void Clear() { last=-1; } //判断顺序表是否为空 public bool IsEmpty() { if(last==-1) { return true; } else { return false; } } //判断顺序表是否已满 public bool IsFull() { if(last==maxsize-1) { return true; } else { return false; } } //在顺序表的末尾添加新元素 public void Append(T item) { if(IsFull()) { Console.WriteLine("List is full"); return; } data[++last]=item; } //在顺序表中的第i个数据元素的位置插入一个数据元素 public void Insert(T item,int i) { if(IsFull()) { Console.WriteLine("List is Full"); return; } if(i<1||i>last+2) { Console.WriteLine("Position is error!"); return; } if(i==last+2) { data[last+1]=item; } else { for(int j=last;j>=i-1;--j) { data[j+1]=data[j]; } data[i-1]=item; } ++last; } //删除顺序表中第i个数据元素 public T Delete(int i) { T tmp=default(T); if(IsEmpty()) { Console.WriteLine("List is empty"); returm tmp; } if(i<1||i>last+1) { Console.WriteLine("Position is error!"); return tmp; } if(i==last+1) { tmp=data[last--]; } else { tmp=data[i-1]; for(int j=i-1;j<=last;++j) { data[j]=data[j+1]; } last--; } return tmp; } //获得顺序表的第i个数据元素 public T GetElem(int i) { if(IsEmpty()||(i<1)||(i>last+1)) { Console.WriteLine("List is empty or Positioin is error!"); return default(T); } return data[i-1]; } //在顺序表中查找值为value的数据元素 public int Locate(T value) { if(IsEmpty()) { Console.WriteLine("List is empty!"); return -1; } int i=0; for(i=0;i<=last;i++) { if(value.Equals(data[i])) { break; } } if(i>last) { return -1; } return i; } //顺序表倒置 public void Reverse() { T tmp=Default(T); int len=GetLength(); for(int i=0;i<=len/2;i++) { tmp=data[i]; data[i]=data[len-i]; data[len-i]=tmp; } } } 顺序表的案例: //有数据类型为整型的顺序表La和Lb,其数据元素均按从小到大的升序排列 //编写一个算法将它们合并成一个表Lc,要求Lc中数据元素也按升序排列。 public SeqList<int> Merge(SeqList<int> La,SeqList<int> Lb) { SeqList<int> Lc=new SeqList<int>(La.MaxSize+Lb.MaxSize); int i=0; int j=0; int k=0; //两个表中都有数据元素 while((i<=(La.GetLength()-1))&&(j<=(Lb.GetLength()-1))) { if(La[i]<Lb[j]) { Lc.Append(La[i++]); } else { Lc.Append(Lb[j++]); } } //a表中有数据元素 while(i<=La.GetLength()-1) { Lc.Append(La[i++]); } //b表中有数据元素 while(j<=Lb.GetLength()-1) { Lc.Append(Lb[j++]); } return Lc; } //已知一个存储整数的顺序表La,试构造顺序表Lb, //要求顺序表Lb中只包含顺序表La中所有值不相同的数据元素 public SeqList<int> Purge(SeqList<int> La) { SeqList<int> Lb=new SqlList<int>(La.Maxsize); //将a表中第1个数据元素赋给b表 Lb.Append(La[0]); //依次处理a表中的数据元素 for(int i=1;i<=La.GetLength()-1;i++) { int j=0; //查看b表中有无与a表中相同的数据元素 for(j=0;j<=Lb.GetLength()-1;j++) { //有相同的数据元素 if(La[i].CompareTo(Lb[j])==0) { break; } } //没有相同的数据元素,将a表中的数据元素附加到b表的末尾 if(j>Lb.GetLength()-1) { Lb.Append(La[i]); } } return Lb; }