ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:57.08KB ,
资源ID:3523236      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3523236.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验3王清华0907022107.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验3王清华0907022107.docx

1、数据结构实验3王清华0907022107数据结构实验报告实验序号:3 实验项目名称:链式表的操作学号0907022107姓名王青华专业、班11网络工程实验地点1#316指导教师林仙丽实验时间一、实验目的及要求1. 通过实验理解单链表的逻辑结构;2. 通过实验掌握单链表的基本操作和具体的函数实现。二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。三、实验内容与步骤1.链式表表示和实现线性表的如下:#includestdio.h#includestring.h#includestdlib.h#includectype

2、.htypedef struct node /定义结点 char data10; /结点的数据域为字符串 struct node *next; /结点的指针域 ListNode;typedef ListNode * LinkList; / 自定义LinkList单链表类型LinkList CreatListR1(); /函数,用尾插入法建立带头结点的单链表ListNode *LocateNode(LinkList head, char *key); /函数,按值查找结点void DeleteList(LinkList head,char *key); /函数,删除指定值的结点void prin

3、tlist(LinkList head); /函数,打印链表中的所有值void DeleteAll(LinkList head); /函数,删除所有结点,释放内存/=主函数=void main() char *ch,*num; num=new char; ch=new char10; LinkList head; head=CreatListR1(); /用尾插入法建立单链表,返回头指针 printlist(head); /遍历链表输出其值 printf( Delete node (y/n):); /输入y或n去选择是否删除结点 scanf(%s,num); if(strcmp(num,y)=

4、0 | strcmp(num,Y)=0) printf(Please input Delete_data:); scanf(%s,ch); /输入要删除的字符串 DeleteList(head,ch); printlist(head); DeleteAll(head); /删除所有结点,释放内存/=用尾插入法建立带头结点的单链表= LinkList CreatListR1(void) char *ch; ch=new char10; LinkList head=(LinkList)malloc(sizeof(ListNode); /生成头结点 ListNode *s,*r,*pp; r=hea

5、d; r-next=NULL; printf(Input # to end ); /输入#代表输入结束 printf(Please input Node_data:); scanf(%s,ch); /输入各结点的字符串 while(strcmp(ch,#)!=0) s=(ListNode *)malloc(sizeof(ListNode); strcpy(s-data,ch); r-next=s; r=s; r-next=NULL; printf(Input # to end ); printf(Please input Node_data:); scanf(%s,ch); return he

6、ad; /返回头指针/=按值查找结点,找到则返回该结点的位置,否则返回NULL=ListNode *LocateNode(LinkList head, char *key) ListNode *p=head-next; /从开始结点比较 while(strcmp(p-data,key)!=0 & p) /直到p为NULL或p- data为key止 p=p-next; /扫描下一个结点 return p; /若p=NULL则查找失败,否则p指向找到的值为key的结点/=删除带头结点的单链表中的指定结点=void DeleteList(LinkList head,char *key) ListNo

7、de *p,*r,*q=head; p=LocateNode(head,key); /按key值查找结点的 if(p=NULL ) /若没有找到结点,退出 printf(position error); exit(0); while(q-next!=p) /p为要删除的结点,q为p的前结点 q=q-next; r=q-next; q-next=r-next; free(r); /释放结点/=打印链表=void printlist(LinkList head) ListNode *p=head-next; /从开始结点打印 while(p) printf(%s, ,p-data); p=p-ne

8、xt; printf(n);/=删除所有结点,释放空间=void DeleteAll(LinkList head) ListNode *p=head,*r; while(p-next) r=p-next; free(p); p=r; free(p); 改写以上程序,实现功能如下:1.编写一个函数计算值域为x的结点个数。运行结果截图:2.编写一个删除链表中值为x的结点的直接前趋结点的算法,若有多个值为x的结点,则删除第一个x的直接前趋结点。运行结果截图:3.写一个对单循环链表进行逆序遍历(打印每个结点的值)的算法。运行结果截图:4改写CreatListR1函数,使得链表创建时为非降序排列,在上述

9、链表中插入一个元素,使得链表依然升序;运行结果截图:四、实验结果与数据处理详细记录程序在调试过程中出现的问题及解决方法。记录程序执行的结果(贴图)。五、分析与讨论对上机实践结果进行分析,上机的心得体会。六、教师评语签名:日期:成绩附源程序清单:1. #include stdio.h#include stdlib.htypedef struct ListNode int data; struct ListNode *next;ListNode,*LinkList; void InsertListNum(LinkList H) ListNode *p,*q; int i; char ch = NU

10、LL; p = H; while(ch != n) q =(LinkList)malloc(sizeof(ListNode); scanf(%d,&i); q-data = i; q-next = p-next; p-next = q; q = q-next; ch = getchar(); int CountListSameNum(LinkList H,int x) ListNode *p; int count=0; p = H-next; while(p) if(p-data = x) count+; p = p-next; return count;void PrintList(Link

11、List H) ListNode *p; p = H-next; while(p) printf(%d ,p-data); p=p-next; printf(n); main() int n,x; LinkList H; H =(LinkList *)malloc(sizeof(ListNode); InsertListNum(H); PrintList(H); printf(Enter the Number you count:n); scanf(%d,&x); n = CountListSameNum(H,x); printf(n=%d ,n);2.#include stdio.h#inc

12、lude stdlib.htypedef struct ListNode int data; struct ListNode *next;ListNode,*LinkList; void InsertListNum(LinkList H) ListNode *p,*q; int i; char ch; p = H; printf(Enter the numbers:n); while(ch != n) q =(LinkList)malloc(sizeof(ListNode); scanf(%d,&i); q-data = i; q-next = p-next; p-next = q; q =

13、q-next; ch = getchar(); int CountListSameNum(LinkList H,int x) ListNode *p; int count=0; p = H-next; while(p) if(p-data = x) count+; p = p-next; return count;void DeleteListNum(LinkList H,int x) ListNode *p,*r; int n; p = H; n = CountListSameNum(H,x); if(n=0) printf(No founding!); else while(p) if(p

14、-data = x) r=p-next; p-next=r-next; free(r); break;/若将break去点,则可以删除所有的值为x的前驱结点 p = p-next; while(p-next = NULL) printf(nThis NO.1,No Head!n); break; void PrintList(LinkList H) ListNode *p; p = H-next; while(p) printf(%d ,p-data); p=p-next; printf(n); main() int n,x1,x2; LinkList H;H =(LinkList *)mal

15、loc(sizeof(ListNode); InsertListNum(H); PrintList(H); printf(Enter the Number you count:n); scanf(%d,&x1); n = CountListSameNum(H,x1); printf(n=%d ,n); printf(n); printf(Enter the number you delete:n); scanf(%d,&x2); DeleteListNum(H,x2); PrintList(H);3.#include stdio.h#include stdlib.htypedef struct

16、 ListNode int data; struct ListNode *next;ListNode,*LinkList; void InsertListNum(LinkList H) ListNode *p,*q; int i=0; char ch = NULL; p = H; printf(Enter the numbers:n); while(ch != n) q =(LinkList *)malloc(sizeof(ListNode); scanf(%d,&i); q-data = i; q-next = p-next; p-next = q; p = p-next; ch = get

17、char(); void SortListNum(LinkList H) ListNode *p,*q; p = H-next; H-next = NULL; while(p) q = p; p = p-next; q-next = H-next; H-next = q; void PrintList(LinkList H) ListNode *p; p = H; printf(The new Linklist is:n); p = p-next; while(p) printf(%d ,p-data); p=p-next; printf(n);main() LinkList H; H =(L

18、inkList *)malloc(sizeof(ListNode); InsertListNum(H); PrintList(H); SortListNum(H); PrintList(H);4.#include stdio.h#include stdlib.htypedef struct ListNode int data; struct ListNode *next;ListNode,*LinkList; void InsertListNum(LinkList H) ListNode *p,*q; int i; char ch; p = H; printf(Enter the number

19、s:n); while(ch != n) q =(LinkList)malloc(sizeof(ListNode); scanf(%d,&i); q-data = i; q-next = p-next; p-next = q; q = q-next; ch = getchar(); void PrintList(LinkList H) ListNode *p; p = H-next; while(p) printf(%d ,p-data); p=p-next; printf(n); int CountAllListNum(LinkList H) ListNode *p; int i = 0;

20、p = H-next; while(p) p = p-next; i+; return i;void SortListNum(LinkList H) ListNode *p,*s,*pt; p = H; s = p-next; while(p-next != NULL) while(s-next != NULL) if(p-next-data s-next-data) pt = p-next; p-next = s-next; s-next = p-next-next; p-next-next = pt; else s = s-next; p = p-next; s = p-next; voi

21、d InsertANum(LinkList H,int x) ListNode *p,*q; p = (ListNode *)malloc(sizeof(ListNode); p-data = x; p-next = NULL; q = H; while(q-next !=NULL) if(q-next-data = x) p-next = q-next; q-next = p; break; q = q-next; while(q-next = NULL) q-next = p; main() int m,n; LinkList H; H =(LinkList)malloc(sizeof(ListNode); InsertListNum(H); PrintList(H); n = CountAllListNum(H); printf(%dn,n); SortListNum(H); PrintList(H); printf(Enter the num :n); scanf(%d,&m); InsertANum(H,m); PrintList(H);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1