选猴王 数据结构课程设计.docx
- 文档编号:5946136
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:8
- 大小:72.40KB
选猴王 数据结构课程设计.docx
《选猴王 数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《选猴王 数据结构课程设计.docx(8页珍藏版)》请在冰豆网上搜索。
选猴王数据结构课程设计
计科专业数据结构A课程设计
选猴王
作者姓名:
王显衡
专业、班级:
计科123
学号:
12422003
指导教师:
赵晶
完成日期:
2013年11月17日
大连大学
DalianUniversity
目录
题目描述1
1、算法思想2
2、详细设计2
4调试分析4
5用户使用说明5
6课程设计总结6
参考文献7
题目描述
任务:
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
输入数据:
输入m,nm,n为整数,n 输出形式: 中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能 1、算法思想 将表中最后一个结点的指针域指向头结点,整个链表形成一个环,构造循环链表‘*L’。 由此,从表中任意一个结点开始,都可以遍历全表。 再用一个for循环来实现从第1开始数,第数到第N个,该猴子就要离开此圈。 如果链表不空的话,用’a’指向开始结点,往后数到第N个结点,就把第N-1个结点与第N+1个结点链在一起,即实现了删除第N个结点。 如此反复,直到L的后继结点是它自己,即圈中只剩最后一只猴子,那么这只猴子就是大王。 2、详细设计 1)、猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的: typedefstructMnode {intdata; structMnode*next; }Mnode; 根据题目要求,要让这M只猴子顺序围坐一圈,那就得用循环链表,只须将单循环链表的尾指针的NEXT域指向头指针。 它的判空条件是L=L->next=NULL; (非空表)(空表) 单循环链表 2)、函数voidhzxdw(M,N)读取数据M、N后,然后就根据N的值,用for循环数猴子结点用’a’指向开始结点,往后数到第N个结点,就把第N-1个结点与第N+1个结点链在一起,即实现了删除第N个结点。 如此反复,直到L的后继结点是它自己,即圈中只剩最后一只猴王。 其源代码如下: voidhzxdw(intm,intn)//猴子选大王 { Mnode*q,*p,*L,*pre; inti; //s作为n的标志 for(i=0;i { if(i==0) { p=(Mnode*)malloc(sizeof(Mnode)); if(! p) { printf("存储空间分配失败! \n"); exit(0); } p->data=i+1; L=p; p->next=L; } else { q=(Mnode*)malloc(sizeof(Mnode)); q->data=i+1; q->next=L; p->next=q; p=q; } } p=L;//从第一个猴子开始报数 while(p! =p->next)//当p=p->next时表明猴子大王已选出 { for(i=1;i<=n;i++) { if(i==n) { q=p; pre->next=p->next; p=p->next; free(q); } else { pre=p; p=p->next; } } } printf("选出的猴王是%d号猴子\n",p->data); } 本算法只用了两个简单的for循环,所以时间复杂度为O(N+MN-M)。 其中难点是如何实现数到第N就删除它。 4调试分析 程序运行截图如下: 5用户使用说明 用户根据提示输入两个整数,分别代表猴子M总数和报数N。 6课程设计总结 要提高自己的编程能力,你必须亲自去体验、去设计、编辑、编译、调试、运行。 在此之前,我也以为自己对C语言已经比较懂了,可还是遇到了一系列问题,也学到很多东西。 每一个人都是在失败、尝试、失败、尝试与收获中成长起来的。 我本学识尚浅,无权谈论这些,只是希望能对大家有所警醒,编程之道漫漫无边,吾将上下而求索.当你看着自己把功能一个个实现,把错误一个调试出来,那种感觉给了自己某种安慰,还有自信! 让自己对语言有了更深一层的了解! 参考文献 [1]严蔚敏,吴伟民.数据结构(C语言版)。 清华大学出版社,1997.4 附录一***程序代码 #include #include typedefstructMnode { intdata; structMnode*next; }Mnode; voidhzxdw(intm,intn)//猴子选大王 { Mnode*q,*p,*L,*pre; inti; //s作为n的标志 for(i=0;i { if(i==0) { p=(Mnode*)malloc(sizeof(Mnode)); if(! p) { printf("存储空间分配失败! \n"); exit(0); } p->data=i+1; L=p; p->next=L; } else { q=(Mnode*)malloc(sizeof(Mnode)); q->data=i+1; q->next=L; p->next=q; p=q; } }//为猴子编号 p=L; while(p! =p->next)//当p=p->next时表明猴子大王已选到 { for(i=1;i<=n;i++) { if(i==n) { q=p; pre->next=p->next; p=p->next; free(q);//q->data号猴子出列 } else { pre=p; p=p->next; } } } printf("选出的猴王是%d号猴子\n",p->data); } intmain() { intm,n; printf("请输入猴子总数m和规定猴子报数n的值(当n或m等于0时程序结束): \n"); while(scanf("%d%d",&m,&n)&&m&&n) { hzxdw(m,n); printf("请输入猴子总数m和规定猴子报数n的值(当n或m等于0时程序结束): \n"); } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 选猴王 数据结构课程设计 猴王 数据结构 课程设计