数据结构线性表试验报告_第1页
数据结构线性表试验报告_第2页
数据结构线性表试验报告_第3页
数据结构线性表试验报告_第4页
数据结构线性表试验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、线性表上机实习1、实验目的(1)熟悉将算法转换为程序代码的过程。(2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。(3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。( 4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。(5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。2、实验要求( 1)熟悉顺序表的插入、删除和查找。( 2)熟悉单链表的插入、删除和查找。3、实验内容:顺序表(1)抽象数据类型定义typedefstruct容量为 maxsize 的静态顺手表顺序表中的实

2、际元素个数静态顺序表的定义TypeDatadatamaxsize;/intn;/SeqList;/在本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。2)存储结构定义及算法思想在顺序表结构体的定义中,typedefintTypeData为整型,存储结构如下:for(n=0;n<m;n+)cout<<"请输入线性表数据"<<endl;精选文档cin>>L.datan;/顺序将数据存入顺序表其他存储与此类似,都是直接赋值与数组的某一位插

3、入版块子函数:插入数据voidinsert(SeqList&L)/inta,b,c,k;cout<<"请输入插入的数及其插入的位置"<<endl;cin>>a>>b;不能在该位置插入"<<endl; return; /判断插入位置if(b<=0|b>(L.n+1)cout<<"是否合法k=L.datab-1;L.datab-1=a;c=L.n;L.n=L.n+1;while(c>b)L.datac=L.datac-1;c-;/通过循环,实现插入位置后的数据挨

4、个往后移动一位L.datab=k;顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。显示操作是通过循环实现表中第一个元素到最后一个元素的输出,查找操作是直接取数组中的查找位输出。(3)实验结果与分析62因>.黑示L-G4-HH3斤LL市1234择k插入龙的纯书去一在第二小百籽匏据单链表链表的数据类型链表的结点指针定义了结构体linklode 和结构体指针(1)抽象数据类型定义typedefstructnodeDataTypedata;/structnode*link;/linknode,*linklist;/link

5、list在本次实验中,首先程序自己建立一个空的头结点,通过菜单的功能选择“添加链表数据”可自由添加链表的节点数及元素值。在菜单选择中,有“添加链数据”,“插入链表数据”,“删除链表数据”,“查找链表数据”和“显示链表数据”功能,选择不能的功能选择就能实现不同的操作。其中“添加链表数据”可反复批量输入链表数据。(2)存储结构定义及算法思想在单链表中,typedefintDataType;DataTypedata;定义链表存储数据位整型。存储结构如下:首先找到单链表的最后结点(如果是只有头结的单链表则直接跳过),以便后面接着输入数据/开辟新的结点空间并转化为while(p->link!=NU

6、LL)p=p->link;k+;/占八、for(inti=0;i<a;i+)cout<<"请输入数据"<<endl;q=(linklist)malloc(sizeof(linknode);linklist指针型cin>>q->data;q->link=p->link;/将前面一个结点的指向(及NULL)赋给新开辟的结点的指向p->link=q;/将插入点前面一个结点指向新开辟的的结点p=q;/将指明的最后一个一个结点向后移1位到最后一位,以便后面接着输入删除结点子函数:删除单链表数据voiddelate

7、(linklist&l)/linklistp;intm,n,i=0;cin>>m;p=l;while(p&&i<m-1) /p=p->link; / i+; if(p=NULL) /cout<<"请输入想要删除的结点位置"<<endl;/将头结点赋给转移指针p查找删除结点的位置当在单链表中间已查到删除结点或p=NULL时跳出循环当p=NULL跳出循环时,表明链表中没有该结点cout<<"该结点不存在,删除错误"<<endl;return;n=p->lin

8、k->data;/找到删除接结点将数据取出并显示出来(找结点时是找的前一个结点)cout<<"被删除的结点元素为:"<<n<<endl;p->link=p->link->link;/将删除结点的前后结点链接起来链表的删除,插入操作是类似的,要考虑到加入或减少一个结点后,前后结点的链接关系,以及删除或插入的是最后一个结点时,新空间的开辟与结点收尾等问题。其中删除功能的一部分就是查找功能,显示功能也是从链表的头结点遍历至最后一个,依次输出。4)实验结果与分析n看一再叫若居。人办心入£”2-4-.1.;一?+连

9、连连在冷ri:''.xll:-IJ川田ss出艮等删除的结点莅置触蟠点元ntlgTET司就1K航金留格至电工删阂显T到际辐一支咕花,4-Jir-IAWqitJL陪惜用tf据熊力.齐欧表表+工,*怪胆话费曲A遍忙,篦忙于颖出示由酹箱士观匚平惜7;%数据I-肝尚德后相沓厉M7Bf19土J.VtM-|旧寸E费争百萤费十."至土士+;陪降他降ru-AlJtTT-上4-=:4112345_,R野转WC乒匕输入要亨人的结声个数?谓输入翻据请输入数据请轮在苏提S餐点、契里功能一批意辑入数据建立甲槌乘心得体会本次数据结构实习我收获颇丰,以前学过c语言与C+也有经常上机,但以往都是偏向于

10、程序整体的算法设计,没有像这次的实习这样是着重在线性表,链表结构的算法设计上面。这次上机实习,让我更加熟练了结构体及结构体指针的用法,线性表的设计等等,同时在这次实习中,引用,指针,地址这三个的用法曾一度让我混淆,在查阅书籍后才得以解决,也希望老师在课堂上有时间时给我们详细讲解一下,指针,地址,引用三者的使用。附录:顺序表源代码:#include<iostream>usingnamespacestd;#definemaxsize50typedefintTypeData;typedefstructTypeDatadatamaxsize;intn;SeqList;输入线性表数voidm

11、akeSeq(SeqList&L)/据intm,n,k;cout<<"请输入线性表长度"<<endl;cin>>m;for(n=0;n<m;n+)cout<<"请输入线性表数据"<<endl;cin>>L.datan;L.n=m;cout<<"您输入的线性表为:"<<endl;for(k=0;k<m;k+)cout<<L.datak<<""cout<<endl;vo

12、idshowSeq(SeqListL)/输出线性表数据inta=0;while(a<L.n)cout<<L.dataa<<""a+;cout<<endl;voidinsert(SeqList&L)/插入数据inta,b,c,k;cout<<"请输入插入的数及其插入的位置"<<endl;cin>>a>>b;if(b<=0|b>(L.n+1)cout<<"不能在该位置插入"<<endl;return;k=L

13、.datab-1;L.datab-1=a;c=L.n;L.n=L.n+1;while(c>b)L.datac=L.datac-1;c-;L.datab=k;voiddelate(SeqList&L)/删除数据intwei;cout<<"请输入想要删除数据的位置"<<endl;cin>>wei;if(wei<1|wei>L.n)cout<<"不能在该位置删除"<<endl;return;while(wei<L.n)L.datawei-1=L.datawei;wei+

14、;L.n=L.n-1;voidfind(SeqListL)/查找数据inta;cout<<"请输入您想查找数的位置"<<endl;cin>>a;if(a<=0|a>(L.n)cout<<"不能在该位置插入"<<endl;return;cout<<"该位置的数据为:"<<""<<L.dataa-1<<endl;voidmain()SeqListL;intxuanze;makeSeq(L);while

15、(1)cout<<"请选择功能"<<endl;cout<<"插入1"<<endl;cout<<"删除2"<<endl;cout<<"查找3"<<endl;cout<<"显示4"<<endl;cout<<endl<<"请输入"<<endl;cin>>xuanze;switch(xuanze)case 1case

16、2case 3case 4insert(L);break;delate(L);break;find(L);break;showSeq(L);break;default:break;单链表源代码:#include<iostream>usingnamespacestd;typedefintDataType;typedefstructnodeDataTypedata;structnode*link;linknode,*linklist;linklistchushihua()linklistL;L=(linklist)malloc(sizeof(linknode);L->link=N

17、ULL;cout<<"开辟空间成功,头结点建立"<<endl;returnL;voidshuru(linklist&l)inta,k=0;cout<<"请输入要存入的结点个数"<<endl;cin>>a;linklistp,q;p=l;while(p->link!=NULL)p=p->link;k+;for(inti=0;i<a;i+)cout<<"请输入数据"<<endl;q=(linklist)malloc(sizeof(

18、linknode);cin>>q->data;q->link=p->link;p->link=q;p=q;voidshow(linklistl)cout<<"链表数据为:"<<endl;linklistp;p=l->link;while(p!=NULL)cout<<p->data<<""p=p->link;cout<<endl;voidfind(linklistl)intm,i=O;cout«"请输入查找的结点"

19、«endl;cin»m;linklistp;p=l->link;while(p&&i<m-1)(p=p->link;i+;)if(!p)cout«"链表没有这么长,查找错误"vvendl;retum;cout«"查找结点的数据位:"«p->data«endl;)voidinsert(linklistI)(linklistp,q;intm,n,i=0;cout«"请输入您要插入的结点位置及插入的数据"«endl;cin

20、»m»n;P=l;while(p&&i<m-1)(p=p->link;i+;)if(p=NULL)(cout«"不能在该位置插入,插入错误"«endl;return;)q=(linklist)malloc(sizeof(linknode);q->data=n;q->link=p->link;p->link=q;)voiddelate(linklist&l)(linklistp;intm,n,i=0;cout«"请输入想要删除的结点位置"«endl;cin»m;P=l;while(p&&i<m-1)p=p->link;i+;if(p=NULL)cout<<&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论