C语言单向循环链表实现实现约瑟夫环C语言实现约瑟夫环问题------单向循环链表实现
问题描述:
有n个人围成一圈进行报数游戏,从第一个人开始报到m的人出圈,接下来有从下一个人开始,。。。。。。。一次这样往复,直到最后一个人也出圈,求他们的出圈顺序?(例如8个人,凡报3的人出圈,则他们出圈顺序是3 ,6, 1,,5 ,2 ,8,4 ,7)
#include
#include
typedef struct node{
int value;
struct node *next;
}NODE;
//*********************建立循...
C语言实现约瑟夫环问题------单向循环链
实现
问题描述:
有n个人围成一圈进行报数游戏,从第一个人开始报到m的人出圈,接下来有从下一个人开始,。。。。。。。一次这样往复,直到最后一个人也出圈,求他们的出圈顺序?(例如8个人,凡报3的人出圈,则他们出圈顺序是3 ,6, 1,,5 ,2 ,8,4 ,7)
#include
#include
typedef struct node{
int value;
struct node *next;
}NODE;
//*********************建立循环链表(尾插法建立)***********// NODE *createlink(int number)
{
NODE *head=NULL,*p=NULL,*q=NULL;
int i=1;
head=(struct node*)malloc(sizeof(struct node)); //***建立第一个节点***//
head->value=i;
p=head;
for(i=2;i<=number;i++) //***建立剩下的number-1节点****//
{
q=(struct node*)malloc(sizeof(struct node));
if(q==0) return 0;
p->next=q;
p=q;
p->value=i;
}
p->next=head;
return head;
}
//*****************建立约瑟夫环********************//
void jose(NODE *p,int number,int n)
{
NODE *q=NULL;
for(i=1;i<=number;i++)
{
for(j=1;jnext;
}
q=p->next; //***q用来记录要删除的节点*****//
p->next=q->next; //****删去q节点******//
p=p->next;
printf("第%3d个出圈号是:%3d\n",i,q->value);
free(q);
}
printf("\n");
// p->next=NULL; 此表达式不能出现在此处,最后一个节点删除后就不存在了
}
//***********************主函数*************************// int main( )
{
int number=0;
printf("请输入总人数number和出拳编号n:\n");
scanf("%d",&number);
scanf("%d",&n);
NODE *head=NULL;
head=createlink(number);
jose(head,number,n);
system("PAUSE");
return 1;
}
本文档为【C语言单向循环链表实现实现约瑟夫环】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。