数据结构实验五:链表实验_第1页
数据结构实验五:链表实验_第2页
数据结构实验五:链表实验_第3页
数据结构实验五:链表实验_第4页
数据结构实验五:链表实验_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一, 实验题目实验五:假设有一个单向循环链表,其结点包含三个域:data, pre和next,其中data为数据域 next为指针域,其值为后继结点的地址,pre也为指针域,其初值为空(null),试设计算法 将此单向循环链改为双向循环链表。二,问题分析木程序要求将-个包含三个域:data, pre和next, k中data为数据域next为指针域, 其值为后继结点的地址,pre也为指针域的单向循环链表改为双向循环链表。完成这些问题 需耍解决的是空链表的牛成,链表元素的输入和输出,将单向链表改为双向链表等。1, 数据的输入形式和输出形式:单链表的元索均为int型,输出的单链表元素也 为int型

2、。输出链衣指针所指向的前一个或后一个链农元素时,选择1或2。2, 结果的输出形式:首先输出单链表的元素,将单链表转换为双向链表后,输出 p指针所指的前一个或后一个链表元索。3, 测试数据:(1) 输入的单链表元素为:23,553,87,0;(2) 输入的单链表元素为:34,7650;三, 概要设计1, 为了实现上述程序功能,需要:(i)构造一个空的单链表l; (2)逐个输入单链表 元素;(3)输出单链表元素;(4)将单链表转换为双向链表;(5)进行简单的双向四,1,链表的结构类型定义:typedef struct dnode int data;struct dnode * pre,* next

3、;jdlinklist;2, 建立空链表伪代码:dlinklist *crcalnull()dlinklist *l;l=(dlinklist*)malloc(sizeof(dlinklist);l->next=null;l->pre=null;l->data=null; return l;3, 建单链表伪代码:dlinklist* input(dlinklist *l,int x) dlinklist *s,*r;r=l->next; s=creatnull(); s->data=x; l->next=s; s->next=r; return l;4

4、, 将单链衣转换为双向循环链表的伪代码:dlinklist *setdouble(dlinklist *l)dlinklists=l; t=l->next;while(t!=null)t->pre=s; s=s->next; t=t->next;return l;五, 源程序#include "stdio.h"#include "malloc.h"typedef struct dnode 链表的结构类型定义int data;数据域struct dnode *pre,*next;dlinklist;dlinklist *creatn

5、ull()建立空链表,即建立空结点dlinklist *l;l=(dlinklist*)malloc(sizeof(dlinklist);/为新节点申请空间l->next=null;l->pre=null;l->data=null;置空return l;dlinklist* input(dlinklist *l,int x) 头插法建单链表dlinklist *s,*r; i-l->next; s=creatnull();将l指向的下一个节点赋值给r 建立空点结s->data=x; l->next=s; s->next=r; return l;将x值赋

6、给新建结点的data域将s赋值给l指向的下一个结点将1赋给s所指向的下一个结点,完成插入dlinklist *setdouble(dlinklist *l) 将单链表转换为双向循环链表 dlinklist *s,*t;s=l; t=l->next; while(t!=null)t->pre=s;s=s->next;t=t->next;return l;void display(dlinklist *k)/输出顺序表中数据k=k->next;while(k!=null)printf("%d h,k->data);k=k->next;void m

7、ain()dlinklist *p,*q; 定义两个指针型变量p, qint x,i=0;p=creatnull();建立空链表q=p;使q也指向头结点printf("输入顺序表的元素,(输入0表示输入结束):n“); while(x!=0)p=input(p,x); 当x不等于0时,输入链表元素x scanf("%d",&x);printfc,输入的顺序表元素为:n”); p=setdouble(p);将单链表转换为双向循环链表display(p);输出链表表元素doprintf("n");printf(” 1,输出下一个数据:n“)

8、;printf(n2,输出上一个数ffi: nu);printfc1请选择要输出的是顺序表元素的上一个还是下一个元素:n“); scanf(h%dn,&i);switch(i)选择语句case 1:当i为1时,输出q指针所指的下一个链表元素q=q->next;if(q !=null) printf("t 链表元素为%dn",q->data);elseprintf("t为表尾元素”);q=p;)break;case 2:当i为2时,输汕q指针所指的前一个链表元素 q=q->pre;if(q->pre!=null)printf(mt 链

9、表元素为 %dnh,q->data);elseprintf(mt为表头元素”);q=p;break; )while(l);六, 调试分析如下语句所示,当输入顺序表匹書时,逬有输入语句“scanf (“d”,&x) “ printfl输入顺序表的元素(输入碟示输入结束): while(x?=o) . . .则输出的错误结果:験灭顺序表的元豪:(输加表示输心束): (12 .43;54 0:.俞灭的贩序表元素浙:4 43,羽 f 58993460蟲瞇魯龜序恚元隸±奉躅r元彖瀝出下一鹤®即要输入的链表元索为54,43,23.但输出是却多出一个元素。这个问题比较难发现

10、和更 改,应为在调试过程中,编译吋不显示有语法等错误,所以要细心和理解输入输出语句的意 义和用法。七, 使用说明当程序运行后,提示用户输入链表元素,并告诉用户输入0表示输入结束。然后输出链 表元索。此时在程序中已经将单循环链表变为双循环链表,为了测试双向循环链表,会 提示用户输出链表的下一个数据元索或上一个数据元素。如果川户想输出下一个元索, 择选1,如果用户想输出上一个元素,择选2.八,测试结果r.es2 a.* 潇前f!?输我0表不输叢結束疔;.:340.輸烦的喷廓羔忑素为"765 34.es3 j553 8? ®債入的顺序表元素为:7 553/123.嚕翳二表霾畜靈翼驗右爵鬻慎序表灵恚叭上一个还疑下一卞苑素; * a 镑表玮素为血上軌矚蹩触序奏茹素匹上一个通是下一笔运素; 镑表苑索为5劇:输出葯蹇硕序表苑素軽匕一个还是下一个苑素; 镑表元素为曲 貪邊曇書瑞占奮矍服曉義怎素药丄今还是下令元素“1链吞素为険d齢仁達呼字鰹谱畫琦醯霭i鳩表乓素斷丄令还是下令元素;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论