Queue 的定义和结构
队列(Queue) 是只允许在一端进行插入,在另一端进行删除的线性表
队列是一种先进先出(First In First Out)的线性表,简称 FIFO(First IN First OUT), 允许插入的一端称为队尾, 允许删除的一端称为队列头
队列的基本结构如下图所示:

Queue 的抽象数据类型
队列也有线性表的各种操作,不同的是插入元素只能在队列尾,删除元素只能在对列头进行:
队列的抽象结构如下所示:
ADT Queue(队列)
Data:
同线性表, 元素具有相同的类型,相邻的元素具有前驱和后继关系
Operation:
InitQueue(Q*)
DestroyQueue(Q*)
isEmpty(Q*)
isFull(Q*)
dequeue(Q*, *e)
enqueue(Q*, e)
queueSize(Q)
endADT
队列有多种实现方式,比如 静态数组,动态数组,单链表,双链表等
静态数组实现Queue
静态数组实现队列的基本原理:
- 建立一个
MAX_SIZE的数组, 用于存放 Queue 中的元素 - 建立int类型
queue->rear代表队列尾, 每次enqueue一个元素时,queu->rear指向最新的元素位置

- 建立
queue->front代表队列头, 每次dequeue一个元素,从queue->front位置处取出数据,并且最后其指向下一个元素位置

- 当
queue->rear和queue->front相等时,queue->front和queue->rear都重新设置为 0,此时队列为空,表示重新开始存储数据

参考代码如下:
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
// queue 尾端的索引
int rear;
}Queue;
void Queueinit(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
int isEmpty(Queue* queue) {
return (queue->front == -1 && queue->rear == -1);
};
int isFull(Queue* queue) {
// queue->rear == MAX_SIZE - 1 queue->front = 0
//return (queue->rear + 1)%MAX_SIZE == queue->front;
if((queue->rear + 1 - queue->front) == MAX_SIZE) {
return 1;
}
return 0;
};
void enqueue(Queue* queue,int item) {
if(isFull(queue)) {
fprintf(stderr,"queue is full. \n");
return;

最低0.47元/天 解锁文章
1286

被折叠的 条评论
为什么被折叠?



