队列#

../../_images/2023-09-23-22-01-10.png

队列#

代码#

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

#define ElementType int //存储数据元素的类型
#define MAXSIZE 6 //存储数据元素的最大个数
#define ERROR -99 //ElementType的特殊值,标志错误

typedef struct {
    ElementType data[MAXSIZE];
    int front; //记录队列头元素位置
    int rear; //记录队列尾元素位置
    int size; //存储数据元素的个数
}Queue;

Queue* CreateQueue() {
    Queue* q = (Queue*)malloc(sizeof(Queue));
    if (!q) {
        printf("空间不足\n");
        return NULL;
    }
    q->front = -1;
    q->rear = -1;
    q->size = 0;
    return q;
}

int IsFullQ(Queue* q) {
    return (q->size == MAXSIZE);
}

void AddQ(Queue* q, ElementType item) {
    if (IsFullQ(q)) {
        printf("队列已满\n");
        return;
    }
    q->rear++;
    q->rear %= MAXSIZE;
    q->size++;
    q->data[q->rear] = item;
}

int IsEmptyQ(Queue* q) {
    return (q->size == 0);
}

ElementType DeleteQ(Queue* q) {
    if (IsEmptyQ(q)) {
        printf("空队列\n");
        return ERROR;
    }
    q->front++;
    q->front %= MAXSIZE; //0 1 2 3 4 5
    q->size--;
    return q->data[q->front];
}

void PrintQueue(Queue* q) {
    if (IsEmptyQ(q)) {
        printf("空队列\n");
        return;
    }
    printf("打印队列数据元素:\n");
    int index = q->front;
    int i;
    for (i = 0; i < q->size; i++) {
        index++;
        index %= MAXSIZE;
        printf("%d ", q->data[index]);
    }
    printf("\n");
}

int main(int argc, const char * argv[]) {
    Queue* q = CreateQueue();

    AddQ(q, 0);
    PrintQueue(q);
    AddQ(q, 1);
    PrintQueue(q);
    AddQ(q, 2);
    PrintQueue(q);
    AddQ(q, 3);
    PrintQueue(q);
    AddQ(q, 4);
    PrintQueue(q);
    AddQ(q, 5);
    PrintQueue(q);

    DeleteQ(q);
    PrintQueue(q);
    DeleteQ(q);
    PrintQueue(q);
    DeleteQ(q);
    PrintQueue(q);

    AddQ(q, 6);
    PrintQueue(q);
    AddQ(q, 7);
    PrintQueue(q);
    AddQ(q, 8);
    PrintQueue(q);

    return 0;
}

结果#

打印队列数据元素:
0
打印队列数据元素:
0 1
打印队列数据元素:
0 1 2
打印队列数据元素:
0 1 2 3
打印队列数据元素:
0 1 2 3 4
打印队列数据元素:
0 1 2 3 4 5
打印队列数据元素:
1 2 3 4 5
打印队列数据元素:
2 3 4 5
打印队列数据元素:
3 4 5
打印队列数据元素:
3 4 5 6
打印队列数据元素:
3 4 5 6 7
打印队列数据元素:
3 4 5 6 7 8