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


目录
相关文章
|
3月前
|
存储 编译器 C语言
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
74 2
|
13天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
2月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
2月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
89 3
|
2月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
3月前
|
存储 Java
数据结构第二篇【关于java线性表(顺序表)的基本操作】
数据结构第二篇【关于java线性表(顺序表)的基本操作】
49 6
|
3月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
31 3
|
3月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
45 2
|
3月前
|
存储
【数据结构】线性表和顺序表
【数据结构】线性表和顺序表
32 1
|
3月前
|
存储 算法 索引
【数据结构】——顺序表
【数据结构】——顺序表