数据结构与算法
文章平均质量分 80
学习数据结构与算法
但盼风雨来 能留你在此
这个作者很懒,什么都没留下…
展开
-
数据结构与算法(九)—— 图(无向图)
在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。1、图的定义及分类图是由一组顶点和一组能够将两个顶点相连的边组成的1 . 自环:即一条连接一个顶点和其自身的边;2. 平行边:连接同一对顶点的两条边;图的分类:按照连接两个顶点的边的不同,可以把图分为以下两种:无向图:边仅仅连接两个顶点,没有其他含义;有向图:边不仅连接两个顶点,并且具有方向;2、无向图1、图的...原创 2021-08-11 20:50:05 · 7588 阅读 · 0 评论 -
数据结构与算法(七)—— 树的进阶(一)
1、平衡树之前我们学习过二叉查找树,发现它的查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但不幸的是,在最坏情况下,二叉查找树的性能还是很糟糕。例如我们依次往二叉查找树中插入9,8,7,6,5,4,3,2,1这9个数据,那么最终构造出来的树是长得下面这个样子:我们会发现,如果我们要查找 1这个元素,查找的效率依旧会很低。效率低的原因在于这个树并不平衡,全部是向左边分支,如果我们有一种方法,能够不受插入数据的影响,让生成的树都像完全二叉树那样,那么即使在最坏情况下,原创 2021-07-19 20:40:47 · 90 阅读 · 0 评论 -
数据结构与算法(八)—— 并查集
并查集是一种树型的数据结构 ,并查集可以高效地进行如下操作:查询元素 p和元素q是否属于同一组 合并元素 p和元素q所在的组1、并查集结构并查集也是一种树型结构,但这棵树跟我们之前讲的二叉树、红黑树、B树等都不一样,这种树的要求比较简单:每个元素都唯一的对应一个结点; 每一组数据中的多个元素都在同一颗树中; 一个组中的数据对应的树和另外一个组中的数据对应的树之间没有任何联系; 元素在树中并没有子父级关系的硬性要求;2、实现构造方法实现初始情况下,每个元素都...原创 2021-07-22 10:25:40 · 102 阅读 · 0 评论 -
数据结构与算法(七)—— 树的进阶(二)
1、B-树前面我们已经学习了二叉查找树、2-3树以及它的实现红黑树。2-3树中,一个结点做多能有两个key,它的实现红黑树中使用对链接染色的方式去表达这两个key。接下来我们学习另外一种树型结构B树,这种数据结构中,一个结点允许多于两个key的存在。B树是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插入和删除等操作。B 树的特性B树中允许一个结点中包含多个key,可以是3个、4个、5个甚至更多,并不确定,需要看具体的实现。现在我们选择一原创 2021-07-21 09:40:06 · 156 阅读 · 0 评论 -
数据结构与算法(六)—— 优先队列
1、概述普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就可以使用一种特殊的队列来完成这种需求,优先队列。优先队列按照其作用不同,可以分为以下两种:原创 2021-07-14 08:55:13 · 276 阅读 · 1 评论 -
数据结构与算法(五)—— 堆
1、认识堆堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。堆的特性:1、它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。2. 它通常用数组来实现。具体方法就是将二叉树的结点按照层级顺序放入数组中,根结点在位置1,它的子结点在位置2和3,而子结点的子结点则分别在位置4,5,6和7,以此类推。结论:如果一个结点的位置为k,则它的父结点的位置为[k/2],而它的..原创 2021-07-09 20:23:24 · 173 阅读 · 1 评论 -
数据结构与算法(四)—— 树的入门(二)
1、二叉树的基础遍历很多情况下,我们可能需要像遍历数组数组一样,遍历树,从而拿出树中存储的每一个元素,由于树状结构和线性结构不一样,它没有办法从头开始依次向后遍历,所以存在如何遍历,也就是按照什么样的搜索路径进行遍历的问题。我们把树简单的画作上图中的样子,由一个根节点、一个左子树、一个右子树组成,那么按照根节点什么时候被访问,我们可以把二叉树的遍历分为以下三种方式:1.前序遍历:先访问根结点,然后再访问左子树,最后访问右子树2.中序遍历:先访问...原创 2021-07-06 20:49:27 · 106 阅读 · 1 评论 -
数据结构与算法(四)—— 树的入门(一)
目录1、认识树1、树的定义2、树的相关术语3、二叉树的定义2、创建二叉查找树(链表)插入方法的实现查询方法 get实现思想:删除方法delete实现思想:3、查找最值1、认识树1、树的定义树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。.原创 2021-06-21 22:40:44 · 157 阅读 · 0 评论 -
数据结构与算法(三)—— 符号表
1、符号表的定义符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。符号表中,键具有唯一性。实际应用:2、符号表实现package xianxing;//符号表public class SymbolTable<Key, Value> { private Node head; private int N; private class Node{原创 2021-06-18 22:05:11 · 236 阅读 · 2 评论 -
数据结构与算法(二)—— 线性表(二)
1、栈1、栈的概念栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。2、栈的实现Stack:package xianxing;import java.util.Iterator;public class Stack<T>原创 2021-06-15 22:11:23 · 55 阅读 · 2 评论 -
数据结构与算法(二)—— 线性表(一)
1、线性表概述线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。例:A B C D前驱元素:A在B前面,则称A是B的前驱元素后继元素:B在A后面,则称B是A的后继元素线性表的特征:数据元素之间具有一种“一对一”的逻辑关系。1 . 第一个数据元素没有前驱,这个数据元素被称为头结点; 2. 最后一个数据元素没有后继,这个数据元素被称为尾结点; 3. 除了第一个和最后一个数据元素外,其他数...原创 2021-06-01 22:52:36 · 180 阅读 · 3 评论 -
数据结构与算法(一)—— 排序(二)
排序(一):https://blog.csdn.net/weixin_56697114/article/details/116431495原创 2021-05-19 22:16:38 · 116 阅读 · 0 评论 -
数据结构与算法(一)——排序(一)
1、冒泡排序原理:比较相邻两个元素,大的放在后面例:此题时间复杂度为:O((n-1)^2)=O(25)package paixu;import java.util.Arrays;//冒泡排序法public class Maopao { public static void main(String[] args) { //初始数组 int[] a = {6,5,4,3,2,1}; for(int i=0; i<a.length-1;i++) { for(原创 2021-05-10 21:54:00 · 115 阅读 · 1 评论