数据结构(C++版)实现顺序表的创建,输入,输出,插入,删除,取值

简介: 数据结构(C++版)实现顺序表的创建,输入,输出,插入,删除,取值

数据结构(C++版)实现顺序表的创建,输入,输出,插入,删除,取值

  • 顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

  • 顺序表存储结构(顺序结构)

将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。

  • 顺序表的特点

只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n 其中,L是元素占用存储单元的长度。

1.编译运行

20201116203516669.gif

2.代码块

  • 顺序表的存储结构
typedefstruct {
//存储空间的基址 ElemType*elem;
//当前长度 intlength;
}SqList; //顺序表的结构类型为SqList
  • 顺序表初始化
StatusinitList(SqList&L){
//构造一个空的顺序表L //为顺序表分配一个大小为MAXSIZE的数组空间 L.elem=newElemType[MAXSIZE];
//存储分配失败返回Error if(!L.elem) returnError;
//空表长度为0 L.length=0;
returnOk;
}
  • 顺序表的取值
StatusGetElem(SqListL,inti,ElemType&e){
//判断i值是否合理,若不合理,返回Error if(i<1||i>L.length) returnError;
//elem[i-1]单元存储顺序表第i个元素 e=L.elem[i-1];
returnOk;
}
  • 顺序表的查找
intLocateElem(SqListL,ElemTypee){
//在顺序表L中查早值为e的数据元素,返回其下标 for(inti=0;i<L.length;i++){
//查找成功返回下标i+1 if(L.elem[i]==e)
returni+1;
    }
//查找失败返回0 return0;
} 
  • 顺序表的插入
StatusListInsert(SqList&L,inti,ElemTypee){
//在顺序表L中第i个位置插入新的元素e,i的合法范围是1<=i<=L.length+1;//i的值不合法返回Error if(i<1||i>L.length+1) returnError;
//当前存储空间已满 if(L.length==MAXSIZE) returnError;
//插入位置及以后的元素后移 for(intj=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
    }
//将新元素e放入第i个位置 L.elem[i-1]=e;
//表长加1 L.length++;
returnOk; 
} 
  • 顺序表的删除
StatusListInsert(SqList&L,inti){
//在顺序表L中删除第i个元素,i的合法取值范围是1<=i<=L.length//i的值不合法 if(i<1||i>L.length) returnError;
for(intj=i-1;j<L.length;j++){
//被删除元素之后的元素前移 L.elem[j]=L.elem[j+1];
    } 
//表长-1 L.length--;
returnOk;
} 
  • 顺序表输出
voidprintList(SqListL){
for(inti=0;i<L.length;i++){
cout<<L.elem[i]<<" "; 
    }
cout<<endl;
} 
  • 顺序表输入
StatusinListValue(SqList&L,intn){
if(n<0||n>MAXSIZE) returnError;
if(L.length==MAXSIZE) returnError;
for(inti=0;i<n;i++){
L.elem[i]=rand();
L.length++;
    }
returnOk;
}

3.源码

#include<iostream>#include<stdlib.h>usingnamespacestd;
//顺序表可能达到的最大长度 #defineMAXSIZE100#defineError0#defineOk1typedefintElemType;
typedefintStatus;
//顺序表的存储结构 typedefstruct {
//存储空间的基址 ElemType*elem;
//当前长度 intlength;
}SqList; //顺序表的结构类型为SqList//顺序表初始化StatusinitList(SqList&L){
//构造一个空的顺序表L //为顺序表分配一个大小为MAXSIZE的数组空间 L.elem=newElemType[MAXSIZE];
//存储分配失败返回Error if(!L.elem) returnError;
//空表长度为0 L.length=0;
returnOk;
}
//顺序表的取值StatusGetElem(SqListL,inti,ElemType&e){
//判断i值是否合理,若不合理,返回Error if(i<1||i>L.length) returnError;
//elem[i-1]单元存储顺序表第i个元素 e=L.elem[i-1];
returnOk;
}
//顺序表的查找intLocateElem(SqListL,ElemTypee){
//在顺序表L中查早值为e的数据元素,返回其下标 for(inti=0;i<L.length;i++){
//查找成功返回下标i+1 if(L.elem[i]==e)
returni+1;
    }
