#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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录