36-链式队列(lqueue)的相关函数

本文介绍了链式队列的基本概念,包括队头在链头、队尾在链尾的设计,以及O(1)时间复杂度的入队和出队操作。详细阐述了数据结构HNode和LPNode,以及链式队列的初始化、入队、获取队头元素(可删除或不可删除)、判空、获取元素数量、清空和销毁等核心操作。同时,讨论了双端队列的不同类型及其应用场景。
摘要由CSDN通过智能技术生成

知识点:

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值