队列

Code Example:

#include "stdio.h"
#include "stdlib.h"

/**
 * 此队列右边入队,左边出队。
 * 队列空条件:queue->front == queue->rear
 * 队列满的条件:(queue->front + 1)%QUEUE_SIZE == queue->rear
 * (为了保证队空队满条件,少用一个存储空间)
 */
#define QUEUE_SIZE 10
typedef int ElementType;

typedef struct Queue {
    ElementType items[QUEUE_SIZE];
    int front, rear;
} Queue;


void init_queue(Queue *queue) {
    /**
     * 初始化队列:队列头指针和尾指针都指向0
     */
    if (queue != NULL) {
        queue->front = queue->rear = 0;
    }
}


int enqueue(Queue *queue, ElementType item) {
    /**
     * 入队:如果队列没满,入队
     */
    if ((queue->front + 1) % QUEUE_SIZE != queue->rear) {  // 队列未满
        queue->items[queue->front] = item;
        queue->front = (queue->front + 1) % QUEUE_SIZE;
        return 1;
    }
    printf("\n队列已满,数据'%c'并未入队", item);
    return 0;
}


ElementType dequeue(Queue *queue) {
    /**
     * 出队:如果队列不为空,出队
     */
    ElementType item = NULL;
    if (queue->front != queue->rear) {  // 队列不空
        item = queue->items[queue->rear];
        queue->rear = (queue->rear + 1) % QUEUE_SIZE;
    } else {
        printf("\n队列为空,不能出队");
    }
    return item;
}

void main() {
    // 定义队列
    Queue *queue = malloc(sizeof(Queue));
    // 初始化队列
    init_queue(queue);
    // 入队
    enqueue(queue, 'a');
    enqueue(queue, 'b');
    enqueue(queue, 'c');
    enqueue(queue, 'd');
    enqueue(queue, 'e');
    enqueue(queue, 'f');
    enqueue(queue, 'g');
    enqueue(queue, 'h');
    enqueue(queue, 'i');
    enqueue(queue, 'j');  // 此时队满
    // 出队
    printf("\n出队结果:");
    for (int i = 0; i < 10; i++) {
        int item = dequeue(queue);
        if (item != NULL) {
            printf(" %c", item);
        }
    }
}

Output:

队列已满,数据'j'并未入队
出队结果: a b c d e f g h i
队列为空,不能出队
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值