您的位置:首页 > 其它

单循环链表--约瑟夫环

2017-04-20 11:19 274 查看
#include <stdio.h>
#include <stdlib.h>
//单链表类型定义
typedef struct node
{	int	 data;
struct node	 *next;
}LNode, *LinkList;

//单链表的创建
LinkList Creat_LinkList(int n )
{
//代码
LinkList H,p,q;
H = (LinkList)malloc(sizeof(LNode));
H->next = NULL;
q=H;
for (int i=1; i<=n; i++){
p = (LinkList)malloc(sizeof(LNode));
p->data = i;
p->next = NULL;
q->next = p;
q = q->next;
}
q->next=H;
return q;
}

//链表输出
void Print_LinkList(LinkList H)
{
//代码
LinkList p;
p = H->next;
while (p != H){
printf("%d->",p->data);
p=p->next;
}
printf("\n");
}

//约瑟夫环
LinkList select(LinkList r,int m)
{
//代码
LinkList p,q;
int cnt=0;
//删除头,令r为头
r->next = r->next->next;
p=r;
while (p!=p->next)
{
cnt++;
q = p;
p=p->next;
if (cnt == m)
{
q->next = p->next;
cnt=0;
printf("%d号出局\n",p->data);
}
}
return p;
}
main()
{
LinkList r,p;
int num,m;

printf("请输入猴子总数:");
scanf("%d",&num);
r=Creat_LinkList(num );
printf("H表:\n");
Print_LinkList(r->next);

printf("请输入出局数字:");
scanf("%d",&m);

printf("猴子出列顺序:\n");
p=select(r,m);
printf("\n猴王是: %d\n",p->data);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: