
数据结构与算法
文章平均质量分 94
且听风吟9527
这个作者很懒,什么都没留下…
展开
-
数据结构与算法:二叉查找树/排序树/搜索树
二叉树的前序遍历,中序遍历,后续遍历的思想,对其应分别对应的介绍了快速排序、汉诺塔、归并排序。二叉树的增删查操作很普通,时间复杂度与链表并没有太多差别。但当二叉树具备一些特性的时候,则可以利用这些特性实现时间复杂度的降低。二叉查找树/排序树/搜索树二叉查找树(也称作二叉排序树,二叉搜索树)具备以下几个的特性:若左子树不为空,那么左子树上面的所有节点的关键字值都比根节点的关键字值小若右子树不为空,那么右子树上面的所有节点的关键字值都比根节点的关键字值大左右子树都为二叉树没有重复值(原创 2020-10-26 19:10:37 · 1401 阅读 · 0 评论 -
数据结构与算法:树及二叉树
树(Tree)什么是“树”?再完备的定义,都没有图直观。所以我在图中画了几棵“树”。你来看看,这些“树”都有什么特征?树满足递归定义的特性。也就是说,如果一个数据结构是树结构,那么剔除掉根结点后,得到的若干个子结构也是树,通常称作子树。在一棵树中,根据结点之间层次关系的不同,对结点的称呼也有所不同。我们来看下面这棵树,如下图所示:A 结点是 B 结点和 C 结点的上级,则 A 就是 B 和 C 的父结点,B 和 C 是 A 的子结点。B 和 C 同时是 A 的“孩子”,则可以称 B 和 C 互为原创 2020-10-23 07:10:40 · 654 阅读 · 0 评论 -
数据结构与算法:递归
如何理解“递归”?在数学与计算机科学中,递归 (Recursion))是指在函数的定义中使用函数自身的方法,直观上来看,就是某个函数自己调用自己。咱们生活中就有很多用到递归的例子。周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办?递归就开始排上用场了。于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排往前问,直到问到第一排的人,说我在第一排,然后再原创 2020-10-14 12:56:47 · 618 阅读 · 0 评论 -
数据结构与算法:栈及其应用
文章目录栈的介绍栈的基本操作顺序栈链式栈栈在表达式求值中的应用栈的应用案例总结栈的介绍栈是一种特殊的线性表。栈与线性表的不同,体现在增和删的操作。具体而言,栈的数据结点必须后进先出。后进的意思是,栈的数据新增操作只能在末端进行,不允许在栈的中间某个结点后新增数据。先出的意思是,栈的数据删除操作也只能在末端进行,不允许在栈的中间某个结点后删除数据。也就是说,栈的数据新增和删除操作只能在这个线性表的表尾进行,即在线性表的基础上加了限制。如下图所示:栈的基本操作如何通过栈这个后进先出的线性表,来实现增原创 2020-10-14 10:56:00 · 848 阅读 · 0 评论 -
数据结构与算法:链表及其应用
基本介绍相比数组,链表是一种稍微复杂一点的数据结构。数组和链表都属于线性表,一个是顺序存储结构,一个是链式存储结构,最主要的的差别是底层存储结构。数组需要一块连续的内存空间来存储,对内存要求较高,如果申请一个100MB大小的数组,当内存中没有连续的、足够大的存储空间时,即使内存剩余空间总和大于100MB,仍然申请失败。链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用,所以如果申请的是 100MB 大小的链表,只要剩余内存不小于于100MB根本不会有问题。如果剩余原创 2020-10-13 17:54:55 · 1162 阅读 · 0 评论 -
数据结构与算法:冒泡排序、插入排序、选择排序
排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。按照时间复杂度把它们分成了三类,本文先分析冒泡、插入、选择三种排序算法排序算法时间复杂度是否基于比较冒泡、插入、选择O(n²)√快排、归并O(nlongn)√桶、计数、基数O(n)×带着问题去学习,是最有效的学习方法。所以按照惯例,我还是先给你原创 2020-10-07 22:14:56 · 2007 阅读 · 0 评论 -
数据结构与算法:数组
定义什么是数组?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。先简单介绍一下几个关键词线性表、连续的内存空间线性表(Linear List),顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概念是非线性表,比如二叉树、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系连续的内存空间和相同类型的数据,正是因为这两个限制,它才有了原创 2020-10-06 11:44:56 · 547 阅读 · 0 评论 -
数据结构与算法:复杂度分析
为什么需要复杂度分析?你可能会有些疑惑,我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?首先,我可以肯定地说,你这种评估算法执行效率的方法是正确的。很多数据结构和算法书籍还给这种方法起了一个名字,叫事后统计法。但是,这种统计方法有非常大的局限性。1.测试结果非常依赖测试环境测试环境中硬件的不同会对测试结果有很大的影响。 比如,我们拿同样一段代码,分别用 Intel Core i9 处理器和原创 2020-10-05 17:49:52 · 588 阅读 · 0 评论 -
数据结构与算法:哈夫曼树与哈夫曼编码
1.Haffman树我们先以成绩评级举例分析,一步一步的认识Haffman树和Haffman编码。分数0~5960~6970~7980~8990~100成绩不及格及格中等良好优秀所占比例5%15%40%30%10%如果是要真实实现这个功能,当然有更好的逻辑实现。但是这里为了便于分析,就拿这样的伪代码举例了。通过if 判断语句进行成绩评...原创 2020-02-26 22:32:20 · 7303 阅读 · 1 评论