数据结构c语言约瑟夫环实现

#include
#include
struct Lnode //定义链表
{
int number;
int password;
struct Lnode *next;
}Lnode,*p,*q,*head;

int main( )
{
int n; //n个人
int m; //初始报数上限值
void Greate(int n);//创建循环链表
void DelList(int m,int n);//删除报m的节点
printf("输入游戏人数 n:");
scanf("%d",&n);
Greate( n);//调用函数创建循环链表
printf("报数上限值m:");
scanf("%d",&m);
DelList( m,n);//调用函数实现约瑟夫环
}

void Greate(int n)//创建循环链表
{
int i;
for(i=1;i<=n;i++) //建立单链表
{
if(i==1)
{
head=p=(struct Lnode*)malloc(sizeof(struct Lnode));//头节点
}
else
{q=(struct Lnode*)malloc(sizeof(struct Lnode));//申请新节点
p->next=q;
p=q;
}
printf("输入每个人所持有的密码值%d ",i);
scanf("%d",&(p->password));//输入每个人所持有的密码值
p->number=i;
}
p->next=head; //形成循环链表

}
void DelList(int m,int n)//删除报m的节点并实现约瑟夫环
{
int i,j;
p=head;
printf("出列顺序为:\n");
for (j=1;j<=n;j++)
{
for(i=1;inext);
m=p->password;
printf("%d ",p->number);//输出结果
p->number=p->next->number; //删除报m的节点
p->password=p->next->password;
q=p->next;
p->next=p->next->next;
free(q);//释放q
}

}

相关文档
最新文档