随笔分类 -  07-数据结构和算法

摘要:什么是队列 队列是一种先进入的元素先出的线性表结构。这个特性正好和栈的特性相反。 我们知道,栈只支持两个基本操作:入栈 push()和出栈 pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一 阅读全文
posted @ 2021-05-31 14:10 程序员自由之路 阅读(332) 评论(0) 推荐(0) 编辑
摘要:栈简介 后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 看了上面的介绍,你会发现从功能上来说,数组或链表是可以替代栈的。但你要知道,特定的数据结构是对特定场景的抽象,而且,数组或链表暴露了太多的操作接口,操作上的确灵 阅读全文
posted @ 2020-12-09 11:17 程序员自由之路 阅读(477) 评论(0) 推荐(0) 编辑
摘要:1. 如果字符串是通过单链表来存储的,那该如何来判断是一个回文串 思路1:用快慢指针先找到中点,然后把后半段链表reversed,然后一个指针在头部,一个指针再中点,开始逐个比较,时间复杂度是O(n)。 思路2:遍历链表,同时将节点入栈;再次遍历链表,同时将元素出栈进行比较,时间复杂度O(n),空间 阅读全文
posted @ 2020-12-08 14:28 程序员自由之路 阅读(301) 评论(0) 推荐(0) 编辑
摘要:双向链表简介 单向链表只有一个方向,结点只有一个后继指针 next 指向后面的结点。而双向链表,顾名思义,它支持两个方向,每个结点不止有一个后继指针 next 指向后面的结点,还有一个前驱指针 prev 指向前面的结点。 从上图中可以看出来,双向链表需要额外的两个空间来存储后继结点和前驱结点的地址。 阅读全文
posted @ 2020-12-05 16:10 程序员自由之路 阅读(2701) 评论(0) 推荐(0) 编辑
摘要:单向链表简介 在底层结构上,单向链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。如下图所示,我们把这个记录下个结点地址的指针叫作后继指针 next。 从画的单链表图中,你应该可以 阅读全文
posted @ 2020-11-29 21:26 程序员自由之路 阅读(1223) 评论(0) 推荐(2) 编辑
摘要:现在很多计算机从业人员好像都陷入了一个怪圈:对于一些时髦的框架趋之若鹜,但也仅仅是处于会使用的层次。但是对于一些计算机的基础学科却不以重视。 其实像数据结构和算法、操作系统和计算机网络等基础学科是计算机从业人员必须掌握的知识,而且是学习性价比最高的知识。科技圈的新技术层出不穷,刚刚学会的一个框架没用 阅读全文
posted @ 2020-11-25 18:12 程序员自由之路 阅读(424) 评论(0) 推荐(0) 编辑
摘要:什么是数组 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。对于数组,你要掌握两个关键点。 1. 线性表 线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。 而与它相对立的概念是 阅读全文
posted @ 2020-11-25 18:11 程序员自由之路 阅读(1106) 评论(0) 推荐(0) 编辑
摘要:本文转载自:数据结构和算法之美 当我们设计了一个算法以后,往往会从时间和空间这两个维度来评判这个算法的优劣。执行时间越短,占用内存空间越小的算法,我们认为是更优的算法。 这篇文章的主题:复杂度分析就是用来分析算法时间和空间复杂度的。 为什么需要复杂度分析 你可能会有些疑惑,我把代码跑一遍,通过统计、 阅读全文
posted @ 2020-11-23 20:29 程序员自由之路 阅读(7619) 评论(2) 推荐(7) 编辑
摘要:1. 冒泡排序的基本思想 冒泡排序的英文Bubble Sort,是一种最基础的交换排序。其基本思想是:把相邻的元素两两比较,根据大小来交换元素的位置。 对于以上数组,一轮排序过程如下: 首先让5和8比较,发现5比8要小,因此元素位置不变。接下来让8和6比较,发现8比6要大,所以8和6交换位置。 按照 阅读全文
posted @ 2019-10-09 19:50 程序员自由之路 阅读(798) 评论(0) 推荐(0) 编辑
摘要:选择排序是一种我们平时常用的排序算法,它的核心思想是:每一轮选出最小者(或者是最大者)交换到数组的一侧,这种思路最大的优势是可以大量节省元素的交换次数(比如和冒泡排序相比)。 本博客参考自:漫画:什么是选择排序 1. 选择排序的原理图 2. 选择排序的代码实现 public class Select 阅读全文
posted @ 2019-10-08 19:46 程序员自由之路 阅读(1176) 评论(0) 推荐(0) 编辑
摘要:本文源地址: http://www.fullstackyang.com/...,转发请注明该地址或segmentfault地址,谢谢! 1. 背景知识 在网上已经有很多关于布隆过滤器的介绍了,这里就不再赘述,下面简单地提炼几个要点: 布隆过滤器是用来判断一个元素是否出现在给定集合中的重要工具,具有快 阅读全文
posted @ 2019-10-08 17:47 程序员自由之路 阅读(4643) 评论(0) 推荐(1) 编辑
摘要:本文转载自博客 1. 一致性Hash算法简介 一致性哈希算法是在1997年由麻省理工学院提出的一种分布式哈希(DHT)算法,其设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。 下面举一个传统Hash算法存在的问题 假定N为后台服务节点数,当前台携带关键字key发起请 阅读全文
posted @ 2019-09-27 15:57 程序员自由之路 阅读(4246) 评论(0) 推荐(0) 编辑
摘要:BitMap算法的核心思想是用bit数组来记录0-1两种状态,然后再将具体数据映射到这个比特数组的具体位置,这个比特位设置成0表示数据不存在,设置成1表示数据存在。 BitMap算在在大量数据查询、去重等应用场景中使用的比较多,这个算法具有比较高的空间利用率。 本文参考:漫画:BitMap算法 1. 阅读全文
posted @ 2019-09-27 11:41 程序员自由之路 阅读(13233) 评论(0) 推荐(0) 编辑
摘要:二叉查找树的一个局限性就是有可能退化成一个链表,这种情况下二叉查找树的效率就会急剧下降变成0(n)。而AVL树可以很好地解决BST的这种困境。本篇博客会介绍AVL树的基本特点和相关操作。 文章参考自博客:二叉树-你可能需要知道的知识点 1. 什么是AVL树 任何两个子树的高度差最大是1,这样的二叉树 阅读全文
posted @ 2019-09-23 22:51 程序员自由之路 阅读(1808) 评论(0) 推荐(0) 编辑
摘要:1. 什么是BST 对于二叉树中的每个节点X,它的左子树中所有项的值都小于X中的项,它的右子树中所有项的值大于X中的项。这样的二叉树是二叉查找树。 以上是一颗二叉查找树,其特点是: (1)若它的左子树不为空,则左子树上的所有节点的值都小于它的根节点的值; (2)若它的右子树不为空,则右子树上所有节点 阅读全文
posted @ 2019-09-22 16:27 程序员自由之路 阅读(2864) 评论(0) 推荐(2) 编辑
摘要:本博客记录下关于树和二叉树的基本概念。 本文主要转载自:二叉树-你可能需要知道这些 1. 什么是树 树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合。 如果n==0,树为空树。 如果n>0, 树有一个特定的结点,根结点。根结点只有直接后继,没有直接前驱。 除根结点以外的其他结点划分 阅读全文
posted @ 2019-09-22 15:41 程序员自由之路 阅读(5509) 评论(0) 推荐(2) 编辑
摘要:Hash表也叫散列表,是一种线性数据结构。在一般情况下,可以用o(1)的时间复杂度进行数据的增删改查。在Java开发语言中,HashMap的底层就是一个散列表。 1. 什么是Hash表 Hash表是一种线性数据结构,这种数据结构的底层一般是通过数组来实现的。在进行数据增删改查的时候,Hash表首先通 阅读全文
posted @ 2019-09-22 12:36 程序员自由之路 阅读(3187) 评论(0) 推荐(0) 编辑
摘要:本文主要总结下数组、链表、队列、栈的区别和联系。 其实将这四个数据结构放在一起比较不是非常合适: 联系: 这四种数据结构都是线性表数据结构。 区别: 数组与链表是更加偏向数据存储方式的概念,数组在连续的空间中存储数据,随机读取效率高,但是数据添加删除的效率较低; 而链表可以在非连续的空间中存储数据, 阅读全文
posted @ 2019-09-09 16:10 程序员自由之路 阅读(5330) 评论(0) 推荐(0) 编辑
摘要:本文先对队列进行介绍,然后给出队列的Java语言的实现。 本文转载自:http://www.cnblogs.com/skywang12345/p/3562279.html 队列的介绍 队列(Queue),是一种线性存储结构。它有以下几个特点: (01) 队列中数据是按照"先进先出(FIFO, Fir 阅读全文
posted @ 2019-09-09 15:43 程序员自由之路 阅读(522) 评论(0) 推荐(0) 编辑
摘要:本文主要介绍栈这种数据结构的原理。最后以Java语言实现栈这种数据结构。 文章转载自:https://www.cnblogs.com/skywang12345/p/3562239.html 栈的介绍 栈(stack),是一种线性存储结构,它有以下几个特点: 栈中数据是按照"后进先出(LIFO, La 阅读全文
posted @ 2019-09-06 15:58 程序员自由之路 阅读(395) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