☰
数据结构(续)
2026/10/10 11:55:42 网站建设 项目流程

第三章,链表和list

一,链表的概念

1.列表的定义

2.列表的定义

二,链表的模拟实现

1.单链表的模拟实现

动态申请链表节点和链表构建

动态申请节点

Node节点

将动态申请一个节点的这个动作封装成一个函数

打印链表的所有元素

printlist:打印链表

三,动态链表—list

在算法⽐赛中,⼀般不会使⽤ new 和 delete 去模拟实现⼀个链表。
⽽ STL ⾥⾯的 list 的底层就是动态实现的双向循环链表,增删会涉及 new 和 delete,效率不⾼,竞赛中⼀般不会使⽤,这⾥了解⼀下即可。

<1>push_front / push_back

1.push_front:头插;
2.push_back:尾插。

<2>pop_front / pop_back

1.pop_front:头删
2.pop_back:尾删

四,算法题

<1>排队顺序

<2>单向链表

第四章 栈的概念

1.栈的概念

栈是⼀种只允许在⼀端进(通常是尾端)⾏数据插⼊和删除操作的线性表。
也就是栈是一种访问受限的线性表。
• 进⾏数据插⼊或删除的⼀端称为栈顶,另⼀端称为栈底。不含元素的栈称为空栈。
•进栈就是往栈中放⼊元素,出栈就是将元素弹出栈顶。

2.栈的模拟实现

3.stack

<1>创建

与list和vector相似

stack<T> st; T 可以是任意类型的数据。

<2>size/empty
size:返回栈⾥实际元素的个数;
empty:返回栈是否为空。
时间复杂度:O(1)
<3>top
top:返回栈顶元素,但是不会删除栈顶元素。
时间复杂度:O(1)。
代码测试

第五章 队列和queue

1.队列的概念

相关术语:空队,入队,队头与队尾,出队

2.队列的模拟实现

<1>创建

•⼀个⾜够⼤的数组充当队列;
•⼀个变量 h标记队头元素的前⼀个位置;
•⼀个变量 t标记队尾元素的位置。
两个变量(h, t]是⼀种左开右闭的形式,这样设定纯属个⼈喜好,因为后续的代码写着⽐较舒
服。
当然,也可以h标记队头元素的位置。只要能控制住代码不出现bug,想怎么实现就怎么实现。

第七章 二叉数

三,二叉树的遍历

1.深度优先遍历

代码演示:

2.宽度优先遍历

四,算法题

1.新二叉数

2.二叉树的遍历

3.二叉数的深度

4.先序排列

5.美国血统

6.二叉树问题

第八章 堆和priority_queue

一.堆的定义和存储

1.定义

2.存储

二.核心操作

1.向上调整算法

2.向下调整算法

3.priority_queue的创建

列:

less和greater都只针对内置类型,如果数据类型为结构体那么,需要在结构体中重载比较运算符,从而创建大根堆和小根堆。

4.算法题

<1>

<2>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询