//舍弃front所指的空间
//入队:rear=(rear+1)%size; (rear循环后移)
Q【rear】== 入队元素;
队满不可入队:(rear+1)%size==front;
//出队:front=(front+1)%size;
出队元素:Q【front】;
队空不可出队:front == rear
//实现约瑟夫环
1.0
#include<stdio.h>
#include<stdlib.h>
void In(int *a,int n)
{
for(int i=1;i<=n;i++){//输入数据
a[i]=i;
}
}
void JosphusRing(int *a,int n,int s)
{
int rear,front,i;
rear=n;
front=0;
while(front!=rear){
for(i=0;i<s-1;i++){
front=(front+1)%(n+1);
rear=(rear+1)%(n+1);
a[rear]=a[front];
}
front=(front+1)%(n+1);
printf("%4d",a[front]);
}
}
int main()
{
int *a;
int n,s;
printf("请输入队列长度n&&孩子数s:");
scanf("%d %d",&n,&s);
a=(int *)malloc((n+1)*sizeof(int)); //循环队列front所指空间被浪费,因此多分配一个空间
In(a,n);//输入函数
JosphusRing(a,n,s);//实现约瑟夫环 并输出
return 0;
}
2.0
#include<stdio.h>
#include<stdlib.h>
void In(int *a,int n)
{
for(int i=1;i<=n;i++){//输入数据
a[i]=i;
}
}
void JosphusRing(int *a,int n,int s)
{
int rear,front,cnt=0;
rear=n;
front=0;
while(front!=rear){//队不空
front=(front+1)%(n+1);//出队
cnt=(cnt+1)%s;
if(cnt){
rear=(rear+1)%(n+1);//入队
a[rear]=a[front];
}
else{//输出
printf("%4d",a[front]);
}
}
}
int main()
{
int *a;
int n,s;
printf("请输入队列长度n&&孩子数s:");
scanf("%d %d",&n,&s);
a=(int *)malloc((n+1)*sizeof(int)); //循环队列front所指空间被浪费,因此多分配一个空间
In(a,n);//输入函数
JosphusRing(a,n,s);//实现约瑟夫环 并输出
return 0;
}