数据结构--链式队列

一.链式队列的设计思想:

首先一定要理解设计的初衷,就是队头队尾的位置要满足怎么快怎么设计.那么分析如下:

最终我们敲定了入队,出队的时间复杂度都为O(1)的一种设计,也就是第四种设计;当然,头节点的数据域不使用,所以我们设计链式队列的头节点的时候删除数据域即可,链式队列的结构设计如下:

二.链式队列的结构设计

cpp 复制代码
typedef struct LPNode//数据节点
{	
       int data;//数据	
       struct LPNode* next;//后继指针
}LPNode;
typedef struct HNode //链式队列的头节点
{	
           struct LPNode* front;//队头指针,指向第一个数据节点	
           struct LPNode* rear;//队尾指针,指向最后一个数据节点
}HNode ,*PLQueue;

三.链式队列的实现

cpp 复制代码
//初始化

	if (IsEmpty(pq))
	{
		return false;
	}
	*rtval = pq->front->data;
	//删除第一个节点
	LPNode* p = pq->front;
	pq->front = p->next;
	free(p);
	if (pq->front == NULL)//删除最后一个节点
	{
		pq->rear = NULL;
	}

	return true;
}



//获取队头元素的值但不删除
bool GetTop(PLQueue pq, int* rtval)
{
	assert(pq != NULL);
	if (pq == NULL)
		return false;
	if (IsEmpty(pq))
	{
		return false;
	}
	*rtval = pq->front->data;
	return true;
}

//获取长度
int GetLength(PLQueue pq)
{
	assert(pq != NULL);
	if (pq == NULL)
		return -1;
	int count = 0;
	for (LPNode* p = pq->front; p != NULL; p = p->next)
	{
		count++;
	}
	return count;

}

//判空
bool IsEmpty(PLQueue pq)
{
	assert(pq != NULL);
	if (pq == NULL)
		return false;

	return pq->front == NULL;
}

//销毁
void Destroy(PLQueue pq)
{
	assert(pq != NULL);
	if (pq == NULL)
		return;
	LPNode* p;
	while (pq->front != NULL)//总是删除第一个数据节点
	{
		p = pq->front;
		pq->front = p->next;
		free(p);
	}
	pq->rear = NULL;
}

四.链式队列的总结

1.带头节点,队头为第一个数据节点,队尾在最后一个数据节点

2.头节点为一个队头指针,一个队尾指针,增加队尾指针可以让入队的时间复杂度为O(1)

相关推荐
历程里程碑38 分钟前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
派大鑫wink2 小时前
【Day61】Redis 深入:吃透数据结构、持久化(RDB/AOF)与缓存策略
数据结构·redis·缓存
独处东汉3 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法
m0_748229993 小时前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
放荡不羁的野指针3 小时前
leetcode150题-滑动窗口
数据结构·算法·leetcode
BHXDML3 小时前
数据结构:(一)从内存底层逻辑理解线性表
数据结构
小龙报3 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
EmbedLinX3 小时前
Linux之内存管理
linux·服务器·c语言·c++
Anastasiozzzz4 小时前
LeetCode Hot100 215. 数组中的第K个最大元素
数据结构·算法·leetcode
定偶4 小时前
mysql
c语言·数据库·mysql