沈阳航空航天大学课程设计报告
原理图介绍
第三步: 第二次,1号出列 1 3 1 2 约瑟夫环原理演示图 3 4 5 6 7 7 2 4 8 4 第一步:给第一个人赋初始密码为:20则从它开始向下走20次,到6第四步:第三次,4号出列 最后排序后的密码序列: 第二部:第一次停下的位置,此时6号出列,并将他的值作为新的m值,即:新的m=8;从7好开始继续向下走8次,到18 6 3 1 2 4 4 7 1 2 7 3 4 5 图2.1 约瑟夫环原理演示图
4
沈阳航空航天大学课程设计报告
2.2.1 功能模块图
Case 1:一个简单的输出函数,用于说明约瑟夫环; void instruction() Case 2:建立的约瑟夫环,并输出已建立的约瑟夫环: createList(LNode **ppHead,int n) 输出该约瑟夫环的每个人的出列顺序: jose(LNode *ppHead,int Case 0:default : 输入0,退出 exit(0);
主函数调用函数; main() 菜单函数; void menu() 图2.2 约瑟夫环函数调用关系图
2.2.2 流程图分析
5
沈阳航空航天大学课程设计报告
1.
Main()函createList(); 创建储存玩家密码的循环单链表的方法 从主函数中获取玩家信息n 如果n>0 是 否 退出 创建循环单链表,储存各个玩家密码 创建链表完成返回主函数main() 图2.3 创建链表函数的数据流程图
2.
6
沈阳航空航天大学课程设计报告
Main()函jose();出队函数 出队处理的方法 从循环链表中按初始密码依次扫描,找出对应的玩家序列 输出其持有的密码i=ppHead->pwd; j=ppHead->num; 移动浮标指针 m_pwd=ppHead->pwd; 输出密码后,删除相应的结点,并释放所占的储存空间free(ppHead); ppHead=p->next; 图2.4出队函数的数据流程图
3. void instruction() {
printf(\\\n\
printf(\约瑟夫环:\\n\
printf(\ 编号为1,2,3,4?,n的n个人按顺时针方向围坐一圈,每人持有一个密\\n\
执行完后返回主函数
7
沈阳航空航天大学课程设计报告
printf(\码(正整数).一开始任选一个正整数作为报数的上限值m,从第一个人开始\\n\
printf(\按顺时针方向自1开始顺序报数,报到时停止.报m的人出列,将他的密码\\n\
printf(\作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,\\n\
printf(\直到所有人全部出列为止.编程打印出列顺序.\\n\
printf(\
return 0; }
4菜单模块 void menu(){
printf(\
约
瑟
夫
环
*****************************\\n\
printf(\
\\n\
printf(\
[1]约瑟夫环问题的阐述
\\n\
printf(\
[2]按要求求解约瑟夫环
\\n\
printf(\
[0]
退
出
\\n\
printf(\
欢
迎
使
用
!
****************************\\n\
}
8