《2023年单链表实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年单链表实验报告.pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机与信息技术学院综合性、设计性实验报告专业:网络工程 年级/班级:大二 2 0 2 32023学年第一学期课程名称数据结构指导教师李四学号姓名160 8 3 24 0 XX 张三项目名称单链表的基本操作实验类型综合性/设计性实验时间2 023.1 0.3实验地点21 6机房一、实验目的(1)熟悉顺序表的创建、取值、查找、插入、删除等算法,模块化程序设计方法.二、实验仪器或设备(1)硬件设备:C PU 为 Pentium 4 以上的计算机,内 存 2 G 以上(2)配置软件:Microsoft W i n dows 7 与 V C+6.0三、总体设计(设计原理、设计方案及流程等)设计原理:单
2、链表属于线性表,线性表的存储结构的特点是:用一组任意存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。因此,对于某个元素来说,不仅需要存储其自身的信息,还需要存储一个指示其直接后继的信息。设计方案:采用模块化设计的方法,设计各个程序段,最终通过主函数实现各个程序段的功能。设计时,需要考虑用户输入非法数值,所以要在程序中写入说可以解决非法数值的代码。设计流程:1.引入所需的头文献;2.定义状态值;3.写入顺序表的各种操作的代码;写 入 主 函 数,分 别 调 用 各 个 函 数。在 调 用 函 数 时,采 用if结构进行判断输入 值 是 否 非 法,从而执行相应的程序四、
3、实 验 环 节(涉 及 重 要 环 节、代码分析等)#i nc l u d e /E O F(=Z 或 F 6),N U L L#i n c l u d e /s r a nd(),r a nd(),e x i t(n)#i nc 1 u d e /m a l l o c(),a l l o c(),r e a 1 l o c ()等#i n c l u d e /INTMA X等#i n c l u d e#i n c l u d e#i nc 1 u d e /f l o o r (),c e i 1 (),a bs ()#i n c 1 u d e /c o u t,c i n#i n
4、c l u d e /c 1 o c k (),C L K T C K ,c 1 o c k _ t L N o d e,*L i n k L i s t;#d e f i neTRUE1#d e f i neF A L S E0#d e fin eO K1#de fin eE R R O R0#de fin eI N F E AS I B L E-1#d e f i n eO V E R F L O W-2t y p e d e fi n tS t at u s ;/S t at u s是函数的类型,其值是函数结果状态代码,如o K等t y p e de fin tE l e m T y p
5、 e;t y p e de f st r u c t LNod eo E 1 e m T y p e dat a;结点的数据域o s t r u c t L N o de *n e x t ;结点的指针域/L in k L is t为指向结构体L N o d e的指针类型/初始化单链表算法环节:1.生成新结点作为头结点,用头指针L指向头结点.2 .头结点的指针域置空。S t at u s I n i t L i s t _ L(L in k L is t&L)(L=n e w L N o de;生成新结点作为头结点,用头指针L指向头结点;L-n e x t=N U L L;。/头结点的指针域置
6、空r e t u r n O K;)/单链表的取值算法环节:1.用指针P指首元结点,用j做计数器初值赋为1.2 .从首元结点开始依次顺着链域n e x t向下访问,只要指向当前结点的指针p不为空(N U L L),并且没有到达序号为i的结点,则循环执行以下操作:P指向下一结点;计数器j相应加1;3.退出循环时,假如指针P为空,或者计数器j大 于i,说明指定的序号i值不合法(i大于表长n或i小于等于0),取值失败返回E R R O R,否则取值成功,此时j =i时,p所指的结点就是要找的第i个结点,用参数e保存当前结点的数据域,返回0 K。S t a t u s G e t E l e m _L
7、(L in k L i s t L,in t i,E l e m T y p e&e)(L in k L is t p ;in t j;0 p=L-n e x t;j=l;w h i l e (p&j n e x t;。+j;if(!P I j i)r e t u r n E R R O R;。e =p-d a ta;r e t u r n O K;/单链表的按值查找算法环节:1.用指针p 指首元结点。2 .从首元结点开始依次顺着链域n e x t 向下查找,只要指向当前结点的指针p 不为空,并且P 所指结点的数据域不等于给定值e ,则循环执行以下操作:p 指向下一个结点。3.返回p。若查找成
8、功,p 此时即为结点的地址值,若查找失败,p的值即为N U L L。in t L o cat e E l e m L (L in k L i s t L,E l e m T y p e e )(L in k L is t p;in t j;p =L-n e x t;j =1;w h il e (p&p-d a t a!=e)p=p n e x t;j+;)i f(p)r e t u r n j;o e l s e r e t u r n 0;)/单链表的插入算法环节:1.查找结点a一并由指针p指向该结点。2 .生成一个新结点*s。3.将新结点*s的数据域置为e。4.将新结点*s的指针域指向结点
9、a,。5.将结点*p的指针域指向新结点*s。S t at u s L is t I n s e r t _L (L i n k L is t&L,i n t i,E 1 e m T y p e e)(L in k L is t p =L,s;i n t j=0;w h il e(p&(j n e x t;。+j;)i f(!p|j i-D(r e t u r n E R R O R;s=n e w L N o de;s -d at a=e;s-n e x t =p-n e x t;o p n e x t =s ;o r e t u r n O K;)/单链表的删除1.查找结点a-并由指针p指向
10、该结点。2.临时保存待删除结点a,的地址在q中,以备释放。3.将结点*P的指针域指向ai的直接后继结点。4.释放结点ai的空间。S t a t u s L is t D e l e t e L(L i n k L is t&L,i n t i)(L i n k L i s t p=L,q ;i n t j =0 ;w h il e (p-n e x t)&(j n e x t;s+j;i f(!P -n e x t)|(j i-1)r e t u r n E R R O R;)%二 p-n e x t;p-n e x t=q -n e x t;de l e t e q;r e t u r n
11、O K ;)单链表的输出算法环节:1.将指针P指向L的 n e x t 域。2 .输出p 指针的数据。3.将指针p后移。4.循环第2,3 步,直到P 指针为空(N U L L )ov o i d L i s t P r in t _L(L i n k L i s t L)L i n k L i s t p;o p=L n e x t;doo p r i n t f(5 d ,p-dat a);p=p-n ext;w h i 1 e (p);)v o i d m a i n ()I。i n t i,n,e;*L i n k L is t L;if(I n it L is t _L (L);p r
12、 i n t f(M单链表创建成功!n);p r i n t f(请输入您要输入的数据个数n:n );o s can f(%d,&n);p r i n t f(请输入您要输入的数据:n);o fo r (i=l;i s can f(d,&e);i s t l n s e r t _L (L,i,e);个r in t f(当前单链表的内容为:n );o L is t P r in t _L(L);o p r in t f(n );p r i n t f(请输入您要插入的数据e 及其位置i,使用空格键隔开:n);s can f(,z%d%d ,&e,&i);if(L is t l n s e r
13、t _L(L,i ,e )p r in t f(当前单链表的内容为:n );g L is t P r in t L(L);e l s e。p r in t f(,zi 值越界!n );)叩 r i n t f(n);叩r in t f(请输入您要取的数据序号:n );o s c a n f(d,&i);o if(G e t E 1 e m _L(L,i,e)-p r in t f(第%d 位数据的值为:%dn ,i ,e);e l s ep r in t f(”i 值越界!n);0o p r in t f(请输入要查找的数据值:n );o s can f(%d/z,&e);i f(!L o c
14、at e E 1 e m _L(L,e)0(。p r in t f(查无此值!n );e l s e。*p r i n t f(数据%d 在%(1 号位置 n ,e,L o ca t e E l e m _L (L,e);o p r in t f(”请输入要删除的数据的序号:n );o s can f(%d ,&i);0 i f(L i s t D e l e t e _L (L,i)0中r i n t f(删除后单链表的内容为:n );L i s t P r in t _ L(L);o e l s e。(g p r i n t f(输入有误!);p r i n t f(n );五、结果分析与
15、总结图1结果分析:如 图1所示,输入对的数据时,程序各个功能执行正常。设立输入数据个数为5,可以输入5个数据,按回车后,可以显示我们当前单链表中的数据内容。继续输入下一指令:输入要插入的数据及位置,使用空格键隔开,回车后,可以看到已经成功插入。继续输入所取的数据序号,可以查找该数据的值。输入要查找的数据,可以返回该数据的位置。输入要删除的数据,可以返回删除该元素后的单链表的内容。总结:在单链表中,对数据元素a i来说,除了存储其自身的信息之外,还需存储一个指示其直接后继的信息。这两部分信息组成数据元素a i的存储映像,称为结点。它涉及两个域;其中存储数据元素的域称为数据域;存储直接后继的域称为指针域。教师署名:s年 月