队列

来源:互联网 发布:在线直播电视软件 编辑:程序博客网 时间:2024/06/03 18:40

Code Example:

#include "stdio.h"#include "stdlib.h"/** * 此队列右边入队,左边出队。 * 队列空条件:queue->front == queue->rear * 队列满的条件:(queue->front + 1)%QUEUE_SIZE == queue->rear * (为了保证队空队满条件,少用一个存储空间) */#define QUEUE_SIZE 10typedef 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队列为空,不能出队
0 0
原创粉丝点击