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 @   羽……  阅读(3717)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示