数组

概念与特性

1,数组是线性表,用一组连续的内存空间存储⼀组具有相同类型的数据

2,最大的特性是⽀持按照下标O(1)时间复杂度内快速访问数组元素

3,⼀维数组寻址公式:a[i]_addr = base_addr + i * data_type_size

操作与复杂度

1. 随机访问时间复杂度是O(1);
2. 在数组中间任意位置插⼊数据的时间复杂度是O(n);

3. 删除数组中任意位置数据的时间复杂度是O(n)

应⽤场景 数组是其他数据结构和算法的实现基础,⽐如栈、队列、堆、⼆分查找等
其他知识点 1. 数组需要连续的内存空间,对内存的要求较⾼;
2. 数组中的数据连续存储,对CPU缓存友好;
3. ⼤部分编程语⾔中,数组下标都是从0开始编号;
4. ⼤部分编程语⾔中,都提供了容器类型以⽀持动态数组(动态扩容);
5. 编程语⾔中的数组类型并不等同于数据结构中讲的数组;
掌握程度 能够⾃⼰动⼿实现⼀个动态数组类

链表

概念与特性 1. 链表是线性表,不需要连续的内存空间来存储元素,通过指针将串联每个链表中的结点;
2. 常⽤的链表结构有:单链表、双向链表、循环链表,其中双向链表因为⽀持在O(1)时间复杂度内找到前驱结点,在实际开发中最常⽤;
操作与复杂度

1. 与数组对⽐,查找第i个元素的时间复杂度是O(n);

2. 在已知前驱结点的情况下,单链表中插⼊数据的时间复杂度是O(1);
3. 在已知前驱结点的情况下,单链表中删除数据的时间复杂度是O(1);
注意:上⾯的插⼊、删除操作,都是针对已知前驱结点的情况,如果未知前驱结点,在单链表中插⼊、删除数据时间复杂度是O(n),⽽在双向链表 中插⼊、删除数据的时间复杂度仍然是O(1)。这也是双向链表⽐单链表更常⽤的主要原因。

应⽤场景 链表是其他数据结构和算法的实现基础,⽐如跳表、散列表等
其他知识点 1. 链表中的数据不连续存储,对CPU缓存不友好;
2. 在实际的编程中,可定义有头链表,也可以定义⽆头链表;有头链表指的是链表中的头结点不存储数据;
掌握程度

1. 熟练实现单链表、双向链表、循环链表的定义和操作

2. 熟练实现经典的链表题⽬,⽐如反转链表、链表求中间结点、合并有序链表、删除链表倒数第K个结点等;

概念与特性 1. 栈是⼀种操作受限的线性表,只能在⼀端插⼊删除数据;
2. 栈的最⼤特性是先进后出;
操作与复杂度 1. ⼊栈操作,在栈顶放⼊数据,时间复杂度是O(1);
2. 出栈操作,从栈顶取出数据,时间复杂度是O(1);
应⽤场景 1. 函数调⽤栈;
2. 编译器利⽤栈来实现表达式求值;
3. 浏览器中的前进后退功能的实现也会⽤到栈;
其他知识点 1. 栈既可以⽤数组来实现,也可以⽤链表来实现;
2. 基于数组实现的⽀持动态扩容的栈的插⼊操作的均摊时间复杂度是O(1);
掌握程度 1. 熟练利⽤数组实现⼀个栈;
2. 熟练利⽤链表实现⼀个栈;
3. 掌握基于数组实现的⽀持动态扩容的栈的插⼊操作的时间复杂度分析;
4. ⽤栈检查括号是否匹配,⽐如:{[()]()[{}]}或[{()}([])]等都为合法格式,⽽{[}()]或[({)]为不合法的格式;

队列

概念与特性 1. 队列是⼀种操作受限的线性表,只能在两端插⼊、删除数据;
2. 队列的最⼤特性是先进先出;
 
操作与复杂度 1. ⼊队操作,在队尾插⼊数据,时间复杂度是O(1);
2. 出队操作,从队头取出数据,时间复杂度是O(1);
应⽤场景 队列常⽤在有限资源池中,⽤于排队请求,⽐如数据库连接池等;
其他知识点 1. 队列既可以⽤数组来实现,也可以⽤链表来实现;
2. 最常使⽤的队列是基于数组实现的循环队列;
掌握程度 熟练实现⼀个循环队列,重点是掌握队列的判空和判满条件;

算法章节 数组、链表、栈、队列相关推荐

  1. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  2. DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略

    DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...

  3. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  4. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!

    链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力.链表的操作也离不开指针,指针又很容易导致出错. 综合多方面的原因,链 ...

  5. python数据结构-数组/列表/栈/队列及实现

    首先 我们要分清楚一些概念和他们之间的关系 数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack) li ...

  6. (链表 栈 队列 递归)

    文章目录 链表 反转链表 删除点链表中给定值的结点 栈和队列 双向链表实现栈和队列 数组实现队列 获取栈的最小值 用两个栈实现一个队列 用两个队列实现一个栈 递归 链表 反转链表 (反转单链表 反转双 ...

  7. 基础的数组/链表实现的队列

    上周我们学习了队列的实现,我们可以通过数组或者链表实现队列,队列是对数据的一种存储方式,但是它更优于数组和链表,下面是编写的简单的数组/链表对队列的实现,完善版的还没有完全搞好,先是最基础的实现类: ...

  8. JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  9. 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)

    第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...

最新文章

  1. css字体更小 css比12px更小的方法
  2. Oracle数据库权限管理
  3. 专栏导读:数据驱动的优化
  4. 数据库每日一题 2020.04.30
  5. JSP数据库操作和调用自己写的java类
  6. 【程序猿】2016年自己的十年计划篇
  7. 二叉树的遍历以及遍历算法的应用(链式存储结构)
  8. linux scp 自动脚本,scp自动运行脚本
  9. 非极大值抑制算法(NMS)的python实现
  10. vsr matlab仿真,电压型PWM整流器(VSR)及控制系统的matlab仿真..docx
  11. Window笔记本触摸板手势大全
  12. JS手写实现call、apply、bind
  13. 黎曼流形(Riemannian manifold)
  14. phpwind安装空白问题解决
  15. Wildcard Matching 1
  16. 技能分享 | 麦肯锡教给我的写作武器:如何讲好一句话
  17. pytroch冻结某些层的常用方法
  18. powerbuilder的dw中使用graph风格,当横轴是日期时,如何显示才能完整显示日期?
  19. 【转】Java 多线程学习
  20. 各个流行语言优缺点对比及其适用场景

热门文章

  1. inputstream java_Java实现inputstream流的复制
  2. android实现文本输入,Android实现智能提示的文本输入框AutoCompleteTextView
  3. python压缩算法_LZ77压缩算法编码原理详解(结合图片和简单代码)
  4. java 在已有的so基础上封装jni_[干货]再见,Android JNI 封装
  5. 【转】000.DICOM:DICOM标准学习路线图(初稿)!!!!!!!!!!!!
  6. 【转】理解Azure订阅,账户,活动目录AD,租户等概念
  7. C#进阶系列——AOP?AOP!
  8. Asp.Net中WebForm与MVC,Web API模式对比
  9. 基于androidx的快速开发框架_Vue企业级优雅实战07框架开发03封装基于MockJS的模拟数据...
  10. REVERSE-PRACTICE-CthulhuOJ