数据结构
文章平均质量分 67
普通网友
这个作者很懒,什么都没留下…
展开
-
数据结构:堆(建堆和堆排序的python实现)
前言这次我首先告诉大家堆的应用领域:TopK问题 、堆排序 、优先队列实现等为什么这次要先告诉大家,因为这次希望先思考和结合下你们刷题或者面试的过程中,是否实现和解决过上述问题,也许不是用堆的原理解决的,但都可以更快的加深你对堆这一概念的理解,那废话不多说,我们开始吧堆**堆栈:**这两个词虽然经常被放在一起说,但是其实它俩在数据结构和算法中都有不同形式的体现栈是用数据结构来实现的一种算法:数组,链表均可堆也是用数据结构来实现的一种算法:树,数组均可1.堆本身是一棵完全二叉树,下图记录了完全二原创 2021-05-26 17:35:38 · 789 阅读 · 7 评论 -
算法:BFS(广度优先遍历)和DFS(深度优先遍历)
前言:在我的文章中介绍了二叉树,B+树,红黑树以及简单提到的AVL树,是不是所以的树都少不了一个方法,遍历全部节点,那遍历全部节点的方法底层到底是什么原理呢,下面就要给大家介绍咯BFS算法和DFS算法在介绍算法之前,大家先简单观察一下下图这颗二叉树,是不是很简单,下面的算法我们基于这颗树来为大家简单的概括BFS和DFS算法BFS:广度优先遍历从根节点开始一层一层,从左向右依次遍历,也就是637258原理思路:使用了队列先进先出的原理,先进去的节点先出来,并且每个节点假如有左右子树,都会在队列末原创 2021-05-25 18:58:15 · 324 阅读 · 8 评论 -
数据结构:手撕红黑树(python方式)
前言:不知道同学有没有看完昨天的B树和B+树,虽说那个B+树在面试中很少被要求手写,但是有一个常考的考点,红黑树,可以一个经常被问到的知识噢,那么今天,我就来跟大家一起手撕红黑树!红黑树说到红黑树不得不先提一下AVL树(平衡二叉搜索树),不了解AVL树的同学可以自行查询相关文献,然后回来以后,请回答我的两个问题:红黑树和AVL树的区别是什么?1.附上红黑颜色属性,通过颜色控制树的平衡2.相对于AVL树来说,没有那么严格的要求平衡3.插入和删除的复杂度和次数较AVL来说,跟随着数量节点的增大,越原创 2021-05-24 18:49:40 · 825 阅读 · 3 评论 -
数据结构:B树和B+树,以及B+树在mysql索引中应用
前言:在学习B树和B+树以及后面红黑树的过程中,建议大家先从基础的二叉树开始学起,最好可以手写一颗二叉搜索树,然后学习AVL树也就是平衡二叉搜索树,学习是一个循序渐进的过程,大家不要急于求成,文章是学习者基于自己对知识的认知总结分享的,但是对于读者来说,它只是辅助的作用,深入学习是非常有必要自己经历的一个过程。B树特点:多叉搜索树,在原有平衡二叉搜索树的基础上,支持同一节点多颗子树,同时满足平衡二叉树多特点。B+树B+树是本文的重点内容,相信大家在面试中经常被问到B树和B+树的区别,下面会给大家原创 2021-05-23 17:52:45 · 630 阅读 · 5 评论 -
数据结构:基于Python的二叉搜索树实现,以及前中后序遍历
二叉搜索树(BST)在学习本篇之前,需要从书籍或者资源中了解下二叉树的基本结构,以及特点。二叉树包括:根结点,左子树,右子树二叉树的基础遍历方式分为三种:遍历方式遍历顺序前序遍历根 左子树 右子树中序遍历左子树 根 右子树后序遍历左子树 右子树 根特点:结点的左子树一定小于当前结点的值,右子树一定大于当前结点的值知道以上的内容,那我们下面基于这个特点,来构建一棵二叉搜索树,抛弃暴力建树过程,用优雅的方式体验算法的奥妙Python实现二叉搜索树# 树节原创 2021-05-21 16:45:14 · 137 阅读 · 0 评论 -
数据结构:基于python的栈实现
栈特点:先进后出新手可以先学习下栈的概念,然后从实例中理解栈的应用栈的应用(引用此文)Python实现栈# 双端队列(链表式)实现栈# 继承双端队列,即可简单通过链表形式实现栈,看不懂的同学可以温习我的文章双端队列和双端循环链表的实现# 底层其实就是已链表形式实现进栈出栈from queue import DoubleQueueclass Stack(DoubleQueue): def push(self, value): self.queue_append(原创 2021-05-08 16:26:32 · 106 阅读 · 0 评论 -
数据结构:基于python的队列实现
队列特点:先进先出队列实现方式:顺序队列基于数组实现:可以给队列设置最大长度限制,假如队列长度超出最大限度,可以基于拒绝反馈,可以有效避免多请求等待的情况链式队列基于链表实现:链式队列可以无限拓展队列长度,对于快速得到响应的系统不太适用队列的理解可以参考这位博主概解Python实现队列# 数组实现队列class Queue(object): def __init__(self, max_length=10): self.max_length = max_原创 2021-05-07 18:06:05 · 93 阅读 · 0 评论 -
数据结构:循环双向链表以及用python实现循环双向链表
循环双向链表前情提要:通过上文,了解相信大家已经简单了解了单链表的结构,本文主要介绍循环双向链表,简单说就是双向链表和循环链表的结合,为什么把它放在一起实现呢,因为总体而言,循环双向链表基本解决了各类链表的弊端,实用性较强。图解:下图即是循环双向链表,从图中可以看出,它与单链表的区别,每个结点多了一个指针,指向了前驱结点,也就是上一个结点,而另一个指针则指向了后继结点,即下一个结点,并且头结点与尾结点互连形成循环名词:名词概念前驱结点当前结点prev指针指向的结点后原创 2021-04-26 18:07:34 · 483 阅读 · 0 评论 -
数据结构:简单理解单链表,python实现单链表
单链表特点:结点中只包含一个指针域,且首尾不连接图解:名词:名词概念头指针指向链表中第一个结点(或为头结点、或为首元结点)的指针头结点在链表的首元结点之前附设的一个结点;数据域内只放表长等信息,它不计入表长度。其作用是统一空表、和非空链表的形式首元结点(开始结点)指链表中存储线性表第一个数据元素a1的结点尾结点(结束结点)指链表中最后一个结点,尾指针指向NULL大家要明白,链表解决的是我们开发中的什么问题?数组在插入和删除的时候,需要原创 2021-04-26 14:46:24 · 242 阅读 · 1 评论 -
数据结构:时间复杂度和空间复杂度如何理解,程序中如何计算
掌握算法5大特性(运用到程序的解释):有穷性: 程序要可以执行完,不能进入死循环确定性: 程序所得的结果就是这个方法定义的,不能要A得B可行性: 程序可以通过基本运算正常执行成功,不能出现1/0违背数学的情况有输入:有参数有输出:有返回值不符合上述情况的我们可以称作是程序,但不代表它是算法!时间复杂度首先从图中了解常用时间复杂度的一个大小:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2^n)<O(n!)原创 2021-04-23 18:54:13 · 354 阅读 · 0 评论 -
数据结构:如何将二元组转化为实际代码,应用于开发
什么是二元组?(建议看之前先补一下二元组的基础,很简单)逻辑结构的二元组表示:B=(D,R)白话翻译:二元组其实就是用来表示线性结构(数组)和非线性结构(树,图)等用二元组来表示这些数据元素之间的实际关系那如何将二元组这一概念实际在代码中体现呢?比如现在有一个数组[2,3,4,10,9,27]你如何告诉别人,这个数组现在的一个存储顺序,白话是这样的:2在3前面,3在2后面3在4前面,4在3后面4在10前面,10在4后面…那在代码中,你应该咋体现呢?二元组中一般包含两个基础集合b=原创 2021-04-22 18:51:40 · 311 阅读 · 0 评论