总人数n=9,报数m=2.
2->4->6->8->1->5->9->7->3
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data
struct node *next
}node
typedef node* Linklist
//原代码void CreatLinklist( Linklist *L,int n)
Linklist CreatLinklist(Linklist *L,int n)
{
Linklist p,s
*L=(Linklist)malloc(sizeof(node))
(*L)->next=NULL
int i=1
p=*L //增加这个语句,让p指向当前结点
if(n!=0)
{
//原代码while(i<=41)
while(i<=n)
{
s=(Linklist)malloc(sizeof(node))
陆含s->data = i++
p->next = s
p=s
}
s->next=(*L)->next//将链表循环起来;
}
free(*L)//释放头结点;
return s->next//返回第一个结点的值;
}
int main()
{
int n=41 //9
int m=3 //2
int i
Linklist L
printf("总人数n=%d,报数m=%d.\n",n,m)
//原代码Linklist *p = CreatLinklist(Linklist *L,int 笑卖n)
Linklist p = CreatLinklist(&L,n)
Linklist temp
m%=n
while(p!=p->next)
{
for(i=1i<m-1i++)
{
p=p->next
}
printf("%d->",p->next->data)
temp=p->next
p->next=temp->next
早升笑 free(temp)
p=p->next
}
printf("%d",p->data)
return 0
}
约瑟夫环问题的源程序如下:#include "stdio.h"
#include "stdlib.h"
typedef struct node
{ int data
struct node *next
}JD
JD *xhlbjl(JD *front, JD *rear,int n)
{ /*建立循环队列*/
int i
front=(JD *)malloc(sizeof(JD))
front->data=n/*头指针指向n号*/
front->next=front
for (i=n-1i>0i--)
{ rear=(JD *)malloc(sizeof(JD))
rear->data=i
rear->next=front->next
front->next=rear
}
return(front)
}
JD *outqueue(JD *front, JD *rear,int m) /*出队列*/
{int i,s
for (i=0i<s-1i++)
front=front->next
return(front)
}
main()
{ JD *h,*p,*q,*s
int i,j,m,n
printf("请输入人数 ")
scanf("%d",&n)
h=xhlbjl( p,q,n)
p=h->next
printf("坐成一圈的人是: ")
for(i=1i<=ni++)
{ printf("%3d",p->data)
p=p->next
}
printf("\n请渗扰输举好入开始位置 ")
scanf("%d",&s)
printf("数几个出去 ")
scanf("%d",&m)
s=outqueue(p,q,m)
q=s
p=s->next
for(j=0j<nj++)
{ for (i=1i<mi++)
{ q=p
p=p->next
}
printf("\n出列丛答旦的人是第 %d 号",p->data)
q->next=p->next
free(p)
p=q->next
}
}
http://zhidao.baidu.com/question/14741820.html?si=1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)