#include<stdio.h>
#include<malloc.h>
typedef struct LNode//定义结构体
{
int num,pwd;
struct LNode*next;
};
struct LNode*head,*p,*pt;//定义结点
int creatLinkList(int n)
{
int i;
head=(struct LNode*)malloc(sizeof(struct LNode));//创建一个带头结点的链表
if(!head)
{return 0;}
p=head;
for(i=1;i<n;i++)
{
pt=(struct LNode*)malloc(sizeof(struct LNode));
if(!pt)
{return 0;}
p->next=pt;
p=pt;
}
p->next=head;//构成循环链表
pt=head;
return 0;
}
int enterPwd(int n)
{
int i,j;
printf("\n请输入密码:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&j);
pt->num=i;
pt->pwd=j;
pt=pt->next;
}
pt=p;
return j;
}
int outList(int m,int n)
{
int i,a;
for(i=1;i<=n;i++)//用for循环搜索循环链表
{
for(a=1;a<m;a++)//删除结点
{
pt=pt->next;
}
p=pt->next;
m=p->pwd;
printf("%d ",p->num);
pt->next=p->next;
free(p);
}
return 0;
}
void main()
{
int m,n;
printf("\n参数m、n传递报数上限值和人数:\n");
printf("\n请输入m和n:\n");
scanf("%d %d",&m,&n);
creatLinkList(n);
enterPwd(n);
printf("\n出队的人依次是:\n");
outList(m,n);
}
约瑟夫环
最新推荐文章于 2021-03-22 23:21:31 发布