C语言循环队列

六眼飞鱼酱① 提交于 2019-12-02 19:13:22
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//循环队列

typedef struct {
    int *data;//数据域
    int maxsize;//最大长度
    int rear, front;//队尾,队头
} CirQueue;

void InitCirQueue(CirQueue *q, int max) {//初始化
    q->maxsize = max;
    q->data = (int*)malloc(sizeof(int)*max);//动态分配内存空间
    q->rear = 0;
    q->front = 0;
}

int CirQueueisEmpty(CirQueue *q) {//判空
    if (q->front == q->rear)//队头==队尾
        return 0;
    else {
        return 1;
    }
}

int CirQueueisFull(CirQueue *q) {//判满
    if (q->front == (q->rear + 1) % (q->maxsize)) {//预留最后一个空间来做取余
        return 0;
    } else {
        return 1;
    }
}

void AddCirQueue(CirQueue *q, int x) {//添加
    q->data[q->rear] = x;
    q->rear = (q->rear + 1) % (q->maxsize);//超过最大长度添加则覆盖
}

int CirQueueDisplay(CirQueue *q) {// 显示
    int x;
    x = q->data[q->front];
    q->front = (q->front + 1) % (q->maxsize);//移动队头
    return x;
}
int CirQueueFront(CirQueue *q) {//取队头
    int  x = q->data[q->rear];
    return x;
}

int main() {
    CirQueue q;
    InitCirQueue(&q, 5);

    AddCirQueue(&q, 1);
    AddCirQueue(&q, 2);
    AddCirQueue(&q, 5);

    printf("%d ",CirQueueDisplay(&q));
    printf("%d ",CirQueueDisplay(&q));
    printf("%d ",CirQueueDisplay(&q));
    return 0;
}

让我们一起遨游编程的海洋。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!