🐺
队列:🎄
满足先进先出
存储方式:🎍
链式存储
- 顺序存储
- InitQueue(&Q):初始化队列,构造一个空队列Q。
- QueueEmpty(Q):判队列空,若队列Q为空返回true,否则返回false。
- EnQueue(&Q, x):入队,若队列Q未满,将x加入,使之成为新的队尾。
- DeQueue(&Q, &x):出队,若队列Q非空,删除队头元素,并用x返回。
- GetHead(Q, &x):读队头元素,若队列Q非空,则将队头元素赋值给x
程序🎓
—使用数组实现队列—⛄️
- 队列结构体声明
typedef struct SEQQUEUE
{
void *data[MAXSIZE];
int size;
}SeqQueue;
- 初始化函数
#define MAXSIZE 1024
SeqQueue* Init_SeqQueue() {
SeqQueue *queue = new SeqQueue;
for (int i = 0; i < MAXSIZE; i++)
{
queue->data[i] = NULL;
}
queue->size = 0;
return queue;
};
- 入队
直接从队列的 size 大小插入就是队列
void Push_SeqQueue(SeqQueue* queue,void *data){
// 数组的头部作为队头
if(queue == NULL || queue->size > MAXSIZE) {
return;
}
if(data == NULL)
{
return;
}
queue->data[queue->size] = data;
queue->size ++ ;
}
- 返回队列头元素
队列的头元素实在 第0 个位置
void* Font_SeqQueue(SeqQueue* queue){
if(queue == NULL) {
return NULL;
}
return queue->data[0];
}
- 出队
排除掉第一个头元素,将 i+1 元素的位置放到 i 位置上面
void Pop_SeqQueue(SeqQueue* queue){
if(queue == NULL) {
return ;
}
if(queue->size == 0) {
return ;
}
for (int i = 0; i < queue->size -1; i++)
{
queue->data[i] = queue->data[i+1];
}
queue->size -=1;
}
- 返回队列尾元素
void* Back_SeqQueue(SeqQueue* queue){
if(queue == NULL) {
return NULL;
}
if(queue->size == 0) {
return NULL;
}
return queue->data[queue->size -1];
}
- 返回队列的大小
int Size_SeqQueue(SeqQueue* queue){
if(queue == NULL) {
return -1;
}
if(queue->size == 0) {
return -1;
}
return queue->size;
}
- 清空队列
void Clear_SeqQueue(SeqQueue* queue){
if(queue == NULL) {
return ;
}
if(queue->size == 0) {
return ;
}
queue->size = 0;
}
- 销毁队列
void Free_SeqQueue(SeqQueue* queue){
if(queue == NULL) {
return ;
}
if(queue->size == 0) {
return ;
}
free(queue);
}
🌸🌸🌸完结撒花🌸🌸🌸
🌈🌈@FEA🌈🌈