C++ 顺序表 代码实现

 

线性表存储在计算机中可以采用多种方式,以下是按照顺序存储方式实现:

优点:查找很方便

缺点:插入元素、删除元素比较麻烦,时间复杂度 O(n)

 1 #ifndef SeqList_h
 2 #define SeqList_h
 3 #include <iostream>
 4 using namespace std;
 5 const int MAXSIZE = 1000;
 6 template <class T>
 7 class SeqList{
 8 public:
 9     SeqList(){length = 0;}  //初始化
10     SeqList(const T a[], int n); //初始化
11     int GetLength(){return length;}  //获取长度
12     void PrintList();  //打印
13     void Insert(int i, T x);  //插入
14     T Delete(int i); //删除
15     T Get(int i);  //获取
16     int Locate(T x);  //按值查找
17 private:
18     int length;
19     T data [MAXSIZE];
20     
21 };
22 template <class T>
23 SeqList<T>::SeqList(const T a[], int n){
24     if(n>MAXSIZE){
25         throw "数组长度超过顺序表的最大长度";
26     }
27     for(int i = 0;i<n;i++){
28         data[i] = a[i];
29     }
30     length = n;
31 }
32 template <class T>
33 void SeqList<T>::PrintList(){
34     cout<<"按序号依次遍历线性表中的各个数据元素:"<<endl;
35     for(int i = 0;i<length;i++){
36         cout << data[i] <<" ";
37     }
38     cout << endl;
39 }
40 template <class T>
41 void SeqList<T>::Insert(int i, T x){
42     if(length>MAXSIZE) throw "上溢异常";
43     if(i<0 || i>length-1) throw "位置异常";
44     for(int j = length; j>=i; j--){
45         data[j] = data[j-1];
46     }
47     data[i-1] = x;
48     length ++;
49 }
50 template <class T>
51 T SeqList<T>::Delete(int i){
52     if(length == 0) throw "下溢异常";
53     if(i<1 || i>length){
54         throw "位置异常";
55     }
56     T x = data[i-1];
57     for(int j = i-1;j<length-1;j++){
58         data[j]= data[j+1];
59     }
60     length --;
61     return x;
62 }
63 template <class T>
64 T SeqList<T>::Get(int i){
65     if(0 == length) throw"上溢异常";
66     if(i<1 || i>length){
67         throw "查找位置非法";
68     }
69     return data[i-1];
70 }
71 template <class T>
72 int SeqList<T>::Locate(const T x){
73     for(int i = 0;i<length;i++){
74         if(x == data[i])
75             return i+1;
76     }
77     return 0;
78 }
79 #endif /* SeqList_h */

 

posted @ 2018-11-21 17:38  羽……  阅读(3702)  评论(0编辑  收藏  举报