收藏 分销(赏)

数据结构实验一.doc

上传人:可**** 文档编号:755509 上传时间:2024-03-05 格式:DOC 页数:8 大小:59KB
下载 相关 举报
数据结构实验一.doc_第1页
第1页 / 共8页
数据结构实验一.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述
精品资料 数据结构实验报告 实验一 班级:06111504 学号:1120151570 姓名:刘庭欣 1.实验题目: 采用单向环表实现约瑟夫环。 请按以下要求编程实现: ① 从键盘输入整数m,通过create函数生成一个具有m个结点的单向环表。环表中的结点编号依次为1,2,……,m。 ② 从键盘输入整数s(1<=s<=m)和n,从环表的第s个结点开始计数为1,当计数到第n个结点时,输出该第n结点对应的编号,将该结点从环表中消除,从输出结点的下一个结点开始重新计数到n,这样,不断进行计数,不断进行输出,直到输出了这个环表的全部结点为止。 例如,m=10,s=3,n=4。则输出序列为:6,10,4,9,5,2,1,3,8,7。 2.源代码: #include<stdio.h> #include<malloc.h> typedef struct list { int num; struct list * next; }list,* plist; plist h,p,q; void Create(int n) { h=(plist)malloc(sizeof(list)); h->next=NULL; h->num=0; while(--n) { p=(plist)malloc(sizeof(list)); p->num=n; p->next=h->next; h->next=p; } while (p->next) p=p->next; p->next=h->next; } void Find(int m,int s) { p=h; while(p->num!=s) p=p->next; } void OutNum(int n) { while(p->next!=p) { for(int i=1;i<n-1;i++) p=p->next; q=p->next; printf("%-4d",p->next->num); p->next=q->next; p=p->next; free(q); } printf("%-4d\n",p->num); } int main() { int m,s,n; scanf("%d%d%d",&m,&s,&n); Create(m+1); Find(m,s); OutNum(n); } 3. 运行结果截屏: 4. 编写与调试过程中遇到的问题: 在编写的过程中,首先遇到的困难是如何把算法转化为一个c语言程序,对于链表的操作,自己已经搞忘的差不多了,编写的时候对于如何实现一个环形链表,自己刚开始时有些不知所措,后来在同学的指导下,有了思路。还有就是对于把算法转化为程序的步骤,自己还要加强。还有就是自己编写程序时,粗心大意,总是忘记加一些符号。比如第一次调试的时候,出现了这样的错误。 后来才发现,少加了一个大括号,以后这种情况要少出现。 1. 实验题目: 归并顺序表(选作)。 请按以下要求编程实现: ① 从键盘输入两个升序排列的整数序列linka和linkb,每个序列以输入0为结束标记。 ② 将链表linka和linkb归并为linkc,linkc仍然为升序排列。归并完成后,linka和linkb为空表。输出linkc。 ③ 对linkc进行处理,保持升序不变,删除其中重复的整数,对重复的整数只保留一个,输出删除重复整数后的链表。 例如:linka输入为:10 20 30 40 50 0 归并后的linkc为:10 15 20 20 25 30 30 35 40 40 45 50 50 删除重复后的linkc为:10 15 20 25 30 35 40 45 50 2. 源代码: #include <stdio.h> #include <malloc.h> typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; void Creat(LinkList &L); void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc); void Delete(LinkList &L); void Output(LinkList &L); int main() { LinkList La,Lb,Lc; Creat(La); Creat(Lb); MergeList(La,Lb,Lc); free(La); free(Lb); Delete(Lc); Output(Lc); } void Creat(LinkList &L) { LinkList p,q; int num; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; p=L; scanf("%d",&num); while(num!=0) { q=(LinkList)malloc(sizeof(LNode)); q->data=num; q->next=p->next; p->next=q; p=q; scanf("%d",&num); } } void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) { LinkList pa,pb,pc,p,q; pa=La->next; pb=Lb->next; Lc=(LinkList)malloc(sizeof(LNode)); Lc->next=NULL; pc=Lc; while(pa&&pb) { q=(LinkList)malloc(sizeof(LNode)); if(pa->data<=pb->data) { q->data=pa->data; pa=pa->next; } else { q->data=pb->data; pb=pb->next; } q->next=pc->next; pc->next=q; pc=pc->next; } while(pa) { p=(LinkList)malloc(sizeof(LNode)); p->data=pa->data; p->next=pc->next; pc->next=p; pa=pa->next; } while(pb) / { p=(LinkList)malloc(sizeof(LNode)); p->data=pb->data; p->next=pc->next; pc->next=p; pb=pb->next; } } void Delete(LinkList &L) { LinkList p,q,r; p=L->next; q=L->next->next; r=q; while(q!=NULL) { if(q->data==p->data) { q=q->next; p->next=r->next; free(r); r=q; } else { p=p->next; q=q->next; r=q; } } } void Output(LinkList &L) { LinkList p; p=L->next; while(p->next!=NULL) { printf("%d,",p->data); p=p->next; } printf("%d\n",p->data); } 3. 运行结果截屏: 4. 编写和调试遇到的问题: 对于链表合并的问题,书上本来有例子,但是在编写的过程中,却遇到了很多问题,比如对于算法步骤的不熟悉,不知道从哪里开始,其次没有想到最后还要删除原来的两个链表,所以导致结果一直没有正确。还有就是在创建链表的时候没有把数据加进去,结果编译通过了,但是输入数字,却没有反应。 可编辑修改
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服