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;

结束!今天有点儿没睡好

相关推荐
阿珊和她的猫3 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234176 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~6 小时前
C#---StopWatch类
开发语言·c#
lifallen7 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO9 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试9 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑10 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_0210 小时前
【Java基础面试题】Java基础概念
java·开发语言
Cx330❀11 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法