[沉迷理论]进制&链表&树

往期文章推荐:

题解之最大子矩阵-CSDN博客

洛谷P1115最大子段和[神奇的题目]-CSDN博客

(一条神奇的分割线)


前言

好久没有更新的我总算在百忙之中抽出时间写了篇博客。

最近总算结束了动态规划的学习,真的是头昏脑涨啊。

最近也是开始了进制,链表和树的学习,让我们来详细看看吧!

(一条神奇的分割线)


进制

在日常生活中,我们用的都是十进制。

但是这个世界上不只有十进制,还有二进制、四进制、五进制、八进制、十六进制......

那么不同进制怎么转换呢?其实我们把其他进制转换成十进制就能做题了。

十进制转化成N进制:

用十进制数依次除以N,余数依次排列,最后除到不能再除,把余数倒着排列。

具体如下:

字不好看见谅......................................................................................

N进制转化成十进制:

从0开始,依次加当前数位上的数字乘N的第K-1次方(K代表当前数位)。

具体如下:

然后我们就可以解决不少关于进制加减的题目了。

补充一点位运算知识:

一张图讲明白。

与:两个必须都为真才为真

或 :一个为真即为真

非:两个都不为真即为真

异或:两个值不相同才为真

左移:在左边加上一个0

右移:删除左边的一个数

你学废了吗?

OK,去刷题吧!

关于进制就讲到这。

(一条神奇的分割线)


链表

链表是线性表的一种,线性表分为顺序表和链表两种实现方式。

顺序表可以理解为数组。

顺序表的优点是只需存放数据元素自身的信息;存储密度大;空间利用率高;存取速度快。

缺点则是需要实现分配存储空间;容易造成空间浪费(空间冗余);进行插入删除操作效率低。

顺序表就到这里!我们的主角是链表。

链表的概念:

用一组地址任意的储存单元(可以连续也可以不连续)依次储存线性表中的各个元素。

我们可以拿火车来做理解。(火车真的很像链表)

总结一下链表的优点:空间利用率高,插入删除操作便捷。

缺点:修改、查找麻烦。

链表的种类有单向链表、双向链表、循环链表。

单向链表:每个节点由两部分组成,元素自身信息即数据域(data),指向后继元素位置的信息称为指针域(link)。整个链表用list指出,以表明链表的首地址。链表为空时,list为null。

**双向链表:**除了数据域外有两个指针域,llink(左)指向前驱节点,rlink(右)指向后继节点。双向链表有循环线性和非循环线性。

**循环链表:**最后一个节点的指针指向链表的第一个链节点,整个链表形成一个循环,从表中任意节点出发均可找到表中其他节点。

在各位准备刷题之前记住一个坑点:有些节点被修改过了,所以后面的分析中要小心。

OK,在题海中漂泊吧!

关于链表就讲到这。

(一条神奇的分割线)


树可能是这三个里面最容易理解的了。

定义:树作为一种非线性的数据结构,是由n(≥0)个节点组成的有限集合。

如果n=0,那么这棵树为空树。

如果n>0,那么这棵树有个特定节点------根节点。说白了根节点就是所有节点的祖先。

根节点只有后继(儿子),没有前驱(父亲)。

接下来讲几个概念:

树的度:节点拥有子树的数量叫做节点的度,度为0的节点叫做叶节点。度不为0的节点叫做分支节点。树的度为这棵树中所有节点的度的最大值,就可以叫做几叉树。比如二叉树,就是每个节点的子树和子节点最多有两个。

树的前驱和后继:这个节点的父亲节点(很通俗)就是这个节点的前驱,每个节点的子节点就是这个节点的后继。节点孩子的孩子称为节点的孙子,节点成为子孙的祖先,同一个双亲的子节点之间互称兄弟。

树中节点的层次:树中根节点为第一层,根节点的孩子为第二层,以此类推。树中节点的最大层次成为树的深度或高度。

森林:n棵互不相交的树组成的集合叫森林。

然后我们讲一下树的性质:

1,除根节点没有父亲之外,其他节点有且仅有一个父亲。

2,n个节点的数,有且仅有n-1条边。

3,树中任意两个节点之间有且仅有一条简单路径。

OK,树就讲完了。

但是!

Wait a moment!

树中最精彩的部分才刚开始讲!

(一条神奇的分割线)


二叉树

二叉树其实是树的一种,但是它实在是太牛皮了,所以我要单独提溜出来讲。

二叉树是一种度数为2的数,就是每个节点的子节点最多有两个。每个节点的子节点分别称为左孩子,右孩子。两颗子树分别称为左子树,右子树。

鄙人目前只学到二叉树的遍历,就先讲到此处。

二叉树有四种遍历方式:

先序遍历:遍历顺序:根节点>左节点>右节点,优先级同上。

中序遍历:遍历顺序:左节点>根节点>右节点,优先级同上。

后序遍历:遍历顺序:左节点>右节点>根节点,优先级同上。

层次遍历:每一层从左到右遍历。

做题技巧:如果遇见给出某几种遍历的结果让你画出这棵树,牢记:后序遍历找根节点,中序遍历找左右节点。

最后,注意优先级问题!

OK,在题目中度过美好的一天吧!

(一条神奇的分割线)


后记

参考文献:

信息学奥赛一本通 初赛真题解析,一本通信息学名师工作室编著,南京大学出版社出版。

感谢阅览!烦请一键三连!Thanks♪(・ω・)ノ

相关推荐
我不是代码教父1 分钟前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大19 分钟前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
charlie11451419128 分钟前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(协议层封装)
c语言·驱动开发·单片机·学习·教程·oled
子燕若水37 分钟前
mac 手工安装OpenSSL 3.4.0
c++
*TQK*1 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
ElseWhereR1 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
马船长1 小时前
[BSidesCF 2020]Had a bad day1
学习
*TQK*2 小时前
ZZNUOJ(C/C++)基础练习1031——1040(详解版)
c语言·c++·编程知识点
黄交大彭于晏2 小时前
三端回链增加截图功能
学习
linwq82 小时前
设计模式学习(二)
java·学习·设计模式