《数据结构实验报告(约瑟夫环)》由会员分享,可在线阅读,更多相关《数据结构实验报告(约瑟夫环)(5页珍藏版)》请在金锄头文库上搜索。
1、 基础成绩:82分数据结构课程实验实 验 报 告题目: Joseph问题求解算法的设计与实现 专业: 网络工程 班级: 网络102 姓名: 张晨曦 学号: 102534 完成日期: 2012/6/20 一、试验内容约瑟夫(Joseph)问题的一种描述是:编号为1,2,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。二、试验目的掌握链表的基本操
2、作:插入、删除、查找等运算,能够灵活应用链表这种数据结构。3、 流程图输入总人数n创建并初始化n个结点输入第一个报的数keyn=0结束输出出列者的编号及密码报数过程n-四、源程序代码#include#includestruct list int num,code; struct list *next; ; void main() printf(Joseph问题求解算法的设计与实现n n);int i,j,m=1;int key; / 密码.int n; /人数 .list *p,*s,*head;head=(list *)malloc(sizeof(list); /为头结点分配空间.p=hea
3、d; /使指针指向头节点printf(输入人的总个数:); scanf(%d,&n); for(i=1;inext=p; p-num=i; p-code=key; p-next=head-next; p=head; head=head-next; free(p); /释放头结点.p=head; printf(nn输入初始值:n); scanf(%d,&key);printf(n出列顺序为:n); do j=1; p=head;while(jnext;/使P指向下一结点 j+; /报数过程.i=p-num; key=p-code; printf(%dn,i); s-next=p-next; head=p-next; /重新定义head,下次循环的开始结点.free(p);/ 释放已出列的结点. n-; /人数减一.while(n0);int x;printf(“输入0退出:”);scanf(“%d”,&x);for(;)if(x=o)break;五、调试过程调试过程中,曾出现过缺少分号、括号之类的错误,还出现过运算顺序颠倒,致使运算出现了错误,在经过仔细的检查并且向人请教,终于得出了正确结果.六、结果分析输入人数:7 输入密码:3 1 7 2 4 8 4 初值:6排序结果:6 1 4 7 2 3 5