本实验最难的部分是循环链表的建立过程,其余的都只是很简单的部分,先不讲了,看代码应该会好理解的。
# include <stdio.h>
# include <malloc.h>
typedef struct node
{
int number;
struct node *next;
}Lnode,*Linklist;
Linklist InitRingLList(int n) //循环链表建立约瑟夫环
{
Lnode *R,*p,*q;
int i;
R = (Lnode *)malloc(sizeof(Lnode));
q = R;
for(i = 1;i < n;i ++)
{
p = (Lnode *)malloc(sizeof(Lnode));
q -> number = i;
q -> next = p;
q = p;
}
p -> number = n;
p -> next = R;
R = p; //形成循环链表
return R;
}
void Josephus(Linklist R,int n,int k)
{
int i,j;
Lnode *p,*q;
p = R;
for(i = 0;i < n;i ++)
{
for(j = 1;j <= k-1;j ++) //每次从"1"开始报数
p = p -> next;
q = p -> next;
p -> next = q -> next;
printf("%d ",q->number);
delete q;
}
printf("\n");
}
int main()
{
int n,k;
printf("输入约瑟夫环的人数:");
scanf("%d",&n);
printf("输入约定的编号:");
scanf("%d",&k);
Linklist R;
R = InitRingLList(n);
Josephus(R,n,k);
return 0;
}
最近的自己算是整理一下自己前面那段时间得学习吧 ,对于学计算机的人来说,如果想成为大牛大神,数据结构是很重要的,有技术的人是饿不死的。相信自己哈 ------Dash