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 */

 

转载于:https://www.cnblogs.com/ycbeginner/p/9996022.html

使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值