队列
来源:互联网 发布:在线直播电视软件 编辑:程序博客网 时间: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