![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
刀哥哥
好好学习 天天遛狗
展开
-
[第五章] 队列
注:此专栏内容主要参考极客时间-数据结构与算法之美 1. 概念 先进者先出,这就是典型的“队列”; 入队 enqueue(),放一个数据到队列尾部,出队 dequeue(),从队列头部取一个元素; 用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列; 基于链表的实现方式,可以实现一个支持无限排队的无界队列(unbounded queue),但是可能会导致过多的请求排队等待,请求处理的响应时间过长。所以,针对响应时间比较敏感的系统,基于链表实现的无限排队的线程池是不合适的。 基于数组实现的有界队列(原创 2020-06-03 15:21:30 · 1122 阅读 · 0 评论 -
[第四章] 栈
注:此专栏内容主要参考极客时间-数据结构与算法之美 1. 概念 后进者先出,先进者后出,这就是典型的“栈”结构; 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据; 栈主要包含两个操作,入栈和出栈,也就是在栈顶插入一个数据和从栈顶删除一个数据; 用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈; 时间复杂度、空间复杂度都是O(1); 2.栈在表达式求值中的应用 编译器就是通过两个栈来实现的。其中一个保存操作数的栈,另一个是保存运算符 的栈。我们从左向右遍历表达式,当遇到数字,原创 2020-06-03 13:43:04 · 171 阅读 · 0 评论 -
[第三章] 链表
注:此专栏内容主要参考极客时间-数据结构与算法之美 1. 概念 链表与数组相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用; 常见的三类链表:单链表、双向链表、循环链表 2.链表特点 链表中插入或者删除一个数据,我们并不需要为了保持内存的连续性而搬移结点,因为链表的存储空间本身就不是连续的。所以,在链表中插入和删除一个数据是非常快速的。 链表要想随机访问第 k 个元素,就没有数组那么高效了,,而是需要根据指针一个结点一个结点地依次遍历,直到找到相应的 结点。 链表随机访原创 2020-05-31 21:59:03 · 227 阅读 · 0 评论 -
[第二章] 数组
注:此专栏内容主要参考极客时间-数据结构与算法之美 数组 概念 数组是一种线性表结构,它用一组连续的空间,存储具有相同类型的数据; 线性表 线性表即线一样的数据结构,数组、链表、栈、队列都属于线性表; 查询快 因为数组定义是连续的、相同的元素,所以数组的特点是通过下标查找元素较快,插入、删除较慢; 元素a[i],内存地址计算公式 a[i]_address = base_address + i * data_type_size data_type_size :数组中每个元素的大小。 根据原创 2020-05-31 21:17:45 · 102 阅读 · 0 评论 -
[第一章] 复杂度分析
注 此专栏内容主要参考极客时间-数据结构与算法之美 事后统计法 一般测试进行的性能分析,都是属于“事后统计法”; “事后统计法”不好的方面 测试结果依赖测试环境(比如测试机器配置) 测试结果受数据规模影响 大O表示法 T(n) = O(f(n)); T(n)表示执行时间,n表示数据规模大小,f(n)代表代码要执行的总次数 代码执行时间(空间)随数据规模增长的变化趋势,称为时间(空间)复杂度; 当n很大时,我们只要记录一个最大量级就可以了 时间复杂度分析 只...原创 2020-05-25 22:21:08 · 174 阅读 · 0 评论