知识点:
1.链式队列的队头在链头(左边),队尾在链尾(右边)
2.入队和出队的时间复杂度都为O(1)
3.数据结构HNode保存的是队头指针(front)和队尾指针(rear),每个指针指向一个节点,所以又定义了一个结构体LPNode,每个结构体有一个数据域,一个指针(next)域,next域保存下一个节点的地址
4.双端队列:双端队列是限定插入和删除操作在表的两端进行的线性表
输出受限的双端序列:一个端点允许插入和删除,另一个端点只允许插入的双端序列
输入受限的双端序列:一个端点允许插入和删除,另一个端点只允许删除的双端序列
结构体
typedef struct LPNode
{
int data;
struct LPNode * next;
} LPNode;
typedef struct HNode
{
struct LPNode * front;
struct LPNode * rear;
} HNode, * PLQueue;
1.初始化
void InitQueue ( PLQueue pq)
{
assert ( pq != NULL ) ;
if ( pq == NULL )
return ;
pq-> front = NULL ;
pq-> rear = NULL ;
}
初始化测试
HNode p;
InitQueue ( & p) ;
2.往链式队列中插入数据(在队尾(链式队列左边是队头右边是队尾)操作) 入队
bool Push ( PLQueue pq, int val)
{
assert ( pq != NULL ) ;
if ( pq == NULL )
return false ;
LPNode * p = ( LPNode * ) malloc ( sizeof ( LPNode) ) ;
assert ( p != NULL