该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define size 10
#define True 11
#define False 0
#define Ok 111
#define Error -111
#define OVERFLOW -1
typedef int Status;//状态类型
typedef int QElemType; //元素类型
typedef struct
{ QElemType *base; //动态存储空间首址
int front; //头下标,队头元素下标
int rear; //尾下标,队尾元素的下一个位置
int qsize; //队列占用的空间(以元素为单位)
}SqQueue;
//Josephus(SqQueue *Q,int n,int m,int i,int a[]);
Status InitQueue(SqQueue *Q);
Status EnQueue (SqQueue *Q, QElemType e);
Status DeQueue(SqQueue Q,QElemType *e);
Status InitQueue(SqQueue *Q)
{
Q->base=(QElemType*)malloc((size)*sizeof(QElemType));
if (!Q->base)
{
return False;
}
Q->front=0;
Q->rear=0;
printf("循环队列初始化完成!(元素个数为size)\n");
return True;
}
Status EnQueue(SqQueue *Q,QElemType e)
{
if ((Q->rear+1)%size==Q->front)//队列满
{
return False;
}
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%size;
printf("%d入队\n",e);
return True;
}
Status DeQueue(SqQueue *Q,QElemType *e)//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK
{
if(Q->front==Q->rear)
{
return Error;
}
*e=Q->base[Q->front];
Q->front=(Q->front+1)%size;
return Ok;
}
Status QueueEmpty(SqQueue *Q)//判断队列是否为空
{
if(Q->front==Q->rear)
{
return True;
}
else
{
return False;
}
}
Status GetHead(SqQueue *Q,QElemType *e)
{
if(Q->front==Q->rear)
{
return Error;
}
*e=Q->base[Q->front];
return Ok;
}
void Josephus(SqQueue *Q,int n,int m,int i,int a[])
{
QElemType e;
int j;
int k=0;
InitQueue(Q);
for(j=1;j<=n;j++)
{
EnQueue(Q,j);//生成队列
}
while(QueueEmpty(Q)!=True)
{
for(j=0;j
{
DeQueue(Q,&e);//i之前的元素出队
EnQueue(Q,e);//这些元素插入队尾
for(j=1;j
{
DeQueue(Q,&e);//数到m之前的元素出队
EnQueue(Q,e);//这些元素插入队尾
}
DeQueue(Q,&e);//删除Q的队头元素并赋给元素e
a[k++]=e;//将该元素存入数组中
}
}
}
int main()
{
SqQueue Queue;
int a[8];
int j;
Josephus(&Queue,8,4,1,a);
for(j=0;j<8;j++)
{
printf("%d\n",a[j]);
}
return 0;
}