对于链表的操作还真的是无从下手,高手能不能指点一下。。。。
Input codes:(5)5Input codes:(6)8
Input codes:(7)9 约瑟夫问题是一个十分有趣的小游戏,问题的描述如下:编号为1,2,3,......,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数),开始选一正整数m,从第一人开始,按顺时针方向自1开始顺序报数,报到m时此人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始从1报数,如此下去,直至全部人出列。我们的游戏就是看一下出列的次序。要求编者使用循环链表的方法将问题解决,下面给出程序的类型定义,其他代码编者自己完成。(运行后的输入和输出界面如下显示)
# include <stdio.h># include <malloc.h># include <conio.h>typedef struct node_type
{
int seq,code; //分别存放编号和密码struct node_type *next;
}link;
**运行时屏幕显示如下。输入队列中的人数Input number n:7
依次输入每一个人的手持密码
Input codes:(1)2
Input codes:(2)1
Input codes:(3)4
Input codes:(4)3
至此可以建立起一个循环链表
Input the first code m:3 输入一个正整数作为起始密码
输入完成以后,可得以下的结果:
the result is :3 7 5 6 2 4 1
提示:
1 可以用循环链表,设立一个头结点.这样便于判断链表为空.
2用合适的算法让指针P指向要出列(删去)的节点,
3删去P所指的结点,注意删除的结点是不是链尾,要分情况讨论
4 当队列不空,回到2,重新定位指针P的位置,注意删去节点的CORD值是下次定位的依据.