#include<iostream> using namespace std; template <class T> class LinearList { private: T* element;//存储顺序表的数组 int MaxSize;//顺序表的最大长度 int length;//顺序表的实际长度 public: //构造函数,若申明顺序表实例时未给出表的最大长度,则最大长度为10 LinearList(int); //析构函数 ~LinearList(void) { delete[] element; } //判空 bool ListEmpty(void) const { return length==0; } //判满 bool ListFull(void) const { return length==MaxSize; } //返回表的长度 int ListLength(void) const { return length; } //存取,将下标为k的节点字段赋值给item bool Find(int,T&) const; //查找,在表中查找字段值为item的结点并返回下标 int Search(const T&) const; //删除,删除小标为k的节点后并将其字段值赋值给item bool Delete(int,T&); //插入,在下标为k的节点后插入字段为item的结点 bool Insert(int,const T&); //打印,将顺序表内容按顺序打印到屏幕 void Print(void); }; //顺序表的构造函数 template <class T> LinearList<T>::LinearList(int MaxListSize=10) { MaxSize=MaxListSize; element=new T[MaxSize]; length=0; }; //存取:将下表为k的结点的字段值赋值给item并返回true,若不存在返回false template <class T> bool LinearList<T>::Find(int k,T& item) const { if(k<0||k>length-1||length==0) { cout<<"unreasonable position or empty list!"<<endl; return false; } else { item=element[k]; return true; } } //查找:在表中查找字段为item的结点并返回其下标;若表中没有item,则返回-1 template <class T> int LinearList<T>::Search(const T& item) const { for(int i=0; i<length; ++i) { if(element[i]==item) return i; } return -1; } //删除:删除表中下标为k的结点,并将其值赋给item template <class T> bool LinearList<T>::Delete(int k,T& item) { if(Find(k,item))//若找到下标为k的结点,则将其后面所有结点均向前移动一个位置 { for(int i=k+1; i<length; ++i) element[i-1]=element[i]; length--;//表长度相应减一 return true; } else return false; } //插入,在下标为k的结点后插入item template <class T> bool LinearList<T>::Insert(int k,const T& item) { if(ListFull()) { cout<<"The List is Full!"<<endl; return false; } else if(k<0||k>length) { cout<<"The node does not exist!"<<endl; return false; } else { for(int i=length; i>k; --i) { element[i]=element[i-1]; } element[k]=item; length++; return true; } } //打印 template <class T> void LinearList<T>::Print() { for(int i=0; i<length; ++i) { cout<<element[i]<<"->"; } cout<<endl; } //实例演示 int main() { LinearList<char> list(16); char ch='a'; for(int i=0; i<10; ++i) { list.Insert(i,ch); ch++; } list.Print(); list.Delete(0,ch); list.Print(); list.Insert(list.ListLength(),ch); list.Print(); return 0; }