数据结构(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;
} 


目录
相关文章
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
144 0
|
10月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
489 77
|
10月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
346 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
10月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
410 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
10月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
271 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
10月前
|
存储 人工智能 算法
【C++数据结构——图】最短路径(头歌教学实验平台习题) 【合集】
任务描述 本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。 相关知识 为了完成本关任务,你需要掌握:Dijkst本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。为了完成本关任务,你需要掌握:Dijkstra算法。带权有向图:该图对应的二维数组如下所示:Dijkstra算法:Dijkstra算法是指给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径。Dijkstra算法的具体步骤如下:(1)初始时,S只包含源点,即S={v},v的距离为0。
152 15
|
10月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
292 12
|
10月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
190 10
|
10月前
|
算法 C++
【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
【数据结构——图】最小生成树(头歌实践教学平台习题)目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:【合集】任务描述 本关任务:编写一个程序求图的最小生成树。相关知识 为了完成本关任务,你需要掌握:1.建立邻接矩阵,2.Prim算法。建立邻接矩阵 上述带权无向图对应的二维数组,根据它建立邻接矩阵,如图1建立下列邻接矩阵。注意:INF表示无穷大,表示整数:32767 intA[MAXV][MAXV];Prim算法 普里姆(Prim)算法是一种构造性算法,从候选边中挑
139 10
|
10月前
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
395 10

热门文章

最新文章