C++ 顺序表 代码实现

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

优点:查找很方便

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

1 1 #ifndef SeqList_h 2 2 #define SeqList_h 3 3 #include <iostream> 4 4 using namespace std; 5 5 const int MAXSIZE = 1000; 6 6 template <class T> 7 7 class SeqList{ 8 8 public: 9 9 SeqList(){length = 0;} //初始化 1010 SeqList(const T a[], int n); //初始化 1111 int GetLength(){return length;} //获取长度 1212 void PrintList(); //打印 1313 void Insert(int i, T x); //插入 1414 T Delete(int i); //删除 1515 T Get(int i); //获取 1616 int Locate(T x); //按值查找 1717 private: 1818 int length; 1919 T data [MAXSIZE]; 2020 2121 }; 2222 template <class T> 2323 SeqList<T>::SeqList(const T a[], int n){ 2424 if(n>MAXSIZE){ 2525 throw "数组长度超过顺序表的最大长度"; 2626 } 2727 for(int i = 0;i<n;i++){ 2828 data[i] = a[i]; 2929 } 3030 length = n; 3131 } 3232 template <class T> 3333 void SeqList<T>::PrintList(){ 3434 cout<<"按序号依次遍历线性表中的各个数据元素:"<<endl; 3535 for(int i = 0;i<length;i++){ 3636 cout << data[i] <<" "; 3737 } 3838 cout << endl; 3939 } 4040 template <class T> 4141 void SeqList<T>::Insert(int i, T x){ 4242 if(length>MAXSIZE) throw "上溢异常"; 4343 if(i<0 || i>length-1) throw "位置异常"; 4444 for(int j = length; j>=i; j--){ 4545 data[j] = data[j-1]; 4646 } 4747 data[i-1] = x; 4848 length ++; 4949 } 5050 template <class T> 5151 T SeqList<T>::Delete(int i){ 5252 if(length == 0) throw "下溢异常"; 5353 if(i<1 || i>length){ 5454 throw "位置异常"; 5555 } 5656 T x = data[i-1]; 5757 for(int j = i-1;j<length-1;j++){ 5858 data[j]= data[j+1]; 5959 } 6060 length --; 6161 return x; 6262 } 6363 template <class T> 6464 T SeqList<T>::Get(int i){ 6565 if(0 == length) throw"上溢异常"; 6666 if(i<1 || i>length){ 6767 throw "查找位置非法"; 6868 } 6969 return data[i-1]; 7070 } 7171 template <class T> 7272 int SeqList<T>::Locate(const T x){ 7373 for(int i = 0;i<length;i++){ 7474 if(x == data[i]) 7575 return i+1; 7676 } 7777 return 0; 7878 } 7979 #endif /* SeqList_h */
点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

查找算法

顺序查找顺序查找又称为线性查找,对线性表和链表都适用。线性表可以通过数组下标递增来顺序扫描每个元素,链表可以通过next指针依次扫描每一个元素。:::tip指针实现顺序表时,顺序表中是指针时,在定义顺序表的结构体后,需要对顺序表初始化,初始化时为指针申请堆

线性表

线性表的顺序存储实现(数组形式)称为顺序表。线性表顺序表示原理解析这里描述的线性表是逻辑结构的,独立于存储结构。线性表的顺序表示简称顺序表。顺序表实现线性表的方式是使用数组。线性表第一个元素的数组下标是0。另外一种实现顺序表的方法:使用数组方式比动态分配更

Java实现顺序栈

一、分析  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。  一个标准的顺序栈

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.