
数据结构
数据结构相关知识
小黑爱上排骨
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java版八大排序之堆排序
堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。时间复杂度:O (nlgn)堆排序的工作原理:假设序列有n个元素,先将这n建成大顶堆然后取堆顶元素,与序列第n个元素交换然后调整前n-1元素,使其重新成为堆然后再取堆顶元素,与第n-1个元素交换再调整前n-2个元素…直至原创 2020-05-20 12:05:32 · 262 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码
哈夫曼树的构建:设一个字符串为:“aasdf ghjkd hsgaf sfdga ahsjh g”步骤如下:首先找到每一个字母出现的次数作为该字母的权重将每一次找到权重最小的两个构建哈夫曼树按照左0右1的原则给字符串进行编码,由此编码可以读出该字符串。k,1 f,2 j,2 d,3 h,4 a,5 s,4 g,43....原创 2020-05-11 23:36:14 · 528 阅读 · 0 评论 -
二叉搜索树详解(Java版)
二叉查找树: 它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左,右子树也分别为二叉搜索树;没有键值相等的节点二叉树的特点:有链表的快速插入与删除操作的特点。又有数组快速查找的优势。二叉搜索树的应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。用Java来表示二叉树public class BinarySear原创 2020-05-13 09:50:53 · 697 阅读 · 0 评论 -
哈夫曼编码详解(Java实现,详细代码及解析)
哈夫曼编码过程以及实例:由上篇文章哈夫曼树与哈夫曼编码原理分析,设置一个字符串“aasdf ghjkd hsgaf sfdga ahsjh g”统计一下各字符出现的频率k,1 f,2 j,2 d,3 h,4 a,5 s,4 g,4字符kfjdhasg频次122345441.为以上每一个字符创建一个二叉树,并将其出现的频次存储在节点中,节点的数据结构定义为Node:public class Node { //只存储两个值 0,1 pri原创 2020-05-15 19:52:31 · 1586 阅读 · 0 评论 -
完全二叉树的深度优先、广度优先遍历的实现
**完全二叉树:**对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树;深度优先遍历实现方法:public static void show(Node tree){ System.out.println(tree.value); if (tree.right != null){ treeShow(tree.r原创 2020-05-16 11:42:07 · 685 阅读 · 0 评论 -
Java版八大排序之插入排序
插入排序:也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。时间复杂度:最坏的情况是待排序数组是逆序的,此时需要比较次数最多,为n`2具体实行如下图所示:(红色表示本次插入的数字)...原创 2020-05-20 10:15:02 · 309 阅读 · 0 评论 -
八大排序之快速排序
快速排序思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度:快速排序的平均时间复杂度也是O(nlog2n)。因此,该排序方法被认为是目前最好的一种内部排序方法。具体实行如下图所示:(圆圈内代表已经确定位置的数字,红色的代表本次的基准数)...原创 2020-05-20 10:15:29 · 413 阅读 · 0 评论 -
Java版八大排序之希尔排序
希尔排序:是插入排序的一种,又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是按照不同步长对元素进行插入排序,希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d原创 2020-05-20 10:24:50 · 289 阅读 · 0 评论 -
Java版八大排序之归并排序(附Java代码及详解)
文章目录希尔排序快速排序希尔排序快速排序归并排序:是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。归并排序比较占用内存,但却是一种效率高且稳定的算法。归并排序原理:把有序表划分成元素个数尽量相等的两半把两半元素分别排序把两个有序表合并成一个归并操作的工作原理如下:第一步:申请空间,使其大小为两原创 2020-05-20 11:15:28 · 472 阅读 · 0 评论 -
数组、链表、栈、队列基本概念和特点
**数组:**是在内存中是连续存储的,一旦申请内存完毕,就不许更改数组大小。可以通过数组下标操作访问数组在Java中(类c语言中 C、C++、JAVA、C#、python、go)数组都是存储的头地址 int a[] = new int[10]; int[] b = new int[10]; b=new int[7]; a[7] = 43;**链表:*...原创 2020-05-15 10:38:57 · 823 阅读 · 0 评论