欢迎光临散文网 会员登陆 & 注册

线性表的顺序存储C++代码

2023-03-02 15:31 作者:吴小敏63  | 我要投稿

 我学习顺序表时找不到相关的代码,以及我不清楚写一个线性表需要的知识,当我写出来可以使用的线性表我就把这些内容贴了出来。

前置知识点:结构体,常量指针,new和delete

顺序表的特点:

  1. 需要一片连续的存储空间

  2.  逻辑上相连的数据的存储位置也是相邻的。

所以如果我们想要创建一个顺序表我们需要做两件事:

  1. 向系统申请一片空间供数组使用。

  2. 创建一个指针记录空间地址。

而删除顺序表就是把空间释放,并让指针指向空。

顺序表的创建和销毁:

#include<iostream>#include<cstdlib>#define EleType int//方便日后使用#define Maxsize 1000using 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++代码的评论 (共 条)

分享到微博请遵守国家法律