2023年数据结构实验报告级及答案.pdf
《2023年数据结构实验报告级及答案.pdf》由会员分享,可在线阅读,更多相关《2023年数据结构实验报告级及答案.pdf(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数据结构实验报告专 业信息管理学院年 级_20 2 3级学 号学生姓名 _ _ _ _ _指导老师 _ _ _ _ _ _ _ _ _ _ _ _ _ _华中师范大学信息管理系编I 实验规定1.每次实验中有若干习题,每个学生至少应当完毕其中的两道习题。2.上机之前应作好充足的准备工作,预先编好程序,通过人工检查无误后,才干上机,以提高上机效率。3.独立上机输入和调试自己所编的程序,切忌抄袭、拷贝别人程序。4.上机结束后,应整理出实验报告。书写实验报告时,重点放在调试过程和小节部分,总结出本次实验中的得与失,以达成巩固课堂学习、提高动手能力的目的。II 实验内容实 验 一 线 性 表【实验目的
2、】I.熟悉VC环境,学习如何使用C 语言实现线性表的两种存储结构。2 .通过编程、上机调试,进一步理解线性表的基本概念,纯熟运用C 语言实现线性表基本操作。3.纯熟掌握线性表的综合应用问题。【实验内容】1.一个线性表有n 个元素(nnext;q 是工作指针,指向链表中当前待解决结点。p re=head:P re是前驱结点指针,指向q 的前驱。w h ile (q!=n u 1 I&q!=p)pr e=q;q=q-n ext;未找到 p 结点,后移指针。if(pnext=nu 1 1 )printf(p 无后继结点n);p 是链表中最后一个结点,无后继。else 解决p 和后继结点互换q=p-n
3、 ext;暂存p 的后继。P re-next=q;p 前驱结点的后继指向p 的后继。P-next=q-n ext;/p 的后继指向原p 后继的后继。q-n ext=p;原p 后继的后继指针指向p。)算法结束。4.己知非空单链表第一个结点由head指出,请写一算法,互 换 p 所指结点与其下一个结点在链表中的位置。规定:该算法用函数Rev e r s e(h e a d,p)实现,其中head为表头指针,p 指向要互换的结点;在主函数中调用创建链表的函数创建一个单链表,并调用该函数,验证算法的对的性。5.设有一个单链表,编写可以完毕下列功能的算法:找出最小值的结点,且打印该数值;若该数值是奇数,
4、则将其与直接后继结点互换;若该数值是偶数,则将其直接后继结点删除。规定:编写主函数验证算法的对的性。6.在一链表中,已知每个结点具有三个域:da t a、n e x t和 pr i or,其中p r i o r 域为空,设 一个算法,使每个结点的Prior指向它的前驱结点,形成双向循环链表。规定:建立一个结点中具有三个域的单链表;在主函数中调用此算法,构成双向循环链表;在主函数中运用正向和逆向两种方式输出链表中的数据,验证算法的对的性。7.用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。规定:通讯录是按姓名项的字母顺序排列的;能查找通讯录中某人的信息;提醒:可用链表来存放这个通讯录,
5、一个人的信息作为一个结点。成链的过程可以这样考虑:先把头结点后面的第一个数据元素结点作为链中的首结点,也是末结点。从第二个数据开始逐个作为 工作结点,需从链表的首结点开始比较,假 如 工作结点 的数据比链中的 当前结点的数据小,就插在其前面。否则,再看后面是否尚有结点,若没有结点了就插在其后面成为末结点;若后面尚有结点,再与后面的结点逐个比较解决。【实验报告】实习时间:2023/10/14实习地点:实习机号:作了 1,2,3,4,5,6 题1题采用顺序存储表达实现的算法:具体实验内容bool In se rt_ S q(S qL ist&LrElemType x)(in t i;i f(L.l
6、ength=L.lis ts iz e)L.elem*(ElexiiType*)re a llo c (L.elemr(L.l i s t 31 ze+L.increm ent siz e)*siz e o f(ElemiType);i f(!L.elem)re tu rn fa ls e;L.listsiz e+L.in c re m e n rsiz e;)f o r(1=L.le n g th-1;xSqLisc A;InitList_Sx;for(i=0;l I运营结果:请输入一小于12 3的整数:1211 4?9 10 14 17 65 98 121 123请按任意键继续 w r t
7、u ia ttt aaw vi J u w i,1r,请输入一小于123的整数:00 1 4 7 9 10 14 1?65 98 123请按任意键继续.请输入一小于123的整数:1241 4 7 9 10 14 17 65 98 123 124请按任意键继续.算法代码:bo o 1 Insert_Sq(S q L i st&L,E 1 emTy p e x)(i n t i;。if(L.length=L.list s i ze)(L.e 1 em=(Elem Type*)r eall o c(L.elem,(L.lists i z e+L.i n c rem e nts ize)*siz e
8、o f(ElemTy p e);。if(!L.e 1 em)r e t urn f a Is e;。L.li s t s i z e+=L.i ncremen t s i ze;for(i=L.leng t h-1;x=0;i)L.el e mi+1 =L.elem i ;L.e 1 em i+l=x;L.length+;return tr u e;采用链表实现的算法:void In se rt_ L(L inkL ist ElemType x)(L inkL ist prqrm;p=L-nexr;q=L;w h ile(p)(i f (xp-data&p-next)p=p-ext;q q-e
9、 x t;e lse i f(xp-data&!(p-next)(rr.=(L inkL ist)m alloc(sizeo f(LNode);m-data=x;rc-next=NULL;re tu rn;Ie lse ir=(L inkL ist)m alloc(sizeo f(LNode);m-data=x;iE-nextasp;q-next=m;re tu rn;)主函数:I i n t m a i n()(L i n k L i s t A;i n t a 1 0 =,4,7,9,1 0,1 4,工7,9 8,1 2 3,1 2 4 ;C r e a t e L i s t _ L _
10、 F r on t(Af a,1 0);i n t xr1=0;c o u x ne x t;q=L;whil e(p)6(i f(x p-d at a&p-n ext)p=p-n ext;q=q-n e x t;eels e if(xp-da t a&!(p n e x t)。(0 m=(L in k Li s t)ma 1 lo c(s i ze o f(LNode);。m-data=x;g 。p-n e x t=m;Q m-n e x t =N U L L;o r e t u r n;。0)e l s e 。m=(L i n k L i s t)m a l 1 o c(s i z eof
11、(LNo d e);m-data=x;g。m ne x t=p;Qq-n ex t=m;ret u rn;6)比较两种算法的优劣:顺序表和链表都要和X逐项比较,顺序表找到X应放的位置之后插入,后面的元素都要向后移位,但链表只需修改指针即可,链表相对易操作一些2题算法:v oid D elete_ _ L(LinlcList&L)(E lemT y pe x;coutx”请输入元素x:n;cin x;LinkList pr q;P=L;i f(!(p-nex t)(链表不存在cv andl;return;while(p-nex t)if (x=rp-nex t-dara&p-nex r-nex
12、r)q -e x t;p-nex t=q-nex t;f ree(q);return;)else if (x=p-nex r-dar&!(p-nex t-nex r)(q -e x r;p-nex t=NULL;f ree(q);return;)p=sp_ n e xt;c o u t x 不存在 r,e n d l;return;)主函数:int m a i n()(LinkLisc A;E lemT y pe a 1 0 =1,2,3,4,7,5 6,7 5,8 9,4,6 0 ;C reateList_ L_ F ront(Ar a,1 0);ListT rav erse_ L(A);D
13、 elete_ _ L(A);cou七 endl ”操 作 后 的 结 果:n endl;ListT rav erse_ L(A);)代码:v oid D elete_ L(Li n k List&L)(E lemT y pe x;c OU t nex t)6(。cout n ex t)。i f(x =p-nex t dat a&p nex t-nex t)q=p-n e x t;p-nex t=q n e x t;f r e e(q);re t urn;。else if(x =p-n e x t-data&!(p-n e x t -nex t)0 0 og q=p-nex t;。p-n e
14、x t=NULL;。f r ee(q);8 gg re t u r n;6 p P-n e x t;bcout *x 不存在 e n d 1;oretu r n;结果:1 _ 2 347567589460喝胡人兀素x:2A作后的结果:13 47567589460请按任意键继续.12 3请输入元素x:6047567589460操作后的结果:12 3475675894请按任意键继续.1 _ 2 3置|2 5素x:18x不存在75 89 4 60操作后的结果:12 3请按任意键继续.475675 89 4 603题算法:5 v oid D eleteRepeat_ L(LinkList&L)6 (B
15、90123456789012345LinkList pr qri r.;p L-ex t;while(p-nex c!=NULL)iQ=P;while(q-nex t!=NULL)if (q-nex t-data=p-data)else)p=p-nex t;)i r;=q-nex Dq-nex t=m-nex t;f ree(m);q=q-nex t;主函数:)int main()?J LinkList A;int a4,7,9,1,0,1,4,1,7,9,8,1,2,3,1,2,4;I CreateList_L_Front(A,ar18);DeleteRepeat_L(A);3 coucne
16、 x t;w h i l e (p-n e x t!=NU L L)(q=p;aw h i 1 e(q-n ext!=NULL)。o i f(q-n ex t-dat a=p-data)0 0 (b。m=q-n e xt;s oq-next=m-n e x t;of r e e(m);。e ls e q=q-next;p=p-n e x t;4题算法:v o id R everse_L(L in k L ist&headFL in k L ist p)c o u t rr;-n e x t-d ata;L in k L ist q;r f (p-next=NULL)I c o u t r,无后
17、继结点 r,e n d l;e ls e q3ssg m e x t;m-next=q;p-n ex t=q-n ex t;q-mext;=g;)re tu rn;)主函数in t m ain()void Reverse_L(L inkL ist&seadr L in k L ist p);s ra n d(unsigned)rime(NULL);L in k L ist headrpr k;in t i;ElemType a 10=1,4,3,7,8,5,8,8 9,6 5,4 5;C reateL ist_L _R ear(h e a d,a,1 0);k=head-next;ir.-he
18、ad;L istT rav e rse_ L(head);fo r(i=l;inext;m=n:-next;/q=m-n e x t;Reverse_L(headrp);结果:n e n d l;L istT rav e rse_ L(head);re tu rn 0;头文献并且定义了全局变量:ty p ed ef in t ElemType;I#in c lu d e#in c lu d eI#in c lu d ei#in c lu d e ;#in c lu d e L in k L ist 0:/全 局 变 量,使-n ext;运营结果:算法代码:v o id Revers e _L(
19、LinkLis t&hea d,LinkList p)(LinkList q,p re;q=h e a d next;pre=head;ewhile(q!=NULL&q!=p)6(pre=q;q=q-ne x t;)if(p-next=NU L L)coutV”无后继结点vnex t;p renext=q;。p-n e xt=q-nex t;q-next=p;0ret u rn;)5题算法:v oid f x ndmin_ L(LinkList&L)(E lemT y pe e;LinkList pr qrprer q_ pre;p=L-nex t;pre=L;e=p-data;while(p
20、)(i f(e p-data)e=p-data;Q=P;q_ _ pre=pre;)p=p-nex t;pre=pre-nex t;)cou1 最小值为:n e e n d l;if (e%2&6 !a-r.ex t|!(e%2)&!q-nex t)8 U t X nex r)r,endl;ILinkList m;iE=q-nex r;q_ pre-nex tssi r.;q-nex t=m-nex t;q;8 u c nex t;q-nex t=ir;-nex t;f ree(in);c o u t x v此最小值为偶数,将其直接后继结点删除。endl;)主函数:int main()Link
21、List A;E lemT y pe a 1 0 ,x;coutx v”请输入1 0个整数:n endl;f or(int i=0;i 1 0;i+)cin x;ai=x;)C reateList_ L_ _ F ront(Ar a,1 0);f indmin_ L(A);couc next;p re=L;e=p-dat a;ewhile(p)|if(e p-d a ta)e(。e=p-d a ta;、8 q=p;a。q _pre=p r e;)。p=p n e xt?。pre=pr e-next;6coutV”最小值为:e n e x t I|!(e%2)&!q-next)o c ou t
22、该最小值结点的后继为空,不进行操作。next)0。Link L i s t m;s m=q-nex t;g q_p r e-next=m;q-n e x t=m-next;m-next=q;。c o u t”此最小值为奇数,将其与直接后继结点互换。else g L inkLi s t m;eg m=q-ne x t;。q-n e xt=m-n ext;free(m);cout next-data!=0)m-next-prior=m;-.ext-prior=ir.;v o id In itD u L(D uL inkL ist&L)L=(DuLNode*)m a llo c(s iz e o f
23、(DuLNode);i f (!L)e x i t(1);L-next=NULL;L-prior=NULL;主函数:int main()void InitDuL(DuLinkList&L);void build_circle(DuLinkList&head);DuLinkList pfqr headr k;InitDxiL(p);InitDuL(q);InitDuL(head);TElemType a;head=q;cout向链表中输入一串数字,以0作为浩交标志:endl;scanf(n%dnf&a);q-data=O;while(a)/建 立 单 项 循 环 链 表 并 赋 值InitDuL
24、(p);|p-data=a;q-next=p;q=p;scanf(d”,&a);Ip-nexc=k=head;build_circle(head);while(head-next-data)/正 向 循 环 输 出 链 表couthead-next-data n;head=head-next;courendl;build_circle(k:);/反 向 循 环 输 出 链 表while(k-pror-data)prior-daran n;k=k-prior;)头文献及定义的结构体:1 typedef int ElemType;2#include 3#include 4#include 5 ty
25、pedef struct dunode6 ElemType data;7 struct dunode*next;struct dunode*prior;9 DuLNodef*DuLinkList;算法代码:v oi d b u i ld_ c ircle(D uLi n k L i st&head)(Qu L inkList m,n;m=he a d;w h ile(m-n ex t-data!=O)9(。m-nextprior=m;m=mn e xt;。m-n e x t p rio r=m;。)结果:句链表中输入一串数字,以。作为结束标志:2 3 4 5 6 7 8 9 0)3 4 5 6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据结构 实验 报告 答案
限制150内