2022-8-5 第一小组 甘源册 学习笔记
时间:2022-08-05
本文章向大家介绍2022-8-5 第一小组 甘源册 学习笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
知识点掌握情况
树(了解) List集合(理解)
学习心情
集合挺简单,作业很痛苦。
1.树(Tree)
- 结点:结点是数据结构中的基本,构成复杂数据结构的基本组成单位
- 树(Tree):是n(n>=0)个结点的有限集,n=0,称为空树。
- 在任意的非空树中:
- 有且仅有一个特定的称为根节点
- 当n>1,其余结点可分m个互不相交的有限集
- 定义树
- 根节点是唯一的,不能存在多个根节点
- 子树的个数没有限制,但他们一定是互不相交的
- 树的定义中,使用了递归。递归在树的学习过程中起着重要的作用
- 结点的度
- 结点拥有子节点的数量称为结点的度
- 结点的关系
- 结点子树的根节点称为该结点的孩子结点
- 相应该结点称为孩子结点的父结点(双亲结点)
- 结点的层次
- 根结点为一层
- 树的深度
- 树中结点的最大层数称为树的深度或高度
1.1二叉树
- 二叉树是n个结点的有限集合,如果n=0,那就称为空二叉树。
- 二叉树特点
- 每个结点最多只有两棵子树,所以二叉树中不存在于度大于2的结点
- 左子树和右子树是有顺序的
- 即使这个树中某个结点只有一棵子树,也要区分它是左子树还是右子树
- 二叉树的性质
- 在二叉树中第i层上最多有2^(i-1)个结点。
- 二叉树中如果深度为k,那么最多有2^k-1个结点
- 如果n0=n2+1,n0表示度数为0的结点,n2表示度数为2的结点数
- 在完全二叉树中(某个结点都有两个子结点),具有n个结点的完全二叉树的深度为[log2n]+1,其中[log2n]是向下取整
- 若对含n个结点的完全二叉树,从上到下且从左到右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点有如下特性:
- 若i=1,则该结点是二叉树的跟,无父节点,否则,编号为i/2的结点为其父结点
- 若2i>n(编号),则该结点无左孩子结点,否则,编号为2i的结点为其左孩子结点
- 若2i+1>n,则该结点无右孩子结点,否则,编号为2i+1的结点为右孩子结点
1.2斜树
- 所有的结点都只有左子树的二叉树——左斜树
- 所有的结点都只有右子树的二叉树——右斜树
1.3满二叉树
- 在一个二叉树中,如果所有分支结点都存在左子树和右子树,并且所有的叶子都在同一层上——满二叉树
- 满二叉树的特点
- 叶子只能出现在下一层。
- 非叶子结点的度一定是2。
- 在同样的深度的二叉树中,满二叉树的结点的个数最多,叶子树也最多。
1.4完全二叉树
- 对一棵具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点于同样深度的满二叉树中编号为i的结点相同——完全二叉树
1.5二叉树的存储结构
-
顺序存储
- 使用一维数组来存储二叉树中的结点,并且结点的存储位置,就是数组的下标索引
- 当二叉树为完全二叉树时,结点的数刚好填满数组。
- 如果二叉树不是完全二叉树,采用顺序存储,会出现空间浪费的情况
-
二叉链表
- 顺序存储不能满足二叉树的要求,采用链式存储。
- 二叉树的每个结点都有两个孩子
- 可以将结点数据结构定义成一个数据和两个指针域
1.6二叉树的遍历(重点)
- 从跟结点出发,按照某种次序依次访问,二叉树中所有的结点,使得每个结点被访问一次,且仅被访问一次
- 二叉树的访问次序可以分为四种:
- 递归遍历:
- 自上而下,从左到右,每个结点会走三次
- 前序遍历
- 从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左,再向右的方向访问。(根左右)
- 中序遍历
- 从根结点出发,先向左,再向右的方向访问。(左根右)
- 后序遍历
- 从根结点出发,先向左,在向右的方向访问。(左右根)
- 层次遍历
- 前序遍历
1.7其他树的分类
- 二叉查找树(二叉搜索树,二叉排序树)
- 若左子树不为空,所有左子树的值都是小于它的根结点的值
- 若右子树不为空,所有右子树的值都是大于它的根结点的值
- 左右子树也是一个二查找叉树
- 没有键值相等的点
- 平衡二叉树(AVL树)
- 含有相同结点的二叉树的不同形态,找出一个查找平均长度最小的一棵二叉查找树
- 要么是一棵空树,要么其根结点的左右子树的深度之差的值不超过1
- 左右子树也都是平衡二叉树
- 二叉树结点的平衡因子定义为该结点的左子树的深度减去右子树的深度。
- 【平衡因子=左子树深度-右子树深度(-1,0,1)】
- 含有相同结点的二叉树的不同形态,找出一个查找平均长度最小的一棵二叉查找树
- 红黑树(HashMap重点应用)
- 自平衡的二叉树。又增加了一个颜色的属性,结点的颜色只能是红色或黑色
- 根结点只能是黑色,必须是黑色
- 红黑树中,所有的叶子结点后面再接上左右两个空结点,可以保持算法的一致性,所有的空结点一致是黑色
- 其他的结点要么是黑色,要么是红色,红色结点的父结点和左右孩子结点都是黑色,黑红相间
- 任意一棵子树中,从根节点向下走到空节点的路径上所经过的黑节点的数目相同,从而保证了是一个平衡二叉树
- 自平衡的二叉树。又增加了一个颜色的属性,结点的颜色只能是红色或黑色
- B-树(B树)——了解即可
- B-树是一种平衡多路查找树,它在文件系统中很有用。一棵m阶的B-树
- 树中每个子结点至多有m棵子树
- 若根结点不是叶子结点,则至少有2棵子树
- 除了根结点外所有非终端结点至少有[m/2]棵子树
- 每个结点的信息结构(A0,K1,A1,K2......Kn,An),n表示关键字个数,K为关键字,A为指针
- 所有的叶子结点,都出现在同一层次上,且不带任何信息。
- B-树是一种平衡多路查找树,它在文件系统中很有用。一棵m阶的B-树
- B+树——了解即可
- B-树和B+树,在后序数据库阶段才会重点应用
2.集合
- 集合是存放数据的一个容器
- 目的:更方便的存储和操作数据,CRUD。
- Collection
接口——存放单值的最大父接口 - List
(列表)线性表:和数组类似,List可以动态增长,查找元素的效率高,插入删除元素的效率低,因为会引起其他元素位置的改变。 - Set
线性表:查询元素的效率低,删除插入效率高,插入和删除不会引起元素的移位。
- List
- Map<K,V>——存放对值的最大父接口
- Map(映射)用于保存具有映射关系的数据,Map保证着两组数据:key和value
- key和value都可以是任意的引用数据类型,【但key不能重复】
2.1 ArrayList
-
内部结构是一个数组
-
// 创建了一个集合 ArrayList<Integer> l2 = new ArrayList<>(); //开发中一般情况下,会使用多态来创建集合--向上转型 List<Integer> l1 = new ArrayList<>(); // 数组转换成集合--把数组当成一个元素传入集合 int[] ints = new int[12]; List<int[]> ints1 = List.of(ints); // 把多个数据(数组)转换成集合 List<Integer> integers = Arrays.asList(1, 2, 3, 4); // 数组和集合之间的互相转换,建议自己封装一个工具类
-
尽量指定初始化容量,如果确定不了,默认指定为16
-
使用泛型,数据的类型的时候,一定要使用引用数据类型。
-
-
List集合中存放的数据
- 数据有顺序(添加的先后顺序)
- 数据可以重复
原文地址:https://www.cnblogs.com/gycddd/p/16555630.html
- 云数据服务蜂拥而至...好难选呀
- ASP.NET MVC的Razor引擎:View编译原理
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
- 通过Knockout.js + ASP.NET Web API构建一个简单的CRUD应用
- 自动驾驶车辆在2017年的七大光辉历史时刻
- 简单的实现Javascript的MVC
- 谷歌再出黑科技!人工智能模拟的人声和真人几乎难以分辨
- 【Scikit-Learn 中文文档】高斯混合模型 - 无监督学习 - 用户指南 | ApacheCN
- “E+单拼”组合域名eqi.com小六位结拍
- ASP.NET Core中的依赖注入(3): 服务的注册与提供
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 | ApacheCN
- 哈萨比斯:2018年AI最大突破在生物或化学领域
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
- ASP.NET MVC的View是如何被呈现出来的?[设计篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python标准库之glob介绍
- Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
- 使用List中的remove方法遇到的坑,不信你没有踩过!
- python opencv 图像尺寸变换
- OpenCv保存图像
- 机器学习|KNN
- docker 查看容器日志
- consul配置ACL
- CentOS7.5更改python版本后及yum不能用的解决办法,非编译!
- nginx 配置websocket
- PostgreSQL10分区表性能研究报告
- linux文件目录管理基本命令总结
- Linux中的硬链接与软链接?
- linux中实现灵活的特殊权限管理ACL,以及ACL权限判断顺序!
- 高并发下如何保证接口的幂等性?