数据结构与算法
文章平均质量分 89
数据结构与算法
逆流°只是风景-bjhxcc
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
树形结构——二叉树
二叉搜索树:当一个节点有左子节点时,左子树上的所有节点一定小于它,同时当一个节点有右子节点时,右子树上的所有节点一定大于它,这个树称之为二叉搜索树,或者二叉查找数。通过这个特殊的约定,我们得到了一个规律性很强的树形结构,给我们做进一步的搜索查找提供了很大的便利。前面的章节我们介绍了两种重要的数据结构,数组和链表,由于他们各自的特性使得他们的优缺点非常分明,在查询速度和插入速度上顾此失彼,不能兼顾,那么有没有一种数据结构可以同时高效的完成插入和查询操作呢,答案当然是肯定的,今天我们就来了解 —— 树结构。原创 2023-01-04 14:55:43 · 489 阅读 · 0 评论 -
冒泡排序实现原理
冒泡排序(Bubble Sort),是一种比较简单的排序算法。它重复地走访要排序的元素列,依次比较两个相邻的元素,如果它们的顺序错误,则把它们交换位置。走访元素重复地进行,直到没有相邻元素需要交换为止,完成整个排序过程。本文介绍了一种非常简单的排序方法——冒泡排序。冒泡排序就是把小的元素往前调,或者把大的元素往后调,交换发生在相邻的两个元素之间,走访元素重复地进行,直到没有相邻元素需要交换为止,完成整个排序过程。相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。原创 2023-07-20 23:17:06 · 537 阅读 · 0 评论 -
【算法】常见的加密算法及实现
数字签名、信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。原创 2023-06-03 12:00:00 · 1328 阅读 · 0 评论 -
【数据结构与算法】常见排序算法
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。算法复杂度。原创 2023-05-19 10:09:16 · 456 阅读 · 0 评论 -
【数据结构】散列表(哈希表)
让我们想一下,若在手机通信录中查找一个人,那我们应该不会从第 1 个人一直找下去,因为这样实在是太慢了。我们其实是这样做的:首先看这个人的名字的首字母是什么,比如姓张,那么我们一定会滑到最后,因为“Z”姓的名字都在最后。还有在查字典时,要查找一个单词,肯定不会从头翻到尾,而是首先通过这个单词的首字母,找到对应的那一页;再找第 2 个字母、第 3 个字母……这样可以快速跳到那个单词所在的页。其实这里就用到了散列表的思想。散列表(hash table),我们平时叫它哈希表或者Hash 表,你肯定经常听到它。原创 2023-05-18 22:15:32 · 662 阅读 · 0 评论 -
【数据结构】堆(Heap)
基本概念:1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。2、满二叉树:满二叉树是一种特殊的的完全二叉树,所有层的结点都是最大值。int size;} heap;原创 2023-05-18 21:16:21 · 653 阅读 · 0 评论 -
【数据结构】常见数据结构汇总
数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的,但是我们可以使用指针等道具,构造出类似“树形”的复杂结构。下面介绍八个常见的数据结构。原创 2023-05-18 21:25:02 · 927 阅读 · 2 评论 -
【算法】求最短路径算法
从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径。解决最短路径的问题有以下算法:Dijkstra算法,Bellman-Ford 算法,Floyd 算法和 SPFA 算法等。迪杰斯特拉算法(Dijkstra 算法)是典型最短路径算法,用于计算一个节点到其它节点的最短路径,它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。该算法的时间复杂度为 O(ElogV),其中 E 为边数,V 为节点数。原创 2023-05-01 05:54:56 · 4426 阅读 · 0 评论 -
【算法】一文彻底搞懂ZAB算法
ZAB的全称是 Zookeeper Atomic Broadcast (Zookeeper原子广播)。Zookeeper 是通过 Zab 算法来保证分布式事务的最终一致性。Zab协议是为分布式协调服务Zookeeper专门设计的一种 支持崩溃恢复 的 原子广播协议 ,是Zookeeper保证数据一致性的核心算法。Zab借鉴了Paxos算法,但又不像Paxos那样,是一种通用的分布式一致性算法。它是特别为Zookeeper设计的支持崩溃恢复的原子广播协议。原创 2023-04-30 07:02:49 · 1936 阅读 · 0 评论 -
【数据结构与算法】四种负载均衡算法
一般来说,我们在设计系统的时候,为了系统的高扩展性,会尽可能的创建无状态的系统,这样我们就可以采用集群的方式部署,最终很方便的根据需要动态增减服务器数量。但是,要使系统具有更好的可扩展性,除了无状态设计之外,还要考虑采用什么负载均衡算法,本文就带领大家认识以下常见的4种负载均衡算法。负载均衡是指多台服务器以对称的方式组成一个服务器集群。每台服务器的地位相当(但不同的服务器可能性能不同),可以独立提供服务,无需其他服务器的辅助。原创 2023-04-08 22:56:12 · 495 阅读 · 2 评论 -
【数据结构与算法】查找(Search)【详解】
顺序查找(Sequential Search) 又叫线性查找,是最基本的查找技术,作为一种最直观的查找方法,其基本思想是从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表的另一端,但还没有查找到符合给定条件的元素,则返回查找失败的信息。若左子树非空,则左子树上所有结点的值均小于根结点的值。若右子树非空,则右子树上所有结点的值均大于根结点的值。左、右子树也分别是一棵二叉排序树。原创 2023-03-28 16:45:05 · 4526 阅读 · 0 评论 -
【数据结构与算法】图(Graph)【详解】
图(Graph)是由顶点的有穷非空集合V ( G ) 和顶点之间边的集合E ( G )组成,通常表示为: G = ( V , E ) ,其中,G表示个图,V 是图G中顶点的集合,E是图G中边的集合。若V = { v 1 , v 2 , . . . , v n } ,则用∣ V ∣表示图G中顶点的个数,也称图G的阶,E = { ( u , v ) ∣ u ∈ V , v ∈ V } ,用∣ E ∣表示图G中边的条数。注意:线性表可以是空表,树可以是空树,但图不可以是空图。原创 2023-03-25 20:56:52 · 7503 阅读 · 5 评论 -
【数据结构与算法】树(Tree)【详解】
【知识框架】树是n(n>=0)个结点的有限集。当n = 0时,称为空树。有且仅有一个特定的称为根的结点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。树中所有结点可以有零个或多个后继。因此n个结点的树中有n-1条边。原创 2023-03-25 06:15:00 · 6754 阅读 · 1 评论 -
【数据结构与算法】线性表--栈和队列(Stack & Queue)【详解】
栈(Stack)是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶(Top):线性表允许进行插入删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。空栈:不含任何元素的空表。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构递归是一种重要的程序设计方法。简单地说,若在一个函数、过程或数据结构的定义中又应用了它自身,则这个函数、过程或数据结构称为是递归定义的,简称递归。原创 2023-03-25 00:00:00 · 2009 阅读 · 0 评论 -
【数据结构与算法】线性表--数组
常见的数据结构如下图,本文主要讲解数据结构线性表--数组。Java ArrayList无法存储基本数据类型,比如int,Long,需要封装为类,而择优一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,既可以选用数组。如果数据大小事先已知,并且对数据的操作非常简单,用不用到ArrayList提供的大部分方法,也可使用 数组。当要表示多维数组时,用数组往往会更加直观。比如Object[][] array;原创 2023-03-24 21:00:00 · 2255 阅读 · 0 评论 -
【数据结构】线性表--list(详解建议收藏)
零个或多个数据元素的有限序列。线性表的数据集合为{a1,a2,…,an},假设每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件顺序表可以顺序存取,也可以随机存取,链表只能从表头顺序存取元素。原创 2023-03-24 18:00:00 · 1814 阅读 · 0 评论 -
【数据结构与算法】什么是双向循环链表?以及实现过程
线性表是我们最常用的一种数据结构,线性表包含顺序表和链表,顺序表典型应用就是我们常用的ArrayList,链表的典型应用其中就有我们常用的LinkedList。LinkedList他的底层就是使用链表来存储数据元素的。这篇文章用以总结链表中的双向循环链表,为单链表的结点增加一个指向前驱的指针域,单链表就变成了双链表,将双链表的头尾相连,双链表就成了双向循环链表。链表的缺点线性表的两种实现顺序表、链表。原创 2023-03-24 15:00:00 · 811 阅读 · 2 评论 -
【数据结构与算法】单向循环链表(增加元素、删除元素、打印循环链表等功能)
实现一个循环链表(单链表),具备增加元素、删除元素、打印循环链表等功能。原创 2023-03-24 09:00:00 · 313 阅读 · 0 评论 -
【数据结构与算法】什么是双向链表?并用代码手动实现一个双向链表
我们来看一下这个例子:在一个教室里,所有的课桌排成一列,如图相信在你们的读书生涯中,老师肯定有要求你们记住自己的前后桌是谁。所以该例子中,老师就要求学生们记住自己的前后桌,其中坐在第一排的学生需要记住自己是第一排的学生以及自己的后桌是谁;最后一排的学生要记住自己的前桌是谁以及自己是最后一排的学生。如图:这一列座位就相当于一个双向链表。假如有一天,老师还没记住每个学生的名字,于是就问:这一列第三个人叫什么名字?原创 2023-03-24 12:00:00 · 278 阅读 · 0 评论 -
【数据结构与算法】什么是链表?并用代码手动实现一个单向链表
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。链表:使用多个不连续的内存空间去存储数据, 可以 节省内存资源(只有需要存储数据时,才去划分新的空间),对数据的增删比较方便。int a[5]={1,2,3,4,5} 突然我想继续加两个数据进去,但是已经定义好的数组不能往后加,只能通过定义新的数组。int b[7]={1,2,3,4,5,6,7} 这样就相当不方便比较浪费内存资源,对数据的增删不好操作。原创 2023-03-23 20:28:35 · 348 阅读 · 0 评论 -
树形结构——红黑树
在 JDK1.8 之后,HashMap 的底层是由数组、链表、红黑树来实现的,当数组长度到 64 的时候,或者链表长度到 8 的时候,会调用 treeifyBin 转换为红黑树实现。有子节点的时候我们要先找到替换节点,如果只有一个子节点,这个节点就是替换节点;为了保证树的平衡,我们需要在添加或删除元素的时候不断的调整树的结构,使每个节点的左右子树上的节点个数尽可能相等。右旋:拎起右旋节点的左子节点,使右旋节点向右下沉,成为左子节点的右子节点,左子节点上升成为其父节点。① 如果是空树,直接插入到跟节点;原创 2023-01-04 15:23:25 · 220 阅读 · 0 评论 -
数据结构教程
数据结构(英语:data structure)是计算机中存储、组织数据的方式。数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。不同种类的数据结构适合于不同种类的应用,而部分甚至专门用于特定的作业任务。例如,计算机网络依赖于路由表运作,B 树高度适用于数据库的封装。随着应用程序变得越来越复杂和数据越来越丰富,几百万、几十亿甚至几百亿的数据就会出现,而对这么大对数据进行搜索、插入或者排序等的操作就越来越慢,数据结构就是用原创 2023-01-04 11:27:43 · 610 阅读 · 0 评论 -
数据结构与算法学习——栈结构
说明:在这里主函数首先初始化栈结构,然后循环进行入栈操作,添加数据结点,当输入值全部为0 时则退出结点添加的进程。在程序中,可以定义一个指定大小的结构数组来作为栈,序号为0的元素就是栈底,再定义一个变量top保存栈顶的序号即可。说明:在这里,输入参数s为一个指向操作的栈的指针,输入参数data是需要入栈的数据元素。程序中首先判断栈是否溢出,如果溢出则不进行入栈操作,否则修改栈顶指针的值,再将元素入栈。读结点数据的操作仅是显示栈顶结点数据的内容,而出找操作则将栈顶数据弹出,该数据不再存在。原创 2023-01-04 08:07:00 · 472 阅读 · 0 评论