C++ 顺序表 代码实现

Wesley13
• 阅读 452

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

优点:查找很方便

缺点:插入元素、删除元素比较麻烦,时间复杂度 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 */
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
林末 林末
3年前
折半查找-Python版(二分查找)
介绍二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。前提必须待查找的序列有序时间复杂度O(log2n)原理1)确定该期间的中间位置K2)将查找的值t与arrayk比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分
似梦清欢 似梦清欢
1年前
查找算法
顺序查找顺序查找又称为线性查找,对线性表和链表都适用。线性表可以通过数组下标递增来顺序扫描每个元素,链表可以通过next指针依次扫描每一个元素。:::tip指针实现顺序表时,顺序表中是指针时,在定义顺序表的结构体后,需要对顺序表初始化,初始化时为指针申请堆
似梦清欢 似梦清欢
1年前
线性表
线性表的顺序存储实现(数组形式)称为顺序表。线性表顺序表示原理解析这里描述的线性表是逻辑结构的,独立于存储结构。线性表的顺序表示简称顺序表。顺序表实现线性表的方式是使用数组。线性表第一个元素的数组下标是0。另外一种实现顺序表的方法:使用数组方式比动态分配更
Wesley13 Wesley13
2年前
Java实现顺序栈
一、分析  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。  一个标准的顺序栈
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
D1
1\.数据结构  1.1线性结构  (1)最常用的数据结构,特点是数据元素之间存在一对一的线性关系  (2)有两种不同的存储结构,即顺序存储结构和链式存储结构    顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的    链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
Wesley13 Wesley13
2年前
C#二分查找算法设计实现
C二分查找算法设计实现1.介绍二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。(记住了前提要求是顺序存储结构,而且要有序排序,所以说对于一个无序的是没法用二分查找的)2.查找算法过程