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
队列为空,不能出队