队列
队列基本概念
队列的名字就很直白,排队嘛!先到先得,所以数据先进先出。队尾入数据,队头出数据。这和栈相反。
用数组实现队列时,对头出数据只能覆盖不方便。而链表的头删效率非常高,所以链表非常合适写队列。
队列的接口实现
//Queue.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int QDataType;
typedef struct QListNode
{
struct QListNode* _next;
QDataType _data;
}QNode;
typedef struct Queue
{
QNode* _head;
QNode* _tail;
}Queue;
void QueueInit(Queue* pq);
void QueueDestroy(Queue* pq);
void QueuePush(Queue* pq, QDataType x);
void QueuePop(Queue* pq);
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);
bool QueueEmpty(Queue* pq);
int QueueSize(Queue* pq);
void PrintQueue(Queue* pq);
队列的应用场景
- 排队,保持绝对公平性 排队抽号机
- 广度优先遍历 BFS