《2023年数据结构单链表实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年数据结构单链表实验报告.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、洛阳理工学院实验报告系别计算机系班级学号姓名课程名称数据结构实验日期11.7实验名称链表的基本操作成绩实验目的:熟悉掌握线性表链式存储结构,掌握与应用查找、插入、删除等基本操作算法,训练和提高结构化程序设计能力及程序调试能力。实验条件:计算机一台,Vi s ual C+6.0实验内容:1 .问题描述以单链表为存储结构实现以下基本操作:(1)在 第 i 个元素前插入一个新元素。(2)查找值为x 的某个元素。若成功,给 出 x 在表中的位置;不成功给出提醒信息。(3)删 除 第 i个元素,若成功,给出提醒信息并显示被删元素的值;不成功给出失败的提醒信息。2 .数据结构类型定义t y p e d e
2、 f s t r u c t L i n k N o d e(o i n t V a l u e;os t r u c t L i n k N o d e *N e x t;N o d e,*L i n k L i s t;3 .模块划分(1)初始化链表:v o i d I n i t L i s t (L i n k L i s t *L);(2)创建链表:尾插法:i n t C r e a t e F r o m Ta i l (L i n k L i s t L);(3)在指定位置插入元素:i n t I n s L i s t(L i n k L i s t L,i n t i,i n
3、 t e );(4 )在指定位置删除元素:i n t D e l L i s t (L i n k L i s t L,i n t i,i n t *e);返回值说明:返回E R R O R 插入失败,返回O K 插入成功;(5)按位置查找链表元素:i n t G e t L i s t(L i n k L i s t L,i n t i,i n t *e);4 .具体设计v o i d i n i t _ 1 i n k 1 i s t (L i n k L i s t *1)/*对单链表进行初始化*/3*1=(L i n k L i s t)m a 1 l o c (s i z e o f
4、 (N o d e);/*申请结点空间*/式*1 )-n e x t =N U L L;/*置为空表*/)v o i d C r e a t e F r o m H e a d(L i n k L i s t L)(N o d e *s;c ha r c;i n t f 1 a g=1 ;w hi l e(f l a g)/*f l a g 初值为1,当输入$时,置 f l a g 为 0,建表结束c=g et c h a r();。i f(c!=,$,)。s=(N o d e)m a Hoc(s i zeo f(No d e);/*建立新结点 s*/8S-d a ta=c;bg s n ex
5、t=L-next;/*将 s 结点插入表头*/。此一n e x t=s;。)else。flag=0;)v oid C r eateFromTa i 1 (LinkL i s t L)(Node*r,*s;och a r c;i n t f l a g =1;/*设立一个标志,初 值 为 1,当输入$时,f l a g 为0,建表结束*/r=L;/*i 指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/w h ile (f lag)/*循环输入表中元素值,将建立新结点s 插入表尾*/。c=getc h ar();。i f(c!=,$)0 0 。s=(N ode*)ma H o c
6、(s i zeof(N o d e);s-data=c;a r-next=s;g r=s;。e 1 s e00 f l a g =0;。r n e x t=N U L L;/*将最后一个结点的n e x t链域置为空,表达链 表 的 结 束*/)N o d e *G e t (L i n k L i s t L,i n t i )/*在带头结点的单链表L中查找第i 个结点,若找到(1 WiWn),则返回该结点的存储位置;否则返回N U L L*/(i n t j;N o d e *p ;6P=L;d=0;/*从头结点开始扫描*/w hi l e (p-n e xt!=N U L L)&(j n
7、 e x t;/*扫描下一结点*/。4 +;/*已扫描结点计数器*/)i f(i=j)“r e t u r n p;/*找到了第i 个结点*/e l s er e t u r n NU LL;/*找不到,iW O 或 i n */No d e *Lo c a t e(Li n k Lis t L,El e m T y p e k e y)/*在带头结点的单链表L 中查找其结点值等于k e y 的结点,若找到则返回该结点的位置P,否则返回NU LL*/(No d e *p;p=L-n e xt;/*从表中第一个结点开始*/。wh il e (p!=NU LL)if (p-d at a!=k e
8、y)叩=p n e xt;o o e 1 s e。o b r e a k;/*找到结点值=k e y 时 退 出 循 环*/e r e t u r n p;yin t I n s L is t (Lin k Li s t L,i n t i,El e m T y p e e)/*在带头结点的单链表L 中 第 i 个位置插入值为e的新结点s */(N o d e *p r e,*s;in t k;p r e=L;k =0 ;/*从头开始,查找第i 1 个结点*/wh i l e(p r e !=NU LL&k n e x t;o k =k+l;。,/*查 找 第 i T结点*/f(!p r e)
9、/*如当前位置P r e为空表已找完尚未数到第i 个,说明插入位置不合理*/(。p r i n t f (“插入位置不合理!”);o r e t u r n ERRO R;)3 s 二(N o d e*)m al l o c (s i z e o f (No d e );/*申请一个新的结点 S */s-d a t a=e;/*值 e置 入 s的数据域*/s n e x t =p r e-n e xt /*修改指针,完毕插入操作*/p r e n e xt =s;o r e t u r n 0 K;)i n t D e 1 L is t (Lin k L i s t L,in t i ,El
10、e m T y p e *e)/*在带头结点的单链表L 中删除第i 个元素,并将删除的元素保存到变量*e中*/(No d e *p r e,*r ;o in t k;o p r e=L;k=0;wh il e (p r e-n e xt !=NU L L&k n e x t;业=k +1 ;“g g 川/*查找第i -1 个结点*/。i f (!(p r e-n e xt)/*即 wh il e 循环是由于 p-n e x t =NU LL 或 i n e x t;叩 r e-n e xt=p r e-n e xt-n e x t ;/*修改指针,删除结点 r*/*e =r-d at a;f
11、r e e(r);/*释放被删除的结点所占的内存空间*/中r in t f (成功删除结点!”);r e t u r n O K;)in t Lis t Le n g t h(Lin k Lis t L)/*求带头结点的单链表L 的长度*/(No d e *p ;in t j;o p=L-n e xt;j =0;/*用来存放单链表的长度*/o w h i 1 e (p !=NU L L)p=p n e xt;g j+;r e t u r n j;。/*j为求得的单链表长度*/5.测试数据及结果实验总结:在调试 的时候发现在头插法的 时 候 出 现 错 误,通 过 逻 辑 思 考 与 调 试,发现错误所在,并且更改。