C语言:3.31

一、链表真题:2019年42题

解析:任何408真题但凡涉及链表的一定都会需要定义一个头节点,很容易被"初始时队列为空"这个条件迷惑,实际上只有一个头节点也是为空。

上面这个有关"头节点"的理解也没错,但这道题的关键在于:被视为"头节点"的那个节点是在变化的,而非静止不动的那一个头节点,可以类比"顺序表的循环队列"也需要一个空位来标志着队满。

事实上:将顺序表的直接类比过来就行了。

整体代码:

cpp 复制代码
//首先定义链表节点
typedef struct LinkNode
{
	int val;
	LinkNode* next;
}LinkNode;


//链表结构体
typedef struct
{
	LinkNode* front;
	LinkNode* rear;
}QueueList;

QueueList Q;


//初始化链表
void InitQ(QueueList &Q)
{
	LinkNode* q = new LinkNode();
	q->next = q;
	Q.front = Q.rear = q;
}

//入队
bool Push(QueueList &Q,int x)
{
	if (Q.rear->next == Q.front)
	{
		LinkNode* q = new LinkNode();
		Q.rear->val = x;
		Q.rear->next = q;
		Q.rear = q;
		q->next = Q.front;
	}
	Q.rear->val = x;
	Q.rear = Q.rear->next;
	return true;
}

//出队
bool Pop(QueueList &Q, int &x)
{
	if (Q.front == Q.rear) return false;
	x = Q.front->val;
	Q.front = Q.front->next;
}

二、13.4:树与二叉树原理解析

1、二叉树层次建树,必须用到"辅助队列"

三、01基础课:栈与队列

1、卡特兰数

2、共享栈

节省存储空间又降低了上溢的风险,解释如下:

不需要判断是否为头节点,因为不带头节点的链表栈顶会初始化为NULL;

结束!今天有点儿没睡好

相关推荐
孙启超14 小时前
【AI开发之Rust】第 1 课:认识 Rust 与开发环境 —— 装好工具链,跑通第一个程序
开发语言·人工智能·后端·ai·rust·安全架构
君顾114 小时前
家政派单小程序源码开发实战:从零搭建到上线全流程指南
java·开发语言·家政派单
番茄灭世神15 小时前
汇顶模拟前端GH3220使用备忘录
c语言·单片机·传感器·模拟芯片·电生理信号处理
我是唐青枫15 小时前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
开发语言·c#·.net
程序猿编码15 小时前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer
SEO_juper16 小时前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化
geovindu16 小时前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
Tairitsu_H16 小时前
[C++] C++11新增构造:列表初始化和std::initializer_list
开发语言·c++·c++11·构造
宣宣猪的小花园.16 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习
shmily麻瓜小菜鸡17 小时前
JS/TS 易踩坑知识点 — 自动分号插入(ASI)
开发语言·javascript·ecmascript