Part03 数据结构 - 教程

news/2025/9/20 22:43:26/文章来源:https://www.cnblogs.com/ljbguanli/p/19102996

Part03 数据结构 - 教程

CSP-J 初赛常考知识点总结 - 数据结构篇

1. 图论基础

基本概念与术语

  • 边 (Edge):节点之间的连接线
  • 完全图:任意两个顶点之间都有边相连的图
    • mmm 个节点的完全图边数为:Cm2=m(m−1)2C_m^2 = \frac{m(m-1)}{2}Cm2=2m(m1)
  • 简单路径:顶点序列中顶点不重复出现的路径
  • 连通图:图中任意两个顶点都是连通的(存在路径相连)
    • 注意:完全图一定是连通图,但连通图不一定是完全图

图的分类

  • 有向图:边具有方向性(e=u→ve = u \rightarrow ve=uv
  • 无向图:边没有方向性(e=u−ve = u-ve=uv

环与度

  • :起点和终点相同的路径,且路径中除起点外无重复顶点
    • 自环:起点和终点相同的边(e=(u,u)e = (u,u)e=(u,u)
  • 入度:以顶点 vvv 为终点的边的数量
  • 出度:以顶点 vvv 为起点的边的数量

2. 树结构

基本概念

树的术语

  • 根结点:树的最顶层节点,每棵树有且仅有一个
  • 深度:节点到根结点的路径上的边数
  • 高度:所有节点深度的最大值
  • 叶结点:没有子结点的结点
  • 父结点:除根结点外,每个结点到根路径上的第二个结点
  • 祖先:结点到根路径上除自身外的所有结点
  • 子结点:如果 uuuvvv 的父亲,那么 vvvuuu 的子结点
  • 兄弟:同一父亲的多个子结点互为兄弟
  • 子树:删除与父结点相连的边后,该结点所在的子图
## 3. 二叉树

遍历方式

  • 前序遍历:根 → 左子树 → 右子树
  • 中序遍历:左子树 → 根 → 右子树
  • 后序遍历:左子树 → 右子树 → 根

遍历性质

### 特殊二叉树
满二叉树/完美二叉树
  • 所有叶结点深度相同
  • 深度为 hhh 的满二叉树节点总数为:2h−12^h - 12h1
  • 叶结点数 m0m_0m0 与度为2的结点数 m2m_2m2 满足:m0=m2+1m_0 = m_2 + 1m0=m2+1
  • 高度为:⌊log⁡n⌋+1\lfloor \log n \rfloor + 1logn+1
完全二叉树
  • 只有最下面两层结点的度数可小于2
  • 最下面一层的结点都集中在该层最左边
#### 编号性质

对于满二叉树/完美二叉树/完全二叉树:

  • 结点 iii 的左儿子编号为:2i2i2i
  • 结点 iii 的右儿子编号为:2i+12i + 12i+1
  • 结点 iii 的父结点编号为:⌊i/2⌋\lfloor i/2 \rfloori/2

4. 栈 (Stack)

定义与特性

基本操作

操作功能描述时间复杂度
push(x)元素 xxx 入栈O(1)O(1)O(1)
pop()弹出栈顶元素O(1)O(1)O(1)
top()返回栈顶元素值O(1)O(1)O(1)
empty()判断栈是否为空O(1)O(1)O(1)
size()返回栈中元素个数O(1)O(1)O(1)

5. 队列 (Queue)

定义与特性

基本操作

操作功能描述时间复杂度
push(x)元素 xxx 入队O(1)O(1)O(1)
pop()队首元素出队O(1)O(1)O(1)
front()返回队首元素值O(1)O(1)O(1)
empty()判断队列是否为空O(1)O(1)O(1)
size()返回队列元素个数O(1)O(1)O(1)

6. 链表 (Linked List)

特点与性质

6.1 STL List 的使用

STL中的list是双向链表容器,基本操作如下:

// 初始化
list<
int> myList;
// 添加元素
myList.push_back(1);
// 在末尾添加
myList.push_front(2);
// 在开头添加
// 删除元素
myList.pop_back();
// 删除末尾元素
myList.pop_front();
// 删除开头元素
// 插入元素
auto it = myList.begin();
advance(it, 1);
// 移动迭代器
myList.insert(it, 3);
// 在指定位置插入
// 删除指定元素
myList.remove(2);
// 删除所有值为2的元素
// 遍历
for (auto it = myList.begin(); it != myList.end();
++it) {
cout <<
*it <<
" ";
}
// 或使用范围for循环
for (int val : myList) {
cout << val <<
" ";
}
// 其他操作
myList.size();
// 返回元素个数
myList.empty();
// 判断是否为空
myList.clear();
// 清空链表

7. 字符串 (String)

基本概念

表达式表示法

前缀表达式(波兰式)
中缀表达式
  • 运算符在操作数中间
  • 例:1+2−31 + 2 - 31+23
后缀表达式(逆波兰式)
  • 操作数在前,运算符在后
  • 例:12+3−1 2 + 3 -12+3 对应中缀:1+2−31 + 2 - 31+23
  • 求值方法:使用栈模拟运算

逆波兰式运算的栈模拟代码

// 假设输入为vector<string>& tokens,包含数字和运算符stack<int> st;for (string token : tokens) {if (token == "+" || token == "-" || token == "*" || token == "/") {int b = st.top(); st.pop();int a = st.top(); st.pop();if (token == "+") st.push(a + b);else if (token == "-") st.push(a - b);else if (token == "*") st.push(a * b);else if (token == "/") st.push(a / b);} else {st.push(stoi(token));// 将字符串转换为整数}}int result = st.top();// 最终结果

表达式转换方法

方法一:表达式树
  1. 构建表达式树(叶节点为操作数,内部节点为运算符)
  2. 前序遍历得前缀表达式
  3. 中序遍历得中缀表达式
  4. 后序遍历得后缀表达式
方法二:加括号法(推荐)
  1. 为中缀表达式加括号:1−2+3→((1−2)+3)1-2+3 \rightarrow ((1-2)+3)12+3((12)+3)
  2. 将运算符移到括号前/后
    • 前缀:移到括号前 → +(−(1,2),3)+(-(1,2),3)+((1,2),3)
    • 后缀:移到括号后 → ((1,2)−,3)+((1,2)-,3)+((1,2),3)+
  3. 删除括号得最终表达式

习题参考

  • CSP 2019 入门组第一轮-T6:链表应用
  • CSP 2019 入门组第一轮-T8:二叉树性质

CSP-J 入门组复习大纲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解3:幂等使用场景

幂等,API接口和MQ消费重复

推荐一款数据库安全产品:全知科技知形-数据库风险监测系统的价值解析

推荐一款数据库安全产品:全知科技知形-数据库风险监测系统的价值解析在当下数字经济快速发展的浪潮中,数据已被视为企业最核心的生产要素。无论是金融、医疗,还是互联网与制造业,数据库都是数据存储与流转的“中枢…

变量,常量,作用域

变量JAVA是一种强类型语言,每个都必须声明其类型。JAVA变量是程序中最基本的存储单位,其要素包括变量名,变量类型和作用域。 type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值; 可以使用逗号隔…

wireshark 进行snmp 协议加密报文解密查看

转发请注明出处:在环境上进行对数通设备进行 snmp 采集数据,在现网运行环境中运行时,会偶尔出现异常,于是,采用tcpdump抓包,tcpdump 抓包得报文用wireshark打开之后,查询上报设备上报得数据层data格式如下:由于…

linux kernel synchronization 2

Per CPU VariablesA CPU should not access the elements of the array corresponding to other CPU. 每个CPU拥有该变量的独立副本 无需加锁 - 由于每个CPU只操作自己的副本,因此读写自己的副本时不会产生竞争条件 缓…

MySQL高阶查询语句与视图实战指南 - 指南

MySQL高阶查询语句与视图实战指南 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

订单未支付多种方案

1、微服务常用MQ 2、单体情况下常用定时任务

耳鸣针灸学位

耳鸣针灸学位足驷马 中九里 灵骨 叉三 行间 肾关 太溪 牵引针患侧 听宫或者耳门

Twincat 中如何将位变量链接到字节

最近在测试一个EtherCAT IO模块, 参考视频Ethercat总线快速入门教程——1-2TwinCAT基本操作_哔哩哔哩_bilibili 我手里是欧辰的一个模块,它的输入输出都是字节形式的因此小改了下PLC程序 1. 在DUTs中新建了一个结构体…

不管不管,就要你的特殊对待(权限)

特殊权限,文件特殊属性除rwx(读写执行)三种文件权限外,还有哪些权限呢? 一.SUID 1.是什么? “以文件所有者的身份运行程序”。主要作用于可执行文件。 当一个可执行文件设置了 SUID 位时,任何用户在执行该文件时,…

202003_攻防世界_功夫再高也怕菜刀

流量分析,文件分离,WebShellTags:流量分析,文件分离,WebShell 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202003_攻防世界_功夫再高也怕菜刀.zi…

工业软件:重塑协同流程、降低制造成本的关键器具

工业软件:重塑协同流程、降低制造成本的关键器具pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

实用指南:【2025最新版】PCL点云处理算法汇总(C++长期更新版)

实用指南:【2025最新版】PCL点云处理算法汇总(C++长期更新版)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

Gemini Proxy for Xcode 26

总的来说体验一塌糊涂,还不如Cursor/Trae或者是vscode装CLINE/RooCode等插件,更别提用Claude Code(虽然Xcode内置了,但是Claude Code官方明确不给中国大陆使用),需要一些手段来绕过进行使用, Xcode支持open AI 的一些接…

本地布署Qwen-Image全量蒸馏加速模型 - yi

本地布署Qwen-Image全量蒸馏加速模型一,#本机环境检查 执行nvidia-smi,查看右上角。验证显卡驱动已安装最高支持的版本。nvidia-smi执行nvcc -V验证cudanvcc -V执行conda --version验证conda版本conda --version#列出…

Android常用ADB命令

截屏adb shell screencap -p /sdcard/screenshot.png -p参数:保存PNG图片

【2025PolarCTF秋季个人赛】WEB方向部分wp

white 打开靶机,发现可以执行命令,但是进行了严格的过滤 可以执行的命令是一个白名单 ls pwd whoami date echo base64 sh白名单命令下方告知了过滤规则,比如禁止危险函数和过滤特殊字符等。有意思的是,这里虽然说…

电池热失控(Thermal Runaway of the Battery) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

人工智能大模型 基础知识汇总

GGUF、Safetensors、ONNX三种格式 https://blog.csdn.net/woshihlf/article/details/149123005transformers框架中将SafeTensors模型转换为ONNX https://zhuanlan.zhihu.com/p/29952689792