队列即为只允许在一端进行插入数据队列,在另一端进行删除数据操作的特殊线性表。但也有一些例外,如优先级队列。
队列具有先进先出的特性,即最先进入队列的元素将被最先出队列
有时也需要把进入队列中的元素分优先级(比如线程调度),出队列时首先选择优先级最高的元素出队列,对于优先级相同的元素则按照先进先出的原则出队列
顺序队列很容易实现,主要是控制好头和尾,通常用循环的方式实现,避免溢出的问题。基本操作同栈类似,具体注意的点我就在代码中细说了
- 结构体声明
typedef struct TreeNode* SeqQueueType;
//head作为队首,tail作为队尾
//插入数据时,tail向后移,从队列里删除数据时,head往后移
//数据出队列时其实并没有真实的被删除,而是随着head的后移,之前的队首元素不在有效范围内了
//tail到了数组末尾时,检查一下head是否表示的是数组(不是队列)头部,如果不是的话说明数组的头部还可以插入数据
//作为队列的尾部。直到size等于数组的最大容量时,才说明队列已经满了
typedef struct SeqQueue{
SeqQueueType data[SeqQueueMaxSize];
size_t head;
size_t tail;
size_t size;
}SeqQueue;
- 基本操作函数声明
//初始化
void SeqQueueInit(SeqQueue* seq);
//入队列