C++顺序表

C++顺序表

  1 #include<iostream>
  2 
  3 using namespace std;
  4 
  5 int maxSize = 100;
  6 
  7 // 定义
  8 template <class T>
  9 class SqListClass
 10 {
 11     private:
 12         T *data; // 存放顺序表中的元素
 13         int length; // 存放顺序表的长度
 14 
 15     public:
 16         SqListClass(); // 构造函数
 17         ~SqListClass(); // 析构函数
 18         void CreateList(T a[], int n); // 由a数组中的元素建造顺序表
 19         void DispList(); // 输出顺序表L中的所有元素
 20         int ListLength(); // 求顺序表的长度
 21         bool GetElem(int i, T &e); // 求顺序表中某序列号的元素值
 22         int LocateElem(T e); // 按元素查找其第一个序号位置
 23         bool ListInsert(int i, T e); // 在位置i插入数据元素e
 24         bool ListDelete(int i); // 在位置i删除数据元素
 25         void ReverseList(SqListClass<T> &L); // 翻转顺序表
 26 };
 27 
 28 // 线性表的初始化
 29 template<class T>
 30 SqListClass<T>::SqListClass() // 构造函数
 31 {
 32     data = new T[maxSize];
 33     length = 0;
 34 }
 35 
 36 // 线性表的销毁
 37 template<class T>
 38 SqListClass<T>::~SqListClass() // 析构函数
 39 {
 40     delete [] data;
 41 }
 42 
 43 // 实现
 44 
 45 // 线性表的创建,时间复杂度为O(n)
 46 template<class T>
 47 void SqListClass<T>::CreateList(T a[], int n)
 48 {
 49     int i;
 50     for(i=0; i<n; i++){
 51         data[i] = a[i];
 52     }
 53     length = i;
 54 }
 55 
 56 // 输出线性表的所有元素,时间复杂度为O(n)
 57 template<class T>
 58 void SqListClass<T>::DispList(){
 59     cout << "Out:" << endl;
 60     for(int i=0; i<length; i++){
 61         cout << data[i] << " ";
 62     }
 63     cout << endl;
 64 }
 65 
 66 // 求线性表的长度,时间复杂度为O(1)
 67 template<class T>
 68 int SqListClass<T>::ListLength(){
 69     return length;
 70 }
 71 
 72 // 求顺序表中某序列号的元素值,,时间复杂度为O(1)
 73 template<class T>
 74 bool SqListClass<T>::GetElem(int i, T &e){
 75     if(i<0 || i>length) return false;
 76     e = data[i-1];
 77     return true;
 78 }
 79 
 80 // 按元素查找其第一个序号位置,时间复杂度为O(n)
 81 template<class T>
 82 int SqListClass<T>::LocateElem(T e){
 83     int i = 0;
 84     while(i<length && data[i]!=e) i++;
 85     if(i>=length) return 0;
 86     else return i+1;
 87 }
 88 
 89 // 在位置i插入数据元素e,时间复杂度为O(n)
 90 template<class T>
 91 bool SqListClass<T>::ListInsert(int i, T e){
 92     if(i<0 || i>length) return false;
 93     for(int j=length; j>=i; j--){
 94         data[j]=data[j-1];
 95     }
 96     data[i-1] = e;
 97     length++;
 98     return true;
 99 }
100 
101 // 在位置i删除数据元素,时间复杂度为O(n)
102 template<class T>
103 bool SqListClass<T>::ListDelete(int i){
104     if(i<0 || i>length) return false;
105     for(int j=i-1; j< length; j++){
106         data[j] = data[j+1];
107     }
108     length--;
109     return true;
110 }
111 
112 // 翻转顺序表
113 template<class T>
114 void SqListClass<T>::ReverseList(SqListClass<T> &L){
115     T temp;
116     for(int j=0; j<L.length/2; j++){
117         temp = L.data[j];
118         L.data[j] = L.data[length-j-1];
119         L.data[length-j-1] = temp;
120     }
121 }
122 
123 // 主函数
124 int main(){
125     SqListClass<int> sqList;
126     int arr[3] = {3,4,5};
127     // 创建线性表
128     sqList.CreateList(arr, 3);
129     // 输出线性表
130     sqList.DispList();
131     // 输出线性表的长度
132     cout << "sqList length is " << sqList.ListLength() << endl;
133     // 求第二个位置的元素
134     int a;
135     sqList.GetElem(2, a);
136     cout <<"The 2 local is elem " << a << endl;
137     // 查找元素5的位置
138     cout << "The elem 5 local is " << sqList.LocateElem(5) << endl;
139     // 在位置4插入元素6
140     sqList.ListInsert(2, 6);
141     sqList.DispList();
142     // 在位置1删除数据元素
143     sqList.ListDelete(1);
144     sqList.DispList();
145     // 翻转顺序表
146     sqList.ReverseList(sqList);
147     sqList.DispList();
148     return 0;
149 }
原文地址:https://www.cnblogs.com/Renyi-Fan/p/8206065.html