C++实现线性表顺序存储的示例代码
作者:NDX
这篇文章主要为大家详细介绍了C++实现线性表顺序存储的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
我学习顺序表时找不到相关的代码,以及我不清楚写一个线性表需要的知识,当我写出来可以使用的线性表我就把这些内容贴了出来。
前置知识点:结构体,常量指针
顺序表的特点:
- 需要一片连续的存储空间
- 逻辑上相连的数据的存储位置也是相邻的。
所以如果我们想要创建一个顺序表我们需要做两件事:
- 向系统申请一片空间供数组使用。
- 创建一个指针记录空间地址。
而删除顺序表就是把空间释放,并让指针指向空。
顺序表的创建和销毁:
#include<iostream> #include<cstdlib> #define EleType int//方便日后使用 #define Maxsize 1000 using namespace std; //定义结构体 struct sql{ int* elem; int len;//防止越界访问 }; //初始化 void InitList(sql &l) { l.elem=new int [Maxsize]; if(!l.elem) cout<<"申请空间失败"<<endl; l.len=0; } //销毁线性表 void DestroyList(sql &l) { delete [] l.elem; l.elem=nullptr; } int main() { sql l; InitList(l); return 0; }
数据的插入和删除:
因为在顺序存储所有的数据的存储地址是连续的,所以在插入和删除数据时你需要改变后续的所有数据的位置。在插入时把后面的数据往后挪,删除时把数据向前挪。
void adds(sql &l,EleType target,int sit) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl;//插入位置错误 exit(0); } if(l.len+1>Maxsize) { cout<<"Too many"<<endl;//存储空间已满 exit(0); } //把后面的数据往后挪 for(int i=l.len-1;i>=sit-1;i--) { l.elem[i+1]=l.elem[i]; } l.elem[sit-1]=target; l.len++;//更新表长 } //删除元素 void DeletElem(sql &l,int sit) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl; exit(0); } for(int i=sit-1;i<l.len;i++) { l.elem[i]=l.elem[i+1]; } l.len--;//更新表长 }
其他操作:
查找和更改:
//查找 int finding(sql l,EleType target) { for(int i=0;i<l.len;i++) { if(l.elem[i]==target) return i+1; } return 0; } //更改 void Changing(sql& l,int sit,EleType target) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl; exit(0); } l.elem[sit-1]=target; }
清空、获取长度、判断是否为空:
//清空线性表 void ClearLine(sql &l) { l.len=0; } //获取线性表的长度 int Getlen(sql l) { return l.len; } //判断线性表是否为空 bool IsEmpty(sql l) { if(l.len==0) return true; return false; }
完整代码
#include<iostream> #include<cstdlib> #define Maxsize 1000 #define EleType int//方便日后使用 using namespace std; //创建结构体 struct sql{ EleType* elem;//创建一个指针 int len; }; //初始化 void InitList(sql &l) { l.elem=new EleType [Maxsize]; if(!l.elem) cout<<"申请空间失败"<<endl; l.len=0; } //输出 void print(sql l) { for(int i=0;i<l.len;i++) { cout<<l.elem[i]<<" "; } cout<<endl; } //插入 void adds(sql &l,EleType target,int sit) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl; exit(0); } if(l.len+1>Maxsize) { cout<<"Too many"<<endl; exit(0); } for(int i=l.len-1;i>=sit-1;i--) { l.elem[i+1]=l.elem[i]; } l.elem[sit-1]=target; l.len++; } //删除元素 void DeletElem(sql &l,int sit) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl; exit(0); } for(int i=sit-1;i<l.len;i++) { l.elem[i]=l.elem[i+1]; } l.len--; } //销毁线性表 void DestroyList(sql &l) { delete [] l.elem; } //清空线性表 void ClearLine(sql &l) { l.len=0; } //获取线性表的长度 int Getlen(sql l) { return l.len; } //判断线性表是否为空 bool IsEmpty(sql l) { if(l.len==0) return true; return false; } //查找 int finding(sql l,EleType target) { for(int i=0;i<l.len;i++) { if(l.elem[i]==target) return i+1; } return 0; } //更改 void Changing(sql& l,int sit,EleType target) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl; exit(0); } l.elem[sit-1]=target; } int main() { sql l; InitList(l); EleType j=0; for(int i=1;i<10;i++,j++) adds(l,j,i); DeletElem(l,2); print(l); return 0; }
到此这篇关于C++实现线性表顺序存储的示例代码的文章就介绍到这了,更多相关C++线性表顺序存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!