数据结构线性表试验报告Word文档格式.docx
- 文档编号:21279547
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:363.07KB
数据结构线性表试验报告Word文档格式.docx
《数据结构线性表试验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构线性表试验报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
在顺序表结构体的定义中,typedefintTypeData为整型,存储结构如下:
for(n=0;
n<
m;
n++){
cout<
<
"
请输入线性表数据"
endl;
cin>
>
L.data[n];
//顺序将数据存入顺序表
}//其他存储与此类似,都是直接赋值与数组的某一位
插入版块子函数:
voidinsert(SeqList&
L)//插入数据
{
inta,b,c,k;
请输入插入的数及其插入的位置"
a>
b;
if(b<
=0||b>
(L.n+1)){cout<
不能在该位置插入"
return;
}//判断插入位置是否合法
k=L.data[b-1];
L.data[b-1]=a;
c=L.n;
L.n=L.n+1;
while(c>
b){
L.data[c]=L.data[c-1];
c--;
//通过循环,实现插入位置后的数据挨个往后移动一位
}
L.data[b]=k;
}
顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。
显示操作是通过循环实现表中第一个元素到最后一个元素的输出,查找操作是直接取数组中的查找位输出。
(3)
实验结果与分析
2 单链表
(1)抽象数据类型定义
typedefstructnode{
DataTypedata;
//链表的数据类型
structnode*link;
//链表的结点指针
}linknode,*linklist;
//定义了结构体linklode和结构体指针linklist
在本次实验中,首先程序自己建立一个空的头结点,通过菜单的功能选择“添加链表数据”可自由添加链表的节点数及元素值。
在菜单选择中,有“添加链数据”,“插入链表数据”,“删除链表数据”,“查找链表数据”和“显示链表数据”功能,选择不能的功能选择就能实现不同的操作。
其中“添加链表数据”可反复批量输入链表数据。
(2)存储结构定义及算法思想
在单链表中,typedefintDataType;
DataTypedata;
定义链表存储数据位整型。
存储结构如下:
while(p->
link!
=NULL){
p=p->
link;
k++;
//首先找到单链表的最后结点(如果是只有头结点
}的单链表则直接跳过),以便后面接着输入数据
for(inti=0;
i<
a;
i++)
{
请输入数据"
q=(linklist)malloc(sizeof(linknode));
//开辟新的结点空间并转化为linklist指针型
q->
data;
q->
link=p->
//将前面一个结点的指向(及NULL)赋给新开辟的结点的指向
p->
link=q;
//将插入点前面一个结点指向新开辟的的结点
p=q;
//将指明的最后一个一个结点向后移1位到最后一位,以便后面接着输入
删除结点子函数:
voiddelate(linklist&
l){//删除单链表数据
linklistp;
intm,n,i=0;
请输入想要删除的结点位置"
p=l;
//将头结点赋给转移指针p
while(p&
&
m-1){//查找删除结点的位置
p=p->
//当在单链表中间已查到删除结点或p=NULL时跳出循环
i++;
if(p==NULL){//当p=NULL跳出循环时,表明链表中没有该结点
该结点不存在,删除错误"
n=p->
link->
//找到删除接结点将数据取出并显示出来(找结点时是找的前一个结点)
被删除的结点元素为:
"
//将删除结点的前后结点链接起来
链表的删除,插入操作是类似的,要考虑到加入或减少一个结点后,前后结点的链接关系,以及删除或插入的是最后一个结点时,新空间的开辟与结点收尾等问题。
其中删除功能的一部分就是查找功能,显示功能也是从链表的头结点遍历至最后一个,依次输出。
(4)实验结果与分析
3 心得体会
本次数据结构实习我收获颇丰,以前学过c语言与c++也有经常上机,但以往都是偏向于程序整体的算法设计,没有像这次的实习这样是着重在线性表,链表结构的算法设计上面。
这次上机实习,让我更加熟练了结构体及结构体指针的用法,线性表的设计等等,同时在这次实习中,引用,指针,地址这三个的用法曾一度让我混淆,在查阅书籍后才得以解决,也希望老师在课堂上有时间时给我们详细讲解一下,指针,地址,引用三者的使用。
附录:
顺序表源代码:
#include<
iostream>
usingnamespacestd;
#definemaxsize50
typedefintTypeData;
typedefstruct{
}SeqList;
voidmakeSeq(SeqList&
L)//输入线性表数据
intm,n,k;
请输入线性表长度"
n++)
L.n=m;
您输入的线性表为:
for(k=0;
k<
k++)
L.data[k]<
;
voidshowSeq(SeqListL)//输出线性表数据
inta=0;
while(a<
L.n)
L.data[a]<
a++;
b)
c--;
voiddelate(SeqList&
L)//删除数据
intwei;
请输入想要删除数据的位置"
wei;
if(wei<
1||wei>
L.n){cout<
不能在该位置删除"
return;
while(wei<
L.data[wei-1]=L.data[wei];
wei++;
L.n=L.n-1;
voidfind(SeqListL)//查找数据
inta;
请输入您想查找数的位置"
if(a<
=0||a>
(L.n)){cout<
该位置的数据为:
L.data[a-1]<
voidmain()
SeqListL;
intxuanze;
makeSeq(L);
while
(1)
请选择功能"
插入1"
删除2"
查找3"
显示4"
endl<
请输入"
xuanze;
switch(xuanze)
case1:
insert(L);
break;
case2:
delate(L);
case3:
find(L);
case4:
showSeq(L);
default:
}
单链表源代码:
typedefintDataType;
linklistchushihua()
linklistL;
L=(linklist)malloc(sizeof(linknode));
L->
link=NULL;
cout<
开辟空间成功,头结点建立"
returnL;
voidshuru(linklist&
l)
inta,k=0;
请输入要存入的结点个数"
linklistp,q;
while(p->
=NULL)
voidshow(linklistl)
链表数据为:
p=l->
while(p!
p->
data<
voidfind(linklistl)
intm,i=0;
请输入查找的结点"
m-1)
if(!
p){cout<
链表没有这么长,查找错误"
查找结点的数据位:
voidinsert(linklistl)
请输入您要插入的结点位置及插入的数据"
m>
n;
if(p==NULL)
不能在该位置插入,插入错误"
data=n;
intselect;
L=chushihua();
添加链表数据1"
插入链表数据2"
删除链表数据3"
查找链表数据4"
显示链表数据5"
select;
switch(select)
shuru(L);
case5:
show(L);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 试验报告