2024-11-20
158 字
1 分钟
二叉树的存储结构
二叉树的存储结构顺序存储按满二叉树的结点层次编号,依次存放二叉树中的数据元素。双亲和孩子的关系存储在编号上
typedef TElemType SqBiTree[100];SqBiTree bt;
缺点:深度为 k 的且只有 k 个节点的单支树需要 2^k^ - 1 的一维数组
链式存储typedef struct BiNode { TElemType data; struct BiNode *lchild; struct BiNode *rchild;} BiNode, *BiTree;
quiz:在 n 个结点的二叉链表中,有 ___ 个指针域
三
2024-11-20
670 字
2 分钟
树的遍历
树的遍历遍历算法分析遍历和创建树的过程都是递归的(算法思想都是递归的,就算是非递归算法仍然是按照递归思想实现的),只是按照某种遍历方式遍历子树时和访问树的方式一样。
注意子树和结点的区别
每个节点在递归调用的时候都会经过3次,不同的遍历顺序只是访问的时机不一样。
图片来自青岛大学王卓老师的PPT
先序遍历:先访问根节点,先序遍历左子树,先序遍历右子树先序遍历左子树的时候同样是先访问根节点,再先序遍历左子树的左子树,等到第一颗左子树的所有子孙被访问完之后再先序遍历右子树。
递归算法实现Status preOrderTraverse(BiTree T) { if (T == NU
2024-11-18
770 字
2 分钟
二叉树
二叉树二叉树的定义二叉树的每个结点最多只有两个分支,结点数只可能是 0, 1, 2。
二叉树是由一个根结点和两颗互不相交的分别称作这个根的左子树和右子树的二叉树定义(递归定义),子树有顺序之分不能调换顺序。
二叉树有以下 5 种基本形态:
∅ ⚪ ⚪ ⚪ ⚪ / \ / \ ⚪ ⚪ ⚪ ⚪空二叉树 根和空的二叉树 根和左子树 根和右子树 根和左右子树
二叉树不是树的特殊情况,它们是两个概念。因为如果二叉树某个结点只有一个孩子结点时仍然需要区分这个结点是左孩子还是右孩子;而树的某个结点只有一个孩子结点时就不需要区
2024-11-18
176 字
1 分钟
树与二叉树的转换
树与二叉树的转换将树转换为二叉树给定一棵树,能够得到唯一的二叉树,因为树的二叉链表表示只有一种情况。
转换方法(兄弟相连留长子)
在兄弟结点之间加一根线
对每个结点,除了其左孩子外,去除该结点与其余孩子之间的关系
然后得到的数据结构就是二叉树。
将二叉树转换为树
双亲结点和所有的左孩子的右孩子,右孩子的右孩子 … 相连接
去掉所有节点和右孩子的连线
这样就从二叉树转换为树了
是不是很简单呢 (bushi)
2024-11-18
345 字
1 分钟
树
树树的基本术语:
节点的度:一个节点含有的子树的个数称为该节点的度;
树的度:一棵树中,最大的节点度称为树的度;
叶节点或终端节点:度为零的节点;
非终端节点或分支节点:度不为零的节点;
父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
深度:对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0;
高度:对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0;
2024-09-19
2.8k 字
11 分钟
和我一起写Makefile
Makefile执行过程
读取阶段
读取Makefile文件的所有内容
根据Makefile的内容再程序中建立起变量
在程序中构建起显示规则和隐式规则
建立目标和依赖之间的依赖图
目标更新阶段
用第一阶段构建起来的数据确定哪个目标需要更新然后执行对应的更新方法
变量和函数的展开如果发生再第一阶段就称作立即展开,否则称为延迟展开
Makefile 的规则target: prerequisites recipe
target
target 可以是一个 object file (目标文件,eg: main.o),也可以是一个可执行文件(executable file, eg: hello
2024-09-12
1k 字
3 分钟
结束是最好的开始
补考结束今天我的补考已经结束了,最近学了高等数学比较长时间,物理电磁学就学了两天大概十几个小时,考的过程中感觉题目并不难,应该是稳过的(当然这段肯定需要等到结果出来之后我才会发出来)。
结果出来了 过了,稳过码上开始OSPP进度最近因为补考的事情完全把 OSPP 搁置了,我从8月30号开始就一点代码都没有写。这段时间实际我是有很多时间在玩的,但是就是不愿意把时间花在写代码上,更乐意去做一些杂七杂八的事情,像是在学计算机的知识,可是现在我完全不记得那段时间学了什么,也没有任何证据证明我学过了东西,这些真的就是很悲哀的事情 - 时间花了,但是不知道到底做了什么。
多动脑,不用动脑的事情谁都想干,奶
2024-09-03
737 字
2 分钟
所谓的Google上网助手
这篇博客是警告
事情的起因是这样
之前在我的魔法不是很稳定的时候,我偶然看见了一个叫做 Google上网助手 的 chrome插件, 当时我是很高兴的,可以在不用魔法的情况下就能访问到 Google and Gmail。
然后我就在网上爆找资源下载了那个插件来装到了 Google 上面去,但我发现根本用不了。
刚开始我还没发现问题,因为那个时候我的魔法根本用不了,我不清楚是不是我家(重庆)离连接的节点(日本)太远还是怎么回事,而我在小岛的连接就还挺顺畅的(不过我感觉不应该存在这样的问题啊,之后得认真学习计算机网络知识)。
最近回到学校后我的魔法能用了,但是一直访问不了 Gmail 和 MDN
2024-09-02
576 字
1 分钟
Dvorak键盘布局体验
Dvorak键盘布局前言最近在尝试使用Dvorak键盘布局,发现效果还不错,所以来记录一下。
Dvorak键盘布局Dvorak键盘布局是一种键盘布局,由捷克作家和音乐家斯捷潘·德沃夏克(Stjepan M. Dvorak)在1890年代发明。这种布局的主要特点是,将字母e和t分别放在键盘的左上角,而将字母a和o分别放在键盘的右上角。这种布局的目的是为了提高打字速度和减少手指的移动距离。
Dvorak键盘布局的布局如下:
使用Dvorak键盘布局的好处
Dvorak键盘布局提高打字速度其实不见得,只是满足人体工学,能够提供一个更加舒适的打字姿势,是的你的手在长时间的打字过程中不会感到疲劳。
2024-07-06
961 字
3 分钟
对大一生活的总结
大一我是怎么度过的学习
学习方面总结一句就是学习成绩很差,没有花时间在真正的学习上,我确实花了挺多时间在学习上的就是不知道在学什么,效率不高导致我既付出了时间成本有没有获得相应的效益。
生活
生活上我大概就是每天去工学馆坐那么几个小时但仍然什么东西都没有学到。我现在想想我那时候每天去工学馆坐那么几个小时真的不知道学了什么,学习的进度很慢,基本就是边学边玩,然后就是什么都没有学到。学习的时候真的就是不要别被一些杂七杂八的事情给打扰到了。
社团
e管家 —— 电脑维修 (没实操过)
羽毛球队 (就是打球,从没练过)
党委宣传部 (拍照)
娱乐
大一上基本没有什么娱乐,就是周末去打羽毛球,偶尔