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