数据结构
文章平均质量分 66
介绍一些基本数据结构
林立可
加点油呢!路还有那么长!
展开
-
【数据结构】4,树的基本概念及基本操作
树结构通常由一个父结点和若干子结点构成。它的查询和增删效率都非常高。任何一颗多叉树都能转换为二叉树的形式,所以研究二叉树不失一般性。原创 2021-12-24 22:30:28 · 294 阅读 · 1 评论 -
【数据结构】十大排序算法的分析与实现
排序算法 排序算法可以分为内部排序和外部排序。内部排序即在内存中完成,不需要额外的空间;也可以分为比较排序和非比较排序。下图是常见的十种排序算法的性能对比。稳定性是基于排序是否改变原始元素的相对位置做判断的。 1,冒泡排序 冒泡排序采用相邻元素两两对比,如果顺序有误就交换他们的顺序,这样一轮下来,最大或最小元素就会交换到最顶端。由于形式极其像一次次的冒泡,我们称之为冒泡排序。下面演示从小到大排序的情况: /** * 冒泡排序:优化:如果一趟排序中没有发生冒泡,说明数组已经有序即可退出循环原创 2021-11-24 20:19:26 · 705 阅读 · 2 评论 -
【数据结构】3,链表的概念及其基本操作的实现
3,链表 链表是一种以结点的形式存储数据的结构,而结点通常由数据域(data)和指针域(next)组成,分别用于存放数据和指向下一个结点位置。 常见的,有单链表、双链表、循环链表。 链表通常有带头结点和不带头结点两种。 为什么需要头结点? 没有头结点时,在最前面插入删除需要修改表头指针,在其他位置插入删除时修改前驱结点的next域,两种操作需要分别处理。因此为了操作统一,我们一般使用一个虚拟的头结点,它本身不存储数据。 3.1,单链表 单链表定义: public class Node{ T data;原创 2021-07-29 16:12:04 · 288 阅读 · 1 评论 -
【数据结构】2,数组及稀疏数组的使用
1,数组概念 数组是一种存储空间为连续型的数据结构。因此,数组在删除元素时较为复杂,查询元素时非常快速。注意删除的逻辑本质上是一种覆盖。 同时,数组也是一种最为简单的容器,只允许存储同种数据类型的元素,并且数组容量一旦确定,不可更改。 数组又可以分为一维数组和多维数组。常见的,矩阵就是一个二维数组。 数组的声明方式: int[] arr = new int{1,2,3}; String[] arr = new String[3][3]; int[] arr = {1,2,3}; 数组的初始化方式包括静态初原创 2021-07-09 15:16:43 · 157 阅读 · 0 评论 -
【数据结构】1,数据结构概念及复杂度分析
1,什么是数据结构? “数据结构(Data Structure)是数据对象、存在于该对象的实例以及组成实例的的数据元素之间的各种关系,并且这种关系可以通过定义相关的函数来给出。”-via《数据结构、算法于应用》。简单理解就是可以结构化表示的数据间关系。 “数据结构是抽象数据类型ADT的物理实现。”-via《数据结构与算法分析》。可见结构化数据的过程就是数据结构实现的过程。 我们再来分析一下里面的几个概念: 数据:数据是信息的载体,它应该能够被计算机识别、加工和存储。日常所见,数字、字符、图像、视频、声音原创 2021-07-09 14:27:27 · 165 阅读 · 0 评论 -
图概念以及深度优先搜索和广度优先搜索
9,图 图是一种能够表示多对多关系的数据结构。 图的创建及表示方式: 1)邻接矩阵:用二维数组表示顶点之间的关系; 2)邻接表:因为邻接矩阵的表示方式会把每个顶点都分配n个空间,造成空间浪费,采用数组+链表的方式。 9.1,图的遍历: 1)深度优先遍历(Deep First Search,DFS) 首先访问第一个结点的邻接结点,然后以该邻接结点作为初始结点,继续访问它的第一个邻接结点。它是一个递归的过程。每次访问后都需要做个标记。可以看到,访问策略是优先纵向往深度挖掘。 思路: 1,访问初始结点V,并标原创 2021-04-14 11:02:16 · 160 阅读 · 0 评论 -
赫夫曼树及赫夫曼编码的分步骤实现-超详细!
8.4,赫夫曼树 赫夫曼树是一种带权路径最短的二叉树。带权路径:根节点到所有叶子结点所需路径*结点权值之和。通常路径即为结点所在层数之差,所以权值越大结点离根结点越近。 赫夫曼树构建思路: 1,将数据按照权值从小到大顺序排列,每个数据结点都看作一个二叉树; 2,分别取出权值最小的两个二叉树组成新树,其权值为前两者之和; 3,再将新树加入排列中,重复1-2步骤,直到所有结点都被处理。 注意:所有的数据都存在了叶子结点上。 现使用java实现赫夫曼树的创建。 package com.lsk.tree;原创 2020-11-07 15:15:51 · 1448 阅读 · 0 评论 -
java实现线索二叉树的前序、中序、后续遍历
1,概念: 线索二叉树是为了解决普通二叉树中结点存在大量的空闲指针域的情况,而在空闲指针域上添加了指向前驱和后继的线索,因此称为线索二叉树。其和双向链表的原理有些相似,这样增加了二叉树的遍历能力。 线索二叉树由多个结点链接而成,结点具备左右指针域和数据域。当然这里的数据域为了便于展示我们设置了id和name两个属性.同时,在后面的遍历中,我们需要判断一个结点是否进行了左、右线索化,所以这里又设置了两个属性。 /** * 线索二叉树结点 */ class MyThreadedNode { pri原创 2020-07-23 21:24:47 · 631 阅读 · 0 评论