《数据结构线性表试验报告.docx》由会员分享,可在线阅读,更多相关《数据结构线性表试验报告.docx(11页珍藏版)》请在第一文库网上搜索。
1、线性表上机实习1、实验目的(1)熟悉将算法转换为程序代码的过程。(2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。(3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。(4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。(5)熟练掌握线性链表(单链表)的基本运算:杳找、插入、删除等,能在实际应用中灵活选择适当的链表结构。2、实验要求(1)熟悉顺序表的插入、删除和查找。(2)熟悉单链表的插入、删除和杳找。3、实验内容:顺序表(1)抽象数据类型定义容量为maxsize的静态顺手表顺序表中的实际元素个数静态顺序表的定义typed
2、efstructTypeDatadatamaxsize;intn;)Seq1ist;在本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。(2)存储结构定义及算法思想在顺序表结构体的定义中,typedefintTypeData为整型,存储结构如下:fbr(n=O;nm;n+)CoUtV”请输入线性表数据vvend1;cin1.datan;顺序将数据存入顺序表)其他存储与此类似,都是直接赋值与数组的某一位插入版块子函数:voidinsert(Seq1ist&1)插入数据inta,b,c,k;COU
3、1ab;if(b(1.n+1)coutv不能在该位置插入vb)1.datac=1.datac-1;c-;通过循环,实现插入位置后的数据挨个往后移动一位11.datab=k;)顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。显示操作是通过循环实现表中第一个元素到最后一个无素的输出,查找操作是直接取数组中的查找位输出。(3)实验结果与分析盘留5上机薄态存蒲膜序表Debugxianing也2static.exe二产输入一显示查找第2位的数据元素为8显示功能,显示顺序表的所有数据元素融82入示献1请插1-请F青输入您想查找数的位
4、置该位置的第据为:谓遗择功能巧入1删除2宣战3显不4单链表链表的数据类型链表的结点指针定义了结构体Iink1ode和结构体指针1ink1ist(1)抽象数据类型定义typedefstructnodeDataTypedata;structnode*1ink;1inknode,*1ink1ist;在本次实验中,首先程序自己建立一个空的头结点,通过菜单的功能选择“添加链表数据”可自由添加链表的节点数及元素值。在菜单选择中,有“添加链数据”,“插入链表数据”,“删除链表数据”,“查找链表数据”和“显示链表数据”功能,选择不能的功能选择就能实现不同的操作。其中“添加链表数据”可反复批量输入链表数据。(2
5、)存储结构定义及算法思想在单链表中,typedefintDataType;DataTyPedata;定义链表存储数据位整型。存储结构如下:whi1e(p-1ink!=NU11)p=p-1ink;k+;首先找到单链表的最后结点(如果是只有头结点)的单链表则直接跳过),以便后面接着输入数据for(inti=0;iq-data;q-1ink=p-1ink;将前面一个结点的指向(及NU11)赋给新开辟的结点的指向-1ink=q;将插入点前面一个结点指向新开辟的的结点p=q;将指明的最后一个一个结点向后移1位到最后一位,以便后面接着输入删除结点子函数:voidde1ate(1ink1ist&1)1ink
6、1istp;intm,n,i=0;COU1m;P=I;whi1e(p&i1ink;i+;将头结点赋给转移指针p查找删除结点的位置当在单链表中间已查到删除结点或P=NU11时跳出循环if(p=NU11)cout1ink-data;找到删除接结点将数据取出并显示出来(找结点时是找的前一个结点)CoUtVV被删除的结点元素为:n1ink=p-1ink-1ink;将删除结点的前后结点链接起来链表的删除,插入操作是类似的,要考虑到加入或减少一个结点后,前后结点的链接关系,以及删除或插入的是最后一个结点时,新空间的开辟与结点收尾等问题。其中删除功能的一部分就是查找功能,显示功能也是从链表的头结点遍历至最后
7、一个,依次输出。(4)实验结果与分析11J.J7;J-r;间功去表表表表K工革连诧茯连连2I,JE1bt息-,T1f加入鬟示nj显建立头结点菜单功能要存入的结点个数批量输入数据建立单偌表12345居居居居居7.7.77;功君表择涟涟涟*DiSJShS5Jt1SSDebugdan1iabiao.ce表表表表表淬进评avtm41不请输入MJ“请212345Re二.二Og二P三#.表表表-H连连1VHH141IT4ivt瞿贝鬟示I1ff11古-麻hH,侬表数据为I隘择功能幅人格蓑数得心得体会本次数据结构实习我收获颇丰,以前学过C语言与C+也有经常上机,但以往都是偏向于程序整体的算法设计,没有像这次的
8、实习这样是着重在线性表,链表结构的算法设计上面。这次上机实习,让我更加熟练了结构体及结构体指针的用法,线性表的设计等等,同时在这次实习中,引用,指针,地址这三个的用法曾一度让我混淆,在查阅书籍后才得以解决,也希望老师在课堂上有时间时给我们详细讲解一下,指针,地址,引用三者的使用。附录:顺序表源代码:#incIudeUSingnamespacestd;#definemasize50typedefintTypeData;typedefstructTypeDatadatamaxsize;intn;Seq1ist;voidmakeSeq(Seq1ist&1)据(intm,n,k;COUt“请输入线性表
9、长度”m;for(n=0;nm;n+)(CoUt“请输入线性表数据“1.datan;1.n=m;COUt“您输入的线性表为:“end1;for(k=0;km;k+)(cout1.datakzz;coutendI;voidshowSeq(Seq1ist1)(inta=0;whi1e(a1.n)(cout1.dataa,z/z;a+;/输入线性表数输出线性表数据coutendI;voidinsert(Seq1ist&1)插入数据(inta,b,c,k;CoUt请输入插入的数及其插入的位置”ab;if(b(1.n+1)cout“不能在该位置插入“b)(1.datac=1.datac-1;c;1.da
10、tab=k;voidde1ate(Seq1ist&1)删除数据(intwei;CoUt请输入想要删除数据的位置“wei;if(wei1.n)COUt“不能在该位置删除“endI;return;whi1e(wei1.n)(1.datawei_1=1.datawei;wei+;1.n=1.n-1;voidfind(Seq1ist1)查找数据(inta;COUt请输入您想查找数的位置“end1;cina;if(a(1.n)cout“不能在该位置插入“endI;return;)COUt“该位置的数据为:1.dataaTend1;voidmain()(Seq1ist1;1 ntxuanze;makeSe
11、q(1);whi1e(1)(COUt”请选择功能“end1;CoUt插入1end1;COUt删除2end1;COUt查找3end1;COUt显示4endI;coutendI请输入“xuanze;switch(xuanze)(case 1: insert(1);break;case 2: deIate(1);break;case 3: find(1);break;case4:showSeq(1);break;defau11:break;)单链表源代码:#inc1udeusingnamespacestd;typedefintDataType;typedefstructnodeDataTypedata;structnode*1ink;Iinknodef*1inkIist;IinkIistchushihua()(IinkIist1;1=(IinkIist)maIIoc(sizeof(Iinknode);1-1ink=NU11;COUt“开辟空间成功,头结点建立“end1;return1;voidshuru(IinkIist&1)(inta,k=0;COUt”请输入要存入的结点个数1ink!=NU11)(p=p-1ink;k+;)for(inti=0;ia;i+)(COUt请输入数据“q-data;q-Iink=p-1ink;p-Iink=q;P=q;1voidshow(IinkIist