C++,正在学习数据结构,请问怎么在为一个线性表申请一段内存空间后,通过调用函数再来给这个线性表赋值

如何在C++中建立一个顺序表_C 语言
作者:用户
本文讲的是如何在C++中建立一个顺序表_C 语言,
复制代码 代码如下:
#define MAXLEN 100 //定义顺序表的最大长度struct DATA{ char key[10]; //结点的关键字
char name[20];};struct S
复制代码 代码如下:
#define MAXLEN 100 //定义顺序表的最大长度struct DATA{ char key[10]; //结点的关键字
char name[20];};struct SLType //定义顺序表结构 { DATA ListData[MAXLEN+1];//保存顺序表的结构数组 int ListL
//顺序表已存结点的数量 };
定义了顺序表的最大长度MAXLEN、顺序表数据元素的类型DATA以及顺序表的数据结构SLType。
在数据结构SLType中,Listen为顺序表已存结点的数量,也就是当前顺序表的长度,ListData是一个结构数组,用来存放各个数据结点。
我们认为该顺序表是一个班级学生的记录。其中,key为学号,name为学生的名称,age为年龄。
因为数组都是从下标0开始的,为了使用方便,我们从下标1开始记录数据结点,下标0的位置不可用。
初始化顺序表
在使用顺序表之前,首先创建一个空的顺序表,也就是初始化顺序表。这里,在程序中只需设置顺序表的结点数量ListLen为0即可。这样,后面需要添加的数据元素将从顺序表的第一个位置存储。示例代码:
复制代码 代码如下:
void SLInit(SLType * SL) //初始化顺序表{ SL-&Listlen=0; }
线性表的长度
计算线性表的长度也就是计算线性表中结点的个数,由于我们在SLType中定义了ListLen来表示结点的数量,所以我们只需要获得这个变量的值即可。
复制代码 代码如下:
int SLLenght(SLType *SL){ return(SL-&ListLen); //返回顺序表的元素数量 }
插入节点就是在线性表L的第i个位置上插入一个新的结点,使其后的结点编号依次加1。这时,插入一个新节点之后,线性表L的长度将变为n+1。插入结点操作的难点在于随后的每个结点数据都要向后移动,计算机比较大,示例代码如下:
复制代码 代码如下:
int SLInsert(SLType *SL,int n,DATA data){ if(SL-&ListLen&=MAXLEN) //顺序表结点数量已超过最大数量 {
cout&&"顺序表已满,不能插入结点!"&&
//返回0表示插入不成功
if(n&1||n&SL-&ListLen) //插入结点的序号不合法
cout&&"插入序号错误!"&&
return 0; } for(i=SL-&ListLi&=n;i--) //将顺序表中的数据向后移动 {
SL-&ListData[i+1]=SL-&ListData[i]; } SL-&ListData[n]= SL-&ListLen++; return 1; }
在程序中首先判断顺序表结点数量时候已超过最大数量,以及插入点的序号是否正确。前面条件都瞒住以后,便将顺序表中的数据向后移动,同时插入结点,并更新结点数量ListLen。
追加结点就是在顺序表的尾部插入结点,因此不必进行大量数据的移动,代码实现与插入结点相比就要简单的多。
复制代码 代码如下:
int SLAdd(SLType * SL,DATA data){ if(SL-&ListLen&=MAXLEN) {
cout&&"顺序表已满,不能再添加结点了!"&&
return 0; }
SL-&ListData[++SL-&ListLen]= return 1;}
删除结点就是删除线性表L中的第i个结点,使得其后的所有节点编号依次减1.这是,删除一个结点之后,线性表L的长度将变为n-1。删除结点和插入结点类似,都需要进行大量数据的移动。
复制代码 代码如下:
int SLDelete(SLType *SL,int n) //删除顺序表中的数据元素{ if(n&1||n&SL-&ListLen) //删除结点的序号不合法
cout&&"删除序号错误!"&&
return 0; } for(i=n;i&SL-&ListLi++)//将顺序表中的数据向前移动
SL-&ListData[i]=SL-&ListData[i+1];
SL-&ListLen--;
//顺序表元素数量减1
//成功删除返回1 }
查找节点就是在线性表L中查找值为x的结点,并返回该节点在线性表L中的位置。如果在线性表中没有找到值为x的结点,则返回一个错误标志。根据x的类型不同,查找结点可以分为:
按照序号查找结点
对于一个顺序表,序号就是数据元素在数组中的位置,也就是数组的下标标号。按照序号查找结点是顺序表查找结点最常用的方法,这是因为顺序表的存储本身就是一个数组,示例代码如下:
复制代码 代码如下:
DATA * SLFindByNum(SLType *SL,int n)//根据呼号返回数据元素{ if(n&1||n&SL-&ListLen)
//查询结点的序号不合法
cout&&"查询序号错误!"&&
return 0; } return &(SL-&ListData[n]); }
按照关键字查找结点
关键字可以是数据元素中的任意一项。这里以key关键字为例进行介绍,例如,可以通过key查找学生的信息。示例代码如下:
复制代码 代码如下:
int SLFindByCont(SLType * SL,char *key)//按关键字查询结点 { for(i=1;i&=SL-&ListLi++) {
if(strcmp(SL-&ListData[i].key,key)==0)//如果找到结点
} } return 0;
//在整个表中都没有找到,返回0 }
显示所有的结点
示例代码如下:
复制代码 代码如下:
void SLALL(SLType *SL){ for(i=1;i&SL-&ListLi++) {
cout&&"key:"&&SL-&ListData[i].key&&
cout&&"name:"&&SL-&ListData[i].name&&
cout&&"age:"&&SL-&ListData[i].age&&
cout&&"============================="&&
顺序表操作完整示例:
基本上就是把上面的函数放到一块,集中展示了一下功能,代码有些长,请耐心阅读^.^
复制代码 代码如下:
#include&iostream&#include&string&#define MAXLEN 100 //定义顺序表的最大长度/**************顺序表的定义部分*****************/ struct DATA{ //结点的关键字 };struct SLType //定义顺序表结构 { DATA ListData[MAXLEN+1];//保存顺序表的结构数组 int ListL
//顺序表已存结点的数量 }; /************顺序表的初始化函数*****************/ void SLInit(SLType * SL) //初始化顺序表{ SL-&ListLen=0; } /***********计算线性表的长度*******************/int SLLenght(SLType *SL){ return(SL-&ListLen); //返回顺序表的元素数量 } /*********插入结点*******************************/int SLInsert(SLType *SL,int n,DATA data){ if(SL-&ListLen&=MAXLEN) //顺序表结点数量已超过最大数量 {
cout&&"顺序表已满,不能插入结点!"&&
//返回0表示插入不成功
if(n&1||n&SL-&ListLen) //插入结点的序号不合法
cout&&"插入序号错误!"&&
return 0; } for(i=SL-&ListLi&=n;i--) //将顺序表中的数据向后移动 {
SL-&ListData[i+1]=SL-&ListData[i]; } SL-&ListData[n]= SL-&ListLen++; return 1;
//成功插入,返回1 }/***********************追加结点*************************/ int SLAdd(SLType * SL,DATA data){ if(SL-&ListLen&=MAXLEN) {
cout&&"顺序表已满,不能再添加结点了!"&&
return 0; }
SL-&ListData[++SL-&ListLen]= return 1;}/***********************删除结点*************************/ int SLDelete(SLType *SL,int n) //删除顺序表中的数据元素{ if(n&1||n&SL-&ListLen) //删除结点的序号不合法
cout&&"删除序号错误!"&&
return 0; } for(i=n;i&SL-&ListLi++)//将顺序表中的数据向前移动
SL-&ListData[i]=SL-&ListData[i+1];
SL-&ListLen--;
//顺序表元素数量减1
//成功删除返回1 } /*******************按照序号查找结点********************/DATA * SLFindByNum(SLType *SL,int n)//根据序号返回数据元素{ if(n&1||n&SL-&ListLen)
//查询结点的序号不合法
cout&&"查询序号错误!"&&
return 0; } return &(SL-&ListData[n]); } /*******************按照关键字查找结点********************/DATA *SLFindByCont(SLType * SL,string name)//按关键字查询结点 { for(i=1;i&=SL-&ListLi++) {
if(SL-&ListData[i].name==name)//如果找到结点
return &(SL-&ListData[i]);
} } return 0;
//在整个表中都没有找到,返回0 } /*******************显示所有的结点********************/void SLALL(SLType *SL){ for(i=1;i&=SL-&ListLi++) {
cout&&"key:"&&SL-&ListData[i].key&&",name:"&&SL-&ListData[i].name&&",age:"&&SL-&ListData[i].age&& }} int main(){ SLType SL; //定义顺序表变量
DATA //定义结点保存数据类型变量
DATA *//定义指向结点的指针变量 cout&&"顺序表操作演示:"&& SLInit(&SL);//初始化顺序表 do { //循环添加结点数据
cout&&"请输入要添加的结点(学号 姓名 年龄):";
cin&&data.key&&data.name&&data.
if(data.age)
//若年龄不为0
if(!SLAdd(&SL,data))//若添加结点失败
//退出循环
}while(1); cout&&"顺序表中的结点顺序为:" && SLALL(&SL);
//显示所有的结点 cout&&"请输入要取出的结点序号:"; cin&&i; pdata=SLFindByNum(&SL,i);//按序号查找结点 if(pdata) {
cout&&"第"&&i&&"个结点为:key:"&&pdata-&key&&",name:"&&pdata-&name&&",age:"&&pdata-&age&& }
cout&&"请输入要查找的姓名:"; cin&& pdata=SLFindByCont(&SL,name); if(pdata) {
cout&&"key:"&&pdata-&key&&",name:"&&pdata-&name&&",age:"&&pdata-&age&& }
cout&&"请输入您要删除的结点的序号:"; cin&&i; if(SLDelete(&SL,i)) {
cout&&"数据删除成功"&&
SLALL(&SL);
} cout&&"请输入您要插入的结点的序号:"; cin&&i; cout&&"请输入第"&&i&&"号结点的key,name,以及age"&& cin&&data.key&&data.name&&data. if(SLInsert(&SL,i,data)) {
cout&&"插入数据成功"&&
SLALL(&SL);
return 0;}
运行界面:
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
c语言建立顺序表、c语言顺序表的建立、c语言顺序表、顺序表c语言实现、c语言顺序表的实现,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
IT采购开年惠,百款产品5折起,新购满额再返最高6000!
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!一个简单C++数据结构线性表编译老有问题,求大神解答
[问题点数:40分,无满意结帖,结帖人qidongmiu0571]
一个简单C++数据结构线性表编译老有问题,求大神解答
[问题点数:40分,无满意结帖,结帖人qidongmiu0571]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【图文】《数据结构(C++版)》第2章 线性表_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《数据结构(C++版)》第2章 线性表
&&数据结构(C++版)
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

 

随机推荐