队列做为最常用的数据结构之队列
一,定义
是限定在一段进行删除,在另一端进行删除的是线性表,循序删除的一头成为队头,另一插入的称为队尾
特性:先进先出(FIFO)
二,链队列
队列的链式存储结构,实质上是带头结点的线性链表,拥有两个指针队头指针指向头结点,队尾指针指向尾结点
初始状态(队空状态):Q.front=Q.rear即头结点指向尾结点
1.//队列类型的定义
typedef struct QNode{ //元素结点
QElemType data;
struct QNode *next;
}QNode, * QueuePtr;
typedef struct{ //特殊结点
QueuePtr front; //头指针
QueuePtr rear // 尾指针
}LinkQueue;
LinkQueue Q;
Q.front //指向头结点
Q.rear //指向尾结点
2.队列的基本操作实现
(一)初始化
(二)销毁队列
(三)入队
(四)出队
(五)判断队空
(六)取队头元素
三,循环队列
即队列的顺序存储
(一)顺序队列
用一组连续的存储单元依次存储从队头到队尾的元素
(二)设两个指针
头指针 Q.front 指向队列头元素
尾指针 Q.rear 指向队列尾元素
(三)初始状态(空队列)
Q.front=Q.rear=0
队列的真满和假满,也就是在顺序队列中会出现假满现象,为解决这一问题,我们使用循环队列,这也是从侧面的说明循环队列是顺序队列
循环队列中我们需要牢记的操作也是重点的有
(Q.rear+1)%max
//堆满状态
(Q.rear+1)%MAX=Q.front
//队空状态
Q.front=Q.rear
//入队
(Q.rear+1)%MAX
//出队
(Q.front+1)%MAX
//最多元素
MAX-1
//当前队列存储的实际元素
(Q.rear-Q.front+MAX)%MAX