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>
![]()