数据结构与算法笔记(2)

开发工具与关键技术:VS
作者:LJR
撰写时间:2020年 05 月 18 日

5.1:数组
1.所谓数组,是有序的元素序列。
2.二维数组:一维数组的每个元素都是一维数组。
Map的基本操作包括:
1.增加键值对 put()
2.根据见获取值 get()
3. 根据键移除键值对 remove()

6.1:树
树形结构是一种应用十分广泛的非线性结构,客观世界中广泛存在的。

树的定义:
树由n(n>=0)个结点组成的有限集合T
如果n=0,称树为空;
如果n>0,则满足;
.有一个特定的称之为根(root)的结点,它只有直接后继,但没有前驱
.除根以外的其它结点划分为m(m>0)个互不相交的有限集合T1,T2……Tm,每个集合又是一颗树,并且称之为根的子树(subTree)。
每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。

树的基本术语:
节点(node)包含一个数据元素及若干个指向其子树的分支
节点的度(degree)节点的子树的个数
树的度(degree)树中节点度的最大值
叶子(leaf)度为零的节点
分支(branch)度不为零的节点
孩子(child)某节点的各子树的根
双亲(parent)该节点的直接前驱节点
兄弟(sibling)具有相同双亲的节点
有序树和无序树 如果树中每个节点的各子树是从左到右有次序
森林 m(m>=0)根互不相交的树的有限集合
.树的深度:树中所有节点的最大层数,也称高度

由于子树的互不相交性,树中每个节点只属于一颗树(子树),且树中的每一个结点都是该树中某一颗子树的根。
在不同的应用场合,可以用不同的方法来表示树,常用的方法有一下几种:
(1) 直观(树形,倒置树)树的形状像一颗倒立的树
(2) 嵌套集合 用集合表示结点之间的层次关系对于其中任意两个集合,或者不相交,或者一个集合包含另一个集合
(3) 凹入(缩进)表示法 类似于书的目录,用结点逐层缩进的方法表示树中各结点之间的层次关系
(4) 广义表(嵌套括号)表示法 用于括号的嵌套表示结点之间的层次关系,主要用于树的理论描述。

6.2:二叉树
二叉树是最简单的树形结构,所有的一般树都可以转换为二叉树,转换后的二叉树也能按一定规则还原为一般树。
定义:二叉树是树形结构中的一种最典型、最常用的结构,处理起来比一般树简单,而且树也可以很容易地转换成二叉树。
二叉树是n(n>=0)个结点的有限集合BT,它或者是空集,或者由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树组成。

二叉树的基本操作:
(1) 初始化InitTree(BT):将二叉树BT初始化为一颗空树。
(2) 判断二叉树是否为空TreeEmpty(BT):判断一颗树BT是否为空,若为空,返回真否则返回假。
(3) 求根结点Root(BT):返回树BT的根结点
(4) 求双亲结点Parent(BT,x):返回二叉树BT中x的双亲结点,如果x为根结点,则返回空。
(5) 求二叉树的高度Depth(BT):返回二叉树BT的高度(深度)。
(6) 求结点的左孩子LChild(BT,x):返回二叉树BT中结点x的左孩子结点,若结点x为叶子结点或x不在二叉树BT中,则返回值为“空”。
(7) 求结点的右孩子RChild(BT,x):返回二叉树BT中结点x的右孩子结点,若结点x为叶子结点或x不在二叉树BT中,则返回值为“空”。
(8) 遍历二叉树Traverse(BT):从根结点开始,按照一定的次序访问二叉树BT中所有的结点。

6.3:二叉树的遍历
遍历二叉树:以某种次序访问二叉树中的每个结点,且每个结点仅被访问一次
访问:如查询结点数据域的内容、输出结点的数据、修改结点的数据或是执行对结点的其它操作。
二叉树的定义:
一颗二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。每个结点最多只有两个孩子。

二叉树的链式存储结构:
最常用的是二叉链表的三叉链表
二叉链表的每个结点有一个数据域和两个指针域,
一个指针指向左孩子,另一个指向右孩子。
哈夫曼树的基本概念:
路径长度:两个结点之间的路径长度是链接两结点的路径上的分支数
树的路径长度:根结点到个结点的路径长度之和
7.1:图:
1.图结构是一种比树形结构更复杂的非线性结构,任意一个结点都可以有任意多个前驱和后继。图结构是一种重要的数据结构。
定义:图是有由顶点集合及顶点间的关系集合组成的一种数据结构。
Graqh=(V,E)
其中 V是顶点的有穷非空集合;E是顶点之间关系的有穷集合,也叫边集合。
2.图的基本术语:(1.邻接点、2.顶点的度、入度的出度、3.完全图、稠密图、稀疏图4.子图、5.路径、6.连通图、连通分量、7.强连通图、强连通分量、8.权、网)
3.邻接矩阵概念
邻接矩阵这种存储结构采用两个数组来表示图,一个是一维数组,存储图中的所有顶点的信息:另一个是二维数组,即邻接矩阵,存储顶点之间的关系。

8.0查找:
静态查找是指在静态查找表上进行的查找操作,查找满足条件的数据元素的存储位置或各种属性。
一、顺序查找
基本思想:1.查找表的存储结构是线性表(顺序表或链表)
2.查找过程是依次用查找条件中给定的值与查找表中数据元素的关键字值进行比较。
二、折半查找
折半查找只适合用于对有序顺序表进行查找。
折半查找的基本思想是:

  1. 每进行一次折半查找,要么查找成功,结束查找,要么将范围缩小一半,如此重复
  2. 直到查找成功或查找范围缩小为空即查找失败为止。
    小结:
  3. 二分查找算法平均查找长度为log2n,比较次数少,查找速度快。
  4. 只能应用于有序的顺序表
  5. 二分查找适用于那种一经建立就很少改动,而又经常用需要查找的顺序表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值