
数据结构与算法
文章平均质量分 80
salmon_zhang
android应用开发
展开
-
数据结构——顺序存储二叉树
因为从数据存储的角度来看,数组存储方式和树的存储方式是可以互相转换的,即数组可以转换为树,而树也可以转换成数组。八大排序算法中的堆排序,就会使用到顺序存储二叉树,后面在堆排序算法中会体现出来。1. 什么叫作顺序存储二叉树当一颗二叉树满足如下两个条件时,就是顺序存储二叉树:二叉树是以数组的方式存放数据的。如下图所示:在遍历数组时,仍然可以按照前序遍历、中序遍历和后序遍历的方式来完成节点的遍历2. 顺序存储二叉树的特点顺序二叉树通常只考虑完全二叉树第n个元素的左子节点在数组原创 2020-05-15 11:15:19 · 2077 阅读 · 0 评论 -
数据结构——树
1. 为什么需要树这种数据结构?数组存储方式的优缺点:优点:可以直接通过下标访问元素,速度快。当是有序数组的时候,还可以使用二分查找提高查询的速度。即读取效率较高。缺点:如果需要检索某个具体的值,或插入值的时候,数组会整体移动,这时候效率就较低。即存储效率较低链式存储方式的优缺点:优点:存储效率较高。例如在插入一个数值节点,只需要将插入节点链接到链表中就可以了,删除效率也较高。缺点:检索效率较低,例如当需要检索某个值的时候,需要从头节点开始遍历。即读取效率较低原创 2020-05-14 15:23:34 · 309 阅读 · 0 评论 -
冒泡排序、插入排序、选择排序
在平时的项目中,我们遇到最多的算法应该就是排序了。其中最经典、最常用的算法有:冒泡排序、插入排序、选择排序、快速排序、归并排序、基数排序等。1. 评判排序算法的标准排序算法有很多种,那么我们该如何评判一个排序算法呢?一般情况下,我们可以从排序算法的执行效率、排序算法的内存消耗和排序算法的稳定性去考虑。1.1 执行效率1. 最好情况、最坏情况、平均情况时间复杂度在要排序的数据中,执行效率与...原创 2019-10-24 19:16:07 · 421 阅读 · 0 评论 -
数据结构——队列
队列也是一种数据结构,今天我们主要学习几种基本的队列,然后学习下队列在线程池中的应用。1. 什么是队列?队列具有“先进先出,后进后出”的特点。支持操作的也有限,最基本的操作也只有两种:入队enqueue():放一个数据到队列尾部出队dequeue():从队列头部取出一个元素从上图可以看出,队列和栈一样,都是操作受限的线性表数据结构。队列作为一种非常基础的数据结构,应用...原创 2019-04-30 20:39:05 · 459 阅读 · 0 评论 -
递归
递归是一种应用非常广泛的算法(或者编程技巧)。也是很多数据结构和算法编码实现的基础。比如DFS深度优先搜索、前中后序二叉树遍历等等,所以搞懂递归是学习后面复杂的数据结构和算法的前提条件。1. 理解递归递归在我们的生活中也是很常见的:在电影院里,在漆黑的时候,我们没法直接知道自己是第几排,于是我们就可以问前一排的人他是第几排,我们只要在前一个人的基础加一,但前面一排的人也看不清楚,所以他也要...原创 2019-05-04 22:44:12 · 254 阅读 · 0 评论 -
数据结构——栈
栈是一种数据结构,今天我们先来理解下栈的定义,然后再看几个在现实开发中运用到的实例。1. 什么是栈?栈是一个具有“先进后出、后进先出”这种特点的数据结构。从栈的结构图中可以看出,栈是一种“操作受限”的线性表,只允许在一端插入或删除数据。从功能上来说,数组或链表可以替代栈,但特定的数据结构是对应特定场景的抽象。当某个数据集合只涉及在一端插入和删除数据,并且满足先进后出、后进先出的特性时...原创 2019-03-21 21:36:13 · 4037 阅读 · 0 评论 -
数据结构——链表
链表也是一种数据结构,相比较于数组,略显复杂。链表和数组都是非常基础、非常常用的数据结构。1. 数组与链表的区别从底层的存储结构上看,二者申请的内存空间不一样:数组需要一块连续的内存空间来存储,对内存要求较高。链表不需要一块连续的内存空间,它通过"指针"将一组零散的内存块串联起来。例如,当我们申请一个100MB大小的数组,当内存空间中没有连续的、足够大的存储空间时,即便内存的...原创 2019-03-17 23:45:59 · 579 阅读 · 0 评论 -
数据结构与算法书籍推荐
学习数据结构与算法,还是很有必要看几本相关的书籍,但根据不同基础的人,合适看的书也不一样,因此,针对不同层次、不同语言的人,推荐几本市面上口碑不错的书。1. 入门级针对刚入门的同学,建议不要急着去看那些经典书,像《算法导论》、《算法》这些比较经典、权威的书。虽然书很好,但看起来很费劲,如果看不完,效果会很不好。所以建议先看两本入门级的趣味书:《大话数据结构》《算法图解》大话数据结构...原创 2019-03-16 18:49:31 · 68575 阅读 · 23 评论 -
数据结构——数组
数组不仅是编程语言中的一种数据类型,也是最基础的数据结构。1. 数组的基本概念数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。1.1 线性表线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前、后两个方向。除了数组之外,队列、栈、链表等都是线性表结构。1.2 非线性表非线性表中的数据不是简单的前后关系。二叉树、堆、图是非线...原创 2019-03-15 20:34:45 · 1365 阅读 · 0 评论 -
复杂度分析
知识点目录1.为什么需要复杂度分析2.大O复杂度表示法2.1 三种常用的时间复杂度分析法只计算执行次数最多的那一段代码加法法则乘法法则3.常见的几种时间复杂度3.1 常量阶O(1)3.2 对数阶O(logn)3.3 O(m+n)、O(mn)4.空间复杂度分析5.最好、最坏情况时间复杂度6.平均情况时间复杂度7.均摊时间复杂度8.复杂度总结复杂度分析...原创 2019-03-14 13:55:11 · 1098 阅读 · 0 评论 -
学习数据结构和算法前瞻
我并非计算机科班出身,以前只对C、java、Matlab、Python语言有粗略的了解,以前写代码的时候只会考虑功能能实现就行了,并不考虑性能方面的问题,对数据结构与算法从未学习过,更不了解什么时间复杂度、空间复杂度。写代码的时候从不考虑这些。而这一次我想修炼下编程的内功—好好学习下数据结构与算法。1. 以前对数据结构与算法的困惑我们以前对数据结构与算法一般都会有如下几点困惑,我简单罗列下:...原创 2018-12-03 16:17:27 · 822 阅读 · 0 评论