![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 69
vid。
出走半生,归来仍是少年;遍历山河,仍觉人间值得
展开
-
二叉树的应用(堆排序)
堆排序基本介绍① 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。② 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。③ 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆④ 大顶堆举例说明我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子:大顶堆特点:arr[i] >= arr[2*i原创 2022-01-24 09:42:29 · 98 阅读 · 0 评论 -
线索化二叉树
先看一个问题将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树.问题分析:① 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 }② 但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上.③ 如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办?解决方案-线索二叉树线索二叉树基本介绍① n个结点的二叉链表中含有n+1 (公式 2n-(n-1)=n+1)个空指针域。利用二叉链表中的空原创 2021-12-28 21:41:51 · 924 阅读 · 1 评论 -
位运算以及逻辑运算
二进制中的原码、反码、补码要了解位移运算符我们就要先来了解 原码、反码、补码有符号数:对于有符号数而言,符号的正、负机器是无法识别的,但由于正、负 “恰好是两种截然不同的状态,如果用"0’表示“正”,用"1"表示“负",这样符号也被数字化了,并且规定将它放在有效数字的前面,即组成了有符号数。所以,在二进制中使用最高位(第一位)来表示符号,最高位是0,表示正数,最高位是1,表示负数。10000000 00000000 00000000 01111100对于有符号数而言的性质:⑴ 二进制的最高位是原创 2021-11-10 22:36:48 · 1910 阅读 · 0 评论 -
顺序存储二叉树
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。顺序存储二叉树的特点:① 顺序二叉树通常只考虑完全二叉树② 第n个元素的左子节点为 2 * n + 1③ 第n个元素的右子节点为 2 * n + 2④ 第n个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素(按0开始编号 如图所示)、要求:二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 7]要求在遍历数组 arr时,仍然可以以前原创 2021-10-24 21:04:14 · 98 阅读 · 0 评论 -
二叉树实现
二叉树的概念① 树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。② 二叉树的子节点分为左节点和右节点。③ 如果该二叉树的所有叶子节点都在最后一层,并且结点总数= 2^n -1 , n 为层数,则我们称为满二叉树。④ 如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树。代码实现分析二叉树的前序,中序,后序的遍历步骤创建—颗二叉树前序遍历中序遍历后序遍历①先输出当.原创 2021-10-24 19:51:58 · 1289 阅读 · 0 评论 -
Hashtable
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的id时,要求查找到该员工的 所有信息.要求:不使用数据库,速度越快越好 → 哈希表(散列)添加时,保证按照id从低到高插入课后原创 2021-08-17 12:56:54 · 91 阅读 · 0 评论 -
队列及环形队列
队列队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)当我们将数据存入队列时称为”addQueue”,addQueue,的处理需要有两个步骤:思路分析① 将尾指针往后移: rear+1 ,当front == rear【空】② 若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据。rear == maxSize - 1[队列满]代码实现pu原创 2021-07-29 10:47:43 · 67 阅读 · 0 评论 -
稀疏数组-
比如我们用二维数组实现五子棋的时候,会有很多的无效数据,会占用很大的空间所以当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:① 记录数组一共有几行几列,有多少个不同的值② 把具有不通知的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模应用实现代码的实现:public class SparseArray { public static void main(String[] args) { // 1:表示黑子 2:表示原创 2021-07-27 16:20:09 · 44 阅读 · 0 评论 -
排序算法~
简单排序一、冒泡排序排序原理:1.比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。2. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。public class Bubble { public static void main(String[] args) { int[] a = { 5, 8, 4, 9, 10, 6 }; for (int i = 0; i <= a.length - 1; i++) {原创 2021-05-10 10:53:35 · 162 阅读 · 0 评论