//查找失败返回0 return0;
} 
//顺序表的插入StatusListInsert(SqList&L,inti,ElemTypee){
//在顺序表L中第i个位置插入新的元素e,i的合法范围是1<=i<=L.length+1;//i的值不合法返回Error if(i<1||i>L.length+1) returnError;
//当前存储空间已满 if(L.length==MAXSIZE) returnError;
//插入位置及以后的元素后移 for(intj=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
    }
//将新元素e放入第i个位置 L.elem[i-1]=e;
//表长加1 L.length++;
returnOk; 
} 
//顺序表的删除StatusListInsert(SqList&L,inti){
//在顺序表L中删除第i个元素,i的合法取值范围是1<=i<=L.length//i的值不合法 if(i<1||i>L.length) returnError;
for(intj=i-1;j<L.length;j++){
//被删除元素之后的元素前移 L.elem[j]=L.elem[j+1];
    } 
//表长-1 L.length--;
returnOk;
} 
//顺序表输出voidprintList(SqListL){
for(inti=0;i<L.length;i++){
cout<<L.elem[i]<<" "; 
    }
cout<<endl;
} 
//顺序表输入StatusinListValue(SqList&L,intn){
if(n<0||n>MAXSIZE) returnError;
if(L.length==MAXSIZE) returnError;
for(inti=0;i<n;i++){
L.elem[i]=rand();
L.length++;
    }
returnOk;
} 
intmain(){
inte,n,x,y;
cout<<"正在初始化顺序表......"<<endl;
SqListL;
initList(L);
cout<<"-------顺序表初始化成功--------"<<endl;
cout<<"-------顺序表随机赋值多少个元素:--------"<<endl;
cin>>n; 
inListValue(L,n);
cout<<"-------顺序表随机赋值完成:"<<endl;    
printList(L);
cout<<"顺序表要获取元素值的序号为:"<<endl;
cin>>n; 
GetElem(L,n,e);
cout<<"获取的元素值为:"<<e<<endl;
cout<<"-------顺序表插入元素--------"<<endl;
cout<<"要插入的位置:"<<endl;
cin>>n;
cout<<"要插入的元素:"<<endl;
cin>>e; 
ListInsert(L,n,e);
cout<<"顺序表插入完成......"<<endl;
cout<<"插入之后的顺序表:"<<endl;
printList(L);
cout<<"-------顺序表删除元素--------"<<endl;
cout<<"删除元素的位置"<<endl;
cin>>n;
ListInsert(L,n); 
cout<<"顺序表删除完成......"<<endl;
cout<<"删除之后的顺序表:"<<endl;
printList(L);
return0;
} 


目录
相关文章
|
27天前
|
存储 算法 程序员
【数据结构】C语言实现顺序表万字详解(附完整运行代码)
【数据结构】C语言实现顺序表万字详解(附完整运行代码)
39 0
|
29天前
|
存储 编译器
数据结构:顺序表详解
数据结构:顺序表详解
37 0
|
1月前
|
存储 算法 C++
【C/C++ 数据结构 】无向图和有向图的差异
【C/C++ 数据结构 】无向图和有向图的差异
25 0
|
1月前
|
存储 算法 Serverless
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
46 0
|
1天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
1月前
|
算法 C++ 开发者
【C/C++ 数据结构 】二叉树基本性质:具有n个结点的完全二叉树的深度为[log2n]+1或者[log2(n+1)]...
【C/C++ 数据结构 】二叉树基本性质:具有n个结点的完全二叉树的深度为[log2n]+1或者[log2(n+1)]...
12 0
|
1月前
|
存储 算法 数据库
【C/C++ 数据结构 】树的 四种表示方法
【C/C++ 数据结构 】树的 四种表示方法
30 0
|
1月前
|
存储 算法 C语言
【C/C++ 数据结构 树】探索C/C++中的二叉树:从理论到实践
【C/C++ 数据结构 树】探索C/C++中的二叉树:从理论到实践
60 0
|
1月前
|
存储 设计模式 算法
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
【C/C++ 数据结构 线性表】深入理解与实现栈:从基础到应用的全面探索
52 0
|
18天前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
33 0