数据结构与算法(2021aut)
文章平均质量分 69
HIT 2021秋 数据结构与算法课程学习记录
Mike峰
Senior graduate from Department of Computing, HIT.
展开
-
数据结构期末注记2
注意:图中的V表示的一般是顶点。 1. 图的邻接、依附 有向图中:<vi, vj>表示vi邻接到vj,也表示vj邻接于vi,称弧<vi, vj>依附于vi和vj。 (有向边也称作弧) 2. 有向图也有度(TD)这个说法,它的TD = ID +OD(即度等于入度加上出度) 3. 路径长度(分为非带权图和带权图两种) 非带权图:路径上边的条数 带权图:路径上各边的权值之和 (路径是顶点序列) 4. 简单路径:序列中没有重复的顶点 简单回路(也成为环):除了终始两个顶点相同,其..原创 2021-11-27 14:54:15 · 219 阅读 · 0 评论 -
数据结构期末注记1x
1. 二叉查找树(BST)的查找性能: 最好情况:与折半查找的判定树类似,平均查找长度为log_2 n 最坏情况:退化成了单支树,平均查找长度为(n +1)/2 最好情况:二叉查找树的平均高度为O(log_2 n),因此在平均情况下时间复杂性为O(log_2 n)。 就查找性能来讲,BST与二分查找树的查找复杂度都是O(log_2 n) 但是对于树的插入删除节点之后有序性的维护而言,BST更具优势: BST的插入、删除操作的平均执行时间为O(log_2 n) 而二分查找树的插入删除操作平均执行时间为O.原创 2021-11-23 11:58:54 · 1268 阅读 · 0 评论 -
外部排序——数据结构复习
1.选择树 包括胜者树、败者树, 用于多路归并,选择出K条路(已经排好序)中每条路第一个元素中最小的元素。 关于为什么“多路归并”与外排配合而不是“堆排序”与外排配合: 原因是多路归并只需要占用内存空间 ...原创 2021-11-20 14:32:40 · 459 阅读 · 0 评论 -
内部排序——数据结构复习
计划: 11/14 内部排序 11/15 外部排序 11/16 查找 11/17 图 11/18 树与二叉树 11/19 二叉树习题课 11/20 线性表、栈与队列 11/21 绪论、算法 机动:穿插看补充文档 正文: 11/14 内部排序原创 2021-11-17 18:26:58 · 828 阅读 · 0 评论 -
数据结构作业——几种排序的序列
期末做个水一些的作业 填空题: 在内排序的过程中,通常需要对待排序的关键码集合进行多遍扫描。采用不同排序方法,会产生不同的排序中间结果。设要将序列< M,S,R,D,F,X,Q,H,C,Y,P,A >中的关键码按字母的升序重新排列,则 (1) __是冒泡排序一趟扫描的结果, (2) __是初始步长为4的希尔排序一趟扫描的结果, (3) __是两路归并(合并)排序一趟扫描的结果, (4) __是以第一个元素为分界元素的快速排序一趟扫描的结果, (5) __是堆排序初始建堆的结果。 解答: (原创 2021-11-14 01:06:05 · 1005 阅读 · 0 评论 -
数据结构作业4——图的DFS等获得连通分量
题目: 微信朋友圈出了扩大版。其中好友分为直接好友和间接好友。和你有直接好友关系的是你的直接好友,你的直接好友的好友都是你的间接好友。所有互为好友的人共同构成了一个朋友圈,圈里每个人都其他人的直接或间接的好友。 已知微信用户共有N位,以及他们之间的直接好友关系,请你找出总共形成了多少个扩大版朋友圈。输入格式 第一行输入两个整数N(1<=N<=1000),M(0<=M<10000),分别表示微信用户的人数、他们之间的直接好友关系的数目。 接下来有M行输入,每行输入两个整数x(1&l原创 2021-11-17 21:16:04 · 627 阅读 · 0 评论 -
C++自学笔记
自学网站:C语言中文网 链接:C++入门教程http://c.biancheng.net/cplus/ 一、从C到C++ 1.2 C++类和对象到底是什么意思? C++ 中的类也是一种构造类型,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;通过类定义出来的变量也有特定的称呼,叫做“对象”。 有个问题: class Student{ public: //类包含的变量 char *name; int age; float score; //类包含的转载 2021-10-11 22:00:06 · 110 阅读 · 0 评论 -
数据结构与算法作业3——二叉树路径
是原创 2021-10-15 22:51:30 · 258 阅读 · 0 评论 -
数据结构与算法实验1——公司管理(二叉树)
实验一 公司组织管理 题目: 某公司利用链表管理员工之间的领导关系,如上图所示。 每名员工用链表中的一个节点表示,每个节点有name、next、prev和lead四个属性。以“王总”节点为例: name(王总): 员工姓名,每个员工的姓名唯一; next:指向和王总同级的后一位员工; prev:指向和王总同级的前一位员工; lead:指向直接受王总领导的员工。每一位员工直接领导最多1名员工,最少0名员工。 请你实现一个系统,接受4种命令作为输入,实现4种功能: 1.(输入)ini.原创 2021-11-17 21:16:54 · 1395 阅读 · 0 评论 -
关于指针、地址的大小的问题(以及malloc的用法)
任何变量的指针大小都是一样大小的空间,例如在64位机中是4个字节,在32位机中是2个字节。 而我们分配一个地址,就比如力扣145题https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/er-cha-shu-de-hou-xu-bian-li-by-leetcode-solution/ 该题其中一句: int *matrix = malloc(sizeof(int) * 2001); 给res这个指针分配了原创 2021-10-08 00:25:01 · 495 阅读 · 0 评论 -
历史遗留问题
1. 二叉树的遍历(非递归)——重点是后序。 时间:2021/10/6~2021/10/7原创 2021-10-07 16:57:09 · 94 阅读 · 0 评论 -
对于栈、递归的关系的理解
对于某一个递归程序,实际上就是使用栈实现的。 在递归过程中,经常需要进入在函数A中进入下一层函数A(也就是函数自己调用自己) 个人的理解: 当函数A(a层)进入下一层(a+1层)函数A(和自己一样的函数),系统会将下一层函数的变量也进栈。 当下一层(a+1层)函数退出的时候,也就是自然返回到了本层(a层),此时我们就将第a+1层的变量出栈,栈顶的元素就是第a层的变量了。 这样,函数也就知道自己是在第几层了。 ...原创 2021-10-07 16:19:09 · 519 阅读 · 0 评论 -
二叉树的遍历(非递归)
由于二叉树的递归方法实际上是系统在使用栈进行操作,因此我们的迭代(非递归)方法也就需要使用栈进行模拟。 一、先序遍历 我们需要明白,进栈的元素都是树的根节点 root。 所以我们需要先访问该节点,再将该节点进栈。【数据结构】树的非递归先序遍历、中序遍历算法_哔哩哔哩_bilibili二叉树的非递归后序遍历算法https://www.bilibili.com/video/BV1gV411U7XJ?from=search&seid=5899376191017226924&spm_id_fro原创 2021-10-06 21:55:34 · 320 阅读 · 0 评论 -
数据结构与算法作业3——约瑟夫环问题(循环链表)
第二次作业: 习题2 载具杀手与时停高手 著名绅士简尚夫有一项特殊的天赋,他可以摧毁任意一辆载具(载具杀手)。他的朋友狄傲可以将时间暂停(时停高手)。他俩玩一个游戏。 有N辆车,编号1~N。其中编号A的是狄傲心爱的压路机。指定编号B的车作为起点,简尚夫首先摧毁这辆车;然后往后数K辆车,摧毁第K辆;然往后数K辆车,摧毁第K辆。数到最后一辆车,则回到剩余的第一辆车接着数。直到把所有车全部摧毁。当简尚夫将要摧毁狄傲的压路机时,狄傲会发动时停技能阻止他。 请你构建循环链表,模拟这个过程(模拟到发动.原创 2021-09-29 21:39:26 · 209 阅读 · 0 评论 -
数据结构与算法作业2——双向链表
第二次作业: 习题1 双向链表 双向链表的知识点: 同单链表相比,双链表仅是各节点多了一个用于指向直接前驱的指针域。因此,我们可以在单链表的基础轻松实现对双链表的创建。 与单链表不同,双链表创建过程中,每创建一个新节点,都要与其前驱节点建立两次联系,分别是: 将新节点的 prior 指针指向直接前驱节点; 将直接前驱节点的 next 指针指向新节点。 双向链表的创建 2021/9/26 Doubly Linked List | Set 1 (Introduction and Inser.原创 2021-09-27 13:15:21 · 412 阅读 · 0 评论 -
数据结构与算法作业1——数组链表入门
习题1 删除列表的倒数第n个节点 题目链接 方法一 暴力求解 (1)先遍历得到链表的节点个数 (2)删除链表的第L-N+1个节点 时间复杂度:o(n) 空间复杂度:o(1) 方法二原创 2021-09-21 10:21:40 · 245 阅读 · 0 评论