**队列(Queue)**是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表
1.允许删除的一端称为队头(front)
2.允许插入的一端称为队尾(rear)
3.当队列中没有元素时称为空队列
#include<stdio.h>
#include<stdlib.h>
//10个小孩,每3个出来一个小孩,则小孩出队序号为 : 3 6 9 2 7 1 8 5 10 4
void Josephus_Ring(int *Q,int n,int s);
int main(void)
{
int *Q;
int n,s;
printf("请输入n,s\n");
scanf("%d%d",&n,&s);
Q=(int*)malloc((n+1)*sizeof(int));
Q[0]=n;
for(int i=1; i<n+1 ; i++)
Q[i]=i; //初始化队列,入队
Josephus_Ring(Q,n,s);
}
void Josephus_Ring(int *Q, int n , int s)
{
int front=0,rear=n;
int i;
while(front-rear) //队不为空
{
for(i=0;i<s-1;i++) //s=3,循环两次
{
front=(front+1)%n;
rear=(rear+1)%n;
Q[rear]=Q[front];
}
front=(front+1)%n;
printf("%5d",Q[front]);
}
return;
}