王道考研数据结构代码总结(后四章)

news/2024/12/22 18:06:42/

目录

    • 基本概念与属性
    • 树的基本性质
    • 拓扑排序


本文包含王道考研讲课中所涉及的数据结构中的所有代码,当PPT代码和书上代码有所区别时以咸鱼的PPT为主,个人认为PPT上的代码比王道书上的代码要便于理解,此外,本博客也许会补充一些额外的代码进来(不仅受限于王道考研),408中冷门考点频出,应该会囊括所有涉及到的代码,这也是我的DS的第二轮复习,希望与大家共勉之。

DS的后四章只有最后一章(排序)涉及大量的代码,而树,图,查找这三章,对于概念的考察比较深入,故本文对于前三章也会进行概念上的整理,代码的话也同样会全部给出。

相关文章:
王道考研数据结构代码总结(前四章)


基本概念与属性

空树:节点数为0的树

非空树的特性:
1.有且仅有一个根节点
2.没有后继的结点称为“叶子结点”(或终端结点)
3.有后继的结点称为“分支结点”(或非终端结点)
4.除了根节点外,任何一个结点都 有且仅有一个前驱
5.每个结点可以有0个或多个后继。

树的属性:
1.结点的层次(深度):从上往下数(默认从1开始)
2.结点的高度:从下往上数
3.树的高度(深度):总共有多少层
4.结点的度:有几个孩子(分支);【所以非叶子结点的度 > 0 >0 >0;叶子结点的度 = 0 =0 =0
5.树的度:各节点的度的最大值

有序树与无序树:
有序树:逻辑上看,树中结点的各子树从左至右是有次序的,不能互换
无序树:逻辑上看,树中结点的各子树从左至右是无次序的,可以互换
【具体看你用树存什么,是否需要用 结点的左右位置关系 反映某些逻辑关系】

森林:森林是 m ( m ≥ 0 ) m(m ≥ 0) m(m0)互不相交 的树的集合; m = 0 m=0 m=0 代表空森林,森林和树是可以互相转换的。

树的基本性质

注意这是树的基本性质,即只要是个树,就有以下性质:

  1. 结点数 = 总度数 + 1 + 1 +1

    证明:结点的度数 = 它的孩子数,只有根节点没父节点,即度数求和之后加上根节点后就是总度数

  2. 树的度:各结点的度的最大值

  3. m m m叉树:每个结点最多只能有 m m m 个孩子的树

  4. 度为 m m m的树、 m m m叉树的区别
    在这里插入图片描述

拓扑排序

逆拓扑排序:

// 逆拓扑排序的实现(DFS算法) void DFSTraverse(Graph G){            // 对图G进行深度优先遍历 for (v = 0; v < G.vexnum; ++ v)visited[v] = false;           // 初始化已访问标记数据 for (v = 0; v < G.vexnum; ++ v)   // 本代码中是从v=0开始遍历 if (!visted[v])DFS(G, v);
/* 
注意这里也是没被访问过直接DFS
这是因为第一个节点的DFS就会输出完一个连通分量
全部打印出去后,剩下的点和边也会是一个或多个连通分量,即会出现出度为0的 "线"
此时再次DFS即可 
*/
}void DFS(Graph G, int v){visit(v);                 // 从顶点v出发,深度优先遍历图G visited[v] = true;           // 设已访问标记 
/* 
为什么不pop?
逆拓扑排序是先输出出度为0的点
所以只要有能往出走,就继续DFS即   if (!visited[w]) DFS(G, w);
故当不能往出走的时候,那么就是找见了出度为0的点
故我们需要打印输出,然后回溯 
*/for (w = FirstNeighbor(G, v); w >= 0; w = NextNeighor(G, v, w))if (!visited[w]){        // w为u的尚未访问的邻接顶点 DFS(G, w);}print(v);           // 打印顶点 
/*
DFS实现逆拓扑排序:在顶点推栈前输出
此时的栈顶元素就是出度为0的点,符合我们的逆拓扑排序打印点的条件 
逆拓扑排序打印点的条件:
1.找一个出度为0的点输出
2.删除该顶点和所有以它为终点的有向边
无法继续DFS就是找到了出度为0的点
打印顶点其实就相当于出栈,即删除这个结点和以它为重点的有向边 
*/
}

http://www.ppmy.cn/news/296847.html

相关文章

【Turtle绘图系列】超火皮卡丘大全,可爱到爆炸~

前言 大家好&#xff0c;我是栗子&#xff0c;欢迎大家阅读文章~ ​ 嘿嘿&#xff0c;这款表情包是不是敲可爱啊~我想很多小伙伴儿都用过的哈&#xff0c;“皮卡丘果然是吃可爱多长大的吧&#xff01;”​如此可爱的皮卡丘&#xff0c;做成表情包后更是萌度爆棚&#xff01; …

三丽鸥可爱小狸猫「Pokopon’s Diary」贴图上架!

最近三丽鸥在LINE的贴图小舖推出了不少新贴图呢&#xff01;这次他们在LINE的贴图小舖中推出了「Pokopon’s Diary」狸猫日记的新贴图&#xff0c;大家看到这只小狸猫是不是绝得十分可爱呢&#xff1f;不晓得牠在LINE的贴图小舖中会有什幺样可爱又逗趣的表情&#xff0c;赶快和…

喜欢简洁可爱风的小可爱有没有

每个人都有自己喜欢的风格。有没有喜欢简洁可爱风的小可爱呀&#xff1f;今天分享的软件猜你会喜欢。 1.报时喵 报时喵是一款非常可爱的手机报时软件&#xff0c;也是一款实用的提醒规划软件&#xff1b;软件支持苹果版&#xff0c;iPad也可以安装使用。第一次打开这个软件&a…

键盘猫下载安装教学(可爱)

可爱的键盘猫&#xff0c;天天敲代码打游戏的同学可以尝试安装一个(免费)&#xff0c;乐趣无穷呀&#xff01; 有俩种已经设置好的版本&#xff0c;大家可以根据自己的喜欢下载&#xff0c;也可以自己改建或切换模式 有键盘模式&#xff0c;画图模式&#xff0c;手柄模式等 26…

小可爱的整理啊

树–>数组 export function tree2Array(treeObj, rootid) {let temp []; // 设置临时数组&#xff0c;用来存放队列let out []; // 设置输出数组&#xff0c;用来存放要输出的一维数组if (treeObj.length 0) {return treeObj;}temp temp.concat(treeObj);// 首先把根元…

Puppeteer介绍

前面已经介绍了Cypress框架&#xff0c;为什么还要介绍puppeteer呢&#xff1f;因为puppeteer支持的一些功能cypress不支持&#xff0c;例如多个tab页窗口切换的场景&#xff0c;同一个测试场景中访问不同域页面等。另外&#xff0c;puppeteer有google大厂支持&#xff0c;发展…