Circular queue | LSABLOG

首页 » Program » C/C++ » 正文

Circular queue

将顺序队列想象成一个环,约定以队列头指针在队列尾指针的下一位置上作为队列满的状态,需要空出一个位置给头指针。

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int queue[10];
    int front;
    int rear;
} qqtype;

//初始化
void init(qqtype *q)
{
    q->front = 0;
    q->rear = 0;
}

int enterline(qqtype *q,int x)
{
    if ((q->rear + 1) % 10==q->front)  //如果尾指针移到了头指针前一个位置,队列就满了(1~9共9个元素,空了个位置),rear最大为9
        return 0;

    else
        {
            q->rear = (q->rear + 1) % 10;
            q->queue[q->rear] = x; //下标从1开始了!
            return 1;
        }
}

int main()
{
    int ch,sign;
    qqtype *q;
    q = (qqtype *)malloc(sizeof(qqtype));
    init(q);
    printf("creat C success\n");
    printf("please input the data\n");
    scanf("%d",&ch);
    while (ch!=-1)
        {
            if ((sign = enterline(q,ch))!=1)
                break;
            scanf("%d",&ch);
        }
    printf("output the data\n");
    while (q->front!=q->rear)        //front为0
        {
            q->front = (q->front+1) % 10;
            printf("%d ",q->queue[q->front]);
        }
    printf("\n");
    return 1;
}


赞 (0)

Comment