线性表存储在计算机中可以采用多种方式,以下是按照顺序存储方式实现:
优点:查找很方便
缺点:插入元素、删除元素比较麻烦,时间复杂度 O(n)
1 1 #ifndef SeqList_h 2 2 #define SeqList_h 3 3 #include <iostream> 4 4 using namespace std; 5 5 const int MAXSIZE = 1000; 6 6 template <class T> 7 7 class SeqList{ 8 8 public: 9 9 SeqList(){length = 0;} //初始化 1010 SeqList(const T a[], int n); //初始化 1111 int GetLength(){return length;} //获取长度 1212 void PrintList(); //打印 1313 void Insert(int i, T x); //插入 1414 T Delete(int i); //删除 1515 T Get(int i); //获取 1616 int Locate(T x); //按值查找 1717 private: 1818 int length; 1919 T data [MAXSIZE]; 2020 2121 }; 2222 template <class T> 2323 SeqList<T>::SeqList(const T a[], int n){ 2424 if(n>MAXSIZE){ 2525 throw "数组长度超过顺序表的最大长度"; 2626 } 2727 for(int i = 0;i<n;i++){ 2828 data[i] = a[i]; 2929 } 3030 length = n; 3131 } 3232 template <class T> 3333 void SeqList<T>::PrintList(){ 3434 cout<<"按序号依次遍历线性表中的各个数据元素:"<<endl; 3535 for(int i = 0;i<length;i++){ 3636 cout << data[i] <<" "; 3737 } 3838 cout << endl; 3939 } 4040 template <class T> 4141 void SeqList<T>::Insert(int i, T x){ 4242 if(length>MAXSIZE) throw "上溢异常"; 4343 if(i<0 || i>length-1) throw "位置异常"; 4444 for(int j = length; j>=i; j--){ 4545 data[j] = data[j-1]; 4646 } 4747 data[i-1] = x; 4848 length ++; 4949 } 5050 template <class T> 5151 T SeqList<T>::Delete(int i){ 5252 if(length == 0) throw "下溢异常"; 5353 if(i<1 || i>length){ 5454 throw "位置异常"; 5555 } 5656 T x = data[i-1]; 5757 for(int j = i-1;j<length-1;j++){ 5858 data[j]= data[j+1]; 5959 } 6060 length --; 6161 return x; 6262 } 6363 template <class T> 6464 T SeqList<T>::Get(int i){ 6565 if(0 == length) throw"上溢异常"; 6666 if(i<1 || i>length){ 6767 throw "查找位置非法"; 6868 } 6969 return data[i-1]; 7070 } 7171 template <class T> 7272 int SeqList<T>::Locate(const T x){ 7373 for(int i = 0;i<length;i++){ 7474 if(x == data[i]) 7575 return i+1; 7676 } 7777 return 0; 7878 } 7979 #endif /* SeqList_h */