小孩报数问题:循环队列实现与算法解析
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MaxSize 11
#define N 10
typedef char ElemType;
typedef struct // 顺序循环队列结点定义
{
ElemType *name[MaxSize]; //小孩姓名
int front,rear; //队首和队尾指针
} SqQueue;
void InitQueue(SqQueue *&q)
{
q = (SqQueue *)malloc(sizeof(SqQueue));
q->front = q->rear = 0;
}
void DestroyQueue(SqQueue *&q)
{
free(q);
}
bool QueueEmpty(SqQueue *q)
{
return q->front == q->rear;
}
bool enQueue(SqQueue *&q, ElemType *e)
{
if ((q->rear + 1) % MaxSize == q->front) // 队列已满
return false;
q->name[q->rear] = e;
q->rear = (q->rear + 1) % MaxSize;
return true;
}
boolean deQueue(SqQueue *&q, ElemType *&e)
{
if (q->front == q->rear) // 队列为空
return false;
e = q->name[q->front];
q->front = (q->front + 1) % MaxSize;
return true;
}
int main()
{
ElemType *e;
int n,i;
SqQueue *q;
InitQueue(q);
scanf('%d',&n);
while(1)
{
char *name=(char *)malloc(sizeof(char)*N);
scanf('%s',name);
if( (strcmp('-1',name)==0)||!enQueue(q,name))
break;
}
i=n-1;
while(!QueueEmpty(q))
{
deQueue(q,e);
if(i-->0)
enQueue(q,e);
else
{
printf('%s\n',e);
i=n-1;
free(e);
}
}
DestroyQueue(q);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/bq7o 著作权归作者所有。请勿转载和采集!