数据结构线性表试验报告.docx

线性表上机实习

1、实验目的(1)熟悉将算法转换为程序代码的过程。

(2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。

(3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。

(4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。

(5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。

2、实验要求

(1)熟悉顺序表的插入、删除和查找。

(2)熟悉单链表的插入、删除和查找。

3、实验内容:顺序表

(1)抽象数据类型定义容量为ma_sze的静态顺手表顺序表中的实际元素个数静态顺序表的定义typedefstructTypeDatadatama_szentneqLst本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。2)存储结构定义及算法思想在顺序表结构体的定义中,typedefntTypeData为整型,存储结构如下:for(n=0;nm;n )cout请输入线性表数据endl;XXX序将数据存入顺序他存储与此类似,都是直接赋值与数组的某一位插入版块子函数:vodnsert(SeqLstL入数据nta,b,c,k;cout请输入插入的数及其插入的位置endl;cnab;不能在该位置插入endl;return断插入位置f(b=0|b(L.n 1)cout是否合法k=XXX;XXX=a;c=L.n;L.n=L.n 1;whle(cb)XXX.datac-1;c-过循环,实现插入位置后的数据挨个往后移动一位XXX;顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。显示操作是通过循环实现表中第一个元素到最后一个元素的输出,查找操作是直接取数组中的查找位输出。3)实验结果与分析单链表1)抽象数据类型定义typedefstructnodeDataTypedata表的数据类型structnode_lnk表的结点指针lnknode,_lnklst义了结构体lnklode和结构体指针lnklst在本次实验中,首先程序自己建立一个空的头结点,通过菜单的功能选择“添加链表数据”可自由添加链表的节点数及元素值。在菜单选择中,有“添加链数据”,“插入链表数据”,“删除链表数据”,“查找链表数据”和“显示链表数据”功能,选择不能的功能选择就能实现不同的操作。其中“添加链表数据”可反复批量输入链表数据。whle(p-lnk!=NULL)p=p-lnk;k ;点for(nt=0;a; 2)存储结构定义及算法思想在单链表中,typedefntDataType;DataTypedata;定义链表存储数据位整型。存储结构如下:首先找到单链表的最后结点(如果是只有头结的单链表则直接跳过),以便后面接着输入数辟新的结点空间并转化为cout请输入数据endl;q=(lnklst)malloc(szeof(lnknode);lnklst指针型cnq-data;q-lnk=p-lnk前面一个结点的指向(及NULL)赋给新开辟的结点的指向p-lnk=q插入点前面一个结点指向新开辟的的结点p=q指明的最后一个一个结点向后移1位到最后一位,以便后面接着输入删除单链表数据删除结点子函数:voddelate(lnklstlnklstp;ntm,n,=0;cnm;p=l;whle(pm-1=p-lnk ;f(p=NULLout请输入想要删除的结点位置endl头结点赋给转移指针p查找删除结点的位置当在单链表中间已查到删除结点或p=NULL时跳出循环当p=NULL跳出循环时,表明链表中没有该结点cout该结点不存在,删除错误endl;return;n=p-lnk-data到删除接结点将数据取出并显示出来(找结点时是找的前一个结点)cout被删除的结点元素为:nendl;p-lnk=p-lnk-lnk删除结点的前后结点链接起来链表的删除,插入操作是类似的,要考虑到加入或减少一个结点后,前后结点的链接关系,以及删除或插入的是最后一个结点时,新空间的开辟与结点收尾等问题。其中删除功能的一部分就是查找功能,显示功能也是从链表的头结点遍历至最后一个,依次输出。4)实验结果与分析心得体会本次数据结构实习我收获颇丰,以前学过c语言与c 也有经常上机,但以往都是偏向于程序整体的算法设计,没有像这次的实习这样是着重在线性表,链表结构的算法设计上面。这次上机实习,让我更加熟练了结构体及结构体指针的用法,线性表的设计等等,同时在这次实习中,引用,指针,地址这三个的用法曾一度让我混淆,在查阅书籍后才得以解决,也希望老师在课堂上有时间时给我们详细讲解一下,指针,地址,引用三者的使用。附录:顺序表源代码:ncludeostreamusngnamespacestd;defnema_sze50typedefntTypeData;typedefstructTypeDatadatama_sze;ntn;输入线性表数SeqLst;vodmakeSeq(SeqLstLntm,n,k;cout请输入线性表长度endl;cnm;for(n=0;nm;n )cout请输入线性表数据endl;XXX;L.n=m;cout您输入的线性表为:endl;for(k=0;km;k )XXX;vodshowSeq(SeqLstL出线性表数据nta=0;whle(aL.n)XXX ;coutendl;vodnsert(SeqLstL入数据nta,b,c,k;cout请输入插入的数及其插入的位置endl;cnab;f(b=0|b(L.n 1)cout不能在该位置插入endl;return;k=XXX;XXX=a;c=L.n;L.n=L.n 1;whle(cb)XXX.datac-1;c-;XXX;删除数据voddelate(SeqLstLntwe;cout请输入想要删除数据的位置endl;不能在该位置删除endl;return找数据cnwe;f(we1|weL.n)coutwhle(weL.n)XXX.datawe;we ;L.n=L.n-1;vodfnd(SeqLstL)nta;cout请输入您想查找数的位置endl;cna;f(a=0|a(L.n)cout不能在该位置插入endl;return;cout该位置的数据为:XXX;vodmanSeqLstL;nt_uanze;makeSeq(L);whle

(1)cout请选择功能endl;cout插入1endl;cout删除2endl;cout查找3endl;cout显示4endl;coutendl请输入endl;cn_uanze;swtch(_uanze)case1:nsert(L);break;case2:delate(L);break;case3:fnd(L);break;case4:showSeq(L);break;default:break;单链表源代码:ncludeostreamusngnamespacestd;typedefntDataType;typedefstructnodeDataTypedata;structnode_lnk;lnknode,_lnklst;lnklstchushhualnklstL;L=(lnklst)malloc(szeof(lnknode);L-lnk=NULL;cout开辟空间成功,头结点建立endl;returnL;vodshuru(lnklstl)nta,k=0;cout请输入要存入的结点个数endl;cna;lnklstp,q;p=l;whle(p-lnk!=NULL)p=p-lnk;k ;for(nt=0;a; )cout请输入数据endl;q=(lnklst)malloc(szeof(lnknode);cnq-data;q-lnk=p-lnk;p-lnk=q;p=q;vodshow(lnklstl)cout链表数据为:endl;lnklstp;p=l-lnk;whle(p!=NULL)coutp-datap=p-lnk;coutendl;vodfnd(lnklstl)ntm,=0;cout请输入查找的结点endl;cnm;lnklstp;p=l-lnk;whle(pm-1)p=p-lnk; ;f(!p)cout链表没有这么长,查找错误endl;return;cout查找结点的数据位:p-dataendl;vodnsert(lnklstl)lnklstp,q;ntm,n,=0;cout请输入您要插入的结点位置及插入的数据endl;cnmn;p=l;whle(pm-1)p=p-lnk; ;f(p=NULL)cout不能在该位置插入,插入错误endl;return;q=(lnklst)malloc(szeof(lnknode);q-data=n;q-lnk=p-lnk;p-lnk=q;voddelate(lnklstl)lnklstp;ntm,n,=0;cout请输入想要删除的结点位置endl;cnm;p=l;whle(pm-1)p=p-lnk; ;f(p=NULL)cout该结点不存在,删除错误endl;return;n=p-lnk-data;cout被删除的结点元素为:nendl;p-lnk=p-lnk-lnk;vodmanlnklstL;ntselect;L=chushhua;whle

(1)cout请选择功能endl;cout添加链表数据1endl;cout插入链表数据2endl;cout删除链表数据3endl;cout查找链表数据4endl;cout显示链表数据5endl;coutendl请输入endl;cnselect;swtch(select)case1:shuru(L);break;case2:nsert(L);break;case3:delate(L);break;case4:fnd(L);break;case5:show(L);break;default:break;

预览已结束,下载原文档直接使用
查看全文
若对以上有内容有疑问请反馈或举报举报
声明:
您购买的是此内容的word文档,付费前可通过免费阅读辨别合同。非质量问题不退款,如需帮助可咨询客服【客服微信】