
数据结构和算法
Keep-Up
这个作者很懒,什么都没留下…
展开
-
数据结构与算法——二叉树基础
树在介绍二叉树之前,我们需要先明白什么是树,因为二叉树是树的其中一种,因为我们用的最多,所以我们大多都在学习和了解二叉树。树是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。树具有以下特点:每个节点都只有有限个子节点或无子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为多个不相交的子树树里面没有环路(cycle)树还有一些专用的术语和概念,原创 2020-09-08 09:40:36 · 266 阅读 · 0 评论 -
数据结构与算法——散列表
什么是散列表散列表(hash table),我们平时叫它哈希表或者Hash 表,你肯定经常听到它。散列表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。由定义我们可以知道,散列表用的是数组支持下标访问数据的特性,所以散列表是数组的一种扩展,有数组演化而来...原创 2019-06-24 12:17:36 · 350 阅读 · 0 评论 -
数据结构与算法——跳表
什么是跳表跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右边的示意图)。一开始时,算法在最稀疏的层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间。这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的元素为止。一...原创 2019-06-10 09:23:01 · 1104 阅读 · 0 评论 -
数据结构与算法系列——二分查找
二分查找算法的简单介绍今天我们来学习一下二分查找算法,也叫做折半查找算法。使用二分查找算法的前提是数据需要是有序的。二分查找的思想非常简单,很容易理解,就是每次取中间位置的数和要找的数作比较,通过判断是大还是小来重新选择中间位置,直到找到。但是在实际的应用中却并不简单,因为我们实际碰到的问题不会像一个排好序的数组,然后让我们找出其中是不是包含某一个数这么简单。简单的例子我们在生活中也会经常遇...原创 2019-05-19 13:46:08 · 456 阅读 · 0 评论 -
数据结构与算法系列——递归
递归的理解在学习数据结构和算法的过程中,递归可能是比较难理解的一个知识点,每次都试着用自己的大脑去把一步一步去想清楚,结果最后把自己都绕晕了。我们很多人都遇到过这种情况,读源码的时候,我们想弄清楚一个方法的具体实现,然后跟进去发现里边还有一个方法,然后我们又跟到新的方法里边,结果发现里边还有另一个新的方法……这样跟了一层又一层,终于到了最后一层没有再调用其他的方法,然后我们再一层一层返回去,最...原创 2019-04-13 18:15:31 · 342 阅读 · 0 评论 -
数据结构与算法系列——队列
什么是队列队列也是一种操作受限制的线性表,只允许在表的前端进行删除,也就是出队,而在表的后端进行插入,即入队。举一个生活中常见的例子,我们经常会遇到排队办事,先来的排在前边先办理,后来的排在后边,不允许插队。先进先出,这就是典型的队列。队列的实现队列的概念很容易理解,操作也比较简单,很容易掌握。跟栈一样,队列也能用数组和链表来实现,用数组实现的队列叫顺序队列,用链表实现的队列叫链式队列。...原创 2019-03-30 21:29:32 · 214 阅读 · 0 评论 -
数据结构与算法系列--十大排序(附动态图解)
本文转自公众号 「程序员私房菜 」一直有写一篇关于排序算法文章的打算,直到我看到了这一篇,我放弃了自己写的打算,因为这篇写的太经典了。这里强烈推荐给大家。之前的一篇 几张动态图清晰展示常用数据结构及其设计原理 发出来之后反响不错,这次来个动图排序算法大全。数据结构与算法,算是齐了!本文将采取动态图 + 文字描述 + Java代码实现来讲解以下十大排序算法:冒泡...转载 2019-03-23 12:42:09 · 498 阅读 · 0 评论 -
数据结构与算法系列——栈
什么是栈栈是一种运算受限制的线性表,只允许在表的一端进行插入和删除操作。这一端被称为栈顶,另一端被称为栈底。向一个栈中插入新数据叫做进栈、入栈或者压栈,是把新元素放到栈顶上边,使其成为新的栈顶元素;删除数据叫做出栈或者退栈,就是把栈顶的元素删掉,使其下边的元素称为新的栈顶元素。举一个容易理解的例子,就是有一摞盘子,我们用的时候从上往下一个一个取,放的时候都是从下往上一个一个放,一般不从中间取或...原创 2019-03-09 23:00:06 · 354 阅读 · 0 评论 -
数据结构与算法系列——链表详解
上次我们简单的对比了一下数组和链表的区别和各自的优缺点,今天我们来详细看一下链表这个结构。链表的结构五花八门,我们几天主要看一下三种最常用的链表结构:单链表、双向链表和循环列表。单链表我们首先来看一下最简单、最常用的单链表。前边我们已经知道链表是通过指针将一些分散的内存块连接到一起。其中,我们把每个内存块叫做链表的一个结点。为了将每个结点连接到一起,每个结点不仅存储数据,而且还需要记录下...原创 2019-03-03 22:19:05 · 296 阅读 · 0 评论 -
数据结构与算法系列——时间、空间复杂度
数据结构和算法本质就是帮我们用最快的时间和最少的空间来执行我们的代码。所以,执行效率是衡量一个算法的非常重要的指标。那如何来计算你的算法代码的执行效率呢?这就需要时间、空间复杂度来分析了。有人可能会说,我把代码执行一遍,然后通过统计、监控就能知道执行的时间和需要的内存大小。干嘛还需要时间、空间复杂度来分析呢?我都能得到具体需要的时间和内存了,还需要多此一举吗?首先,这种评估算法效率的方法没有问...原创 2019-02-21 10:10:10 · 291 阅读 · 0 评论 -
数据结构与算法系列——数组和链表
数组的介绍在每一种编程语言种,基本都有数组这种数据类型,当然它不仅是一种数据类型,还是一种基础、简单的数据结构。数组的定义是:数组是一种线性表数据结构,他用一组连续的内存空间,来储存一组相同类型的数据数组的特点数组是一种线性表,线性表就是数据像一条线一样,排列成一条有序的队,每个数据只有前和后两个方向。数组在内存中的储存是连续的,声明数组的时候会在内存中找一块连续的空间,来依次储存数组的每...原创 2019-02-22 23:31:02 · 184 阅读 · 0 评论