数据结构nowcoder-NOTE(持续更新)

链表:

  1. 无需事先估计空间

  2. 增删不需要挪动元素,比较方便

  3. 不支持随机访问

  4. 地址不连续

  5. 时间复杂度指的是一个数量级的概念(查找第i个也是O(n))

  6. 链式存储时,结点的存储地址可以随意分配(链表中有指针域可以找到下一个链表结点的存储地址,连续与否都可以)

  7. 链表是一种物理存储单元上非连续、非顺序的存储结构

  8. 线性表的顺序存储结构中逻辑顺序与物理顺序总是一致的,但链表存储结构不一致

  9. 数组从栈中分配空间(数组元素在栈区),链表从堆中分配空间(在堆区)
    数组静态分配内存,链表动态分配内存
    数组在内存中连续,链表不连续
    有序数组利用下标定位时间复杂度为O(1),链表定位元素的时间复杂度为O(n)
    有序 数组插入删除元素的时间复杂度为O(n), 链表插入删除元素的时间复杂度为O(1)
    建立一个n个节点的单链表的时间复杂度为O(n)

  10. 循环链表中尾指针指向终端节点(开始节点:(rear->next)->next / 终端结点 rear)

  11. 线性表的顺序存储结构的地址是连续的,所以可以通过计算地址来随机存取(直接访问),而链式存储结构的存储地址不是连续的,所以只能通过结点的指针顺序存取()

  12. 单链表 删除/查找时间复杂度 O(1),查找的时间复杂度O(n)

  13. 二分查找法只适合顺序存储结构

  14. 数据结构nowcoder-NOTE(持续更新)_第1张图片

  15. 单链表的存储密度<1,(存储密度=单链表的数据项所占空间 / 结点所占空间)

  16. 单链表的插入与删除不需要移动元素,需要移动指针

栈/队列

数据结构nowcoder-NOTE(持续更新)_第2张图片

数据结构nowcoder-NOTE(持续更新)_第3张图片
数据结构nowcoder-NOTE(持续更新)_第4张图片
数据结构nowcoder-NOTE(持续更新)_第5张图片

  1. 递归的过程就是栈保存现场地址的过程(数据入栈、运算、出栈、返回结果)
  2. 栈与队列顺序存储/链式存储的插入与删除都在一段进行,时间复杂度为O(1)
  3. 进栈n个数据,出栈的序列的种类数:
    在这里插入图片描述

树:

  1. 中序遍历+后序遍历——二叉树数据结构nowcoder-NOTE(持续更新)_第6张图片

  2. 在树中,叶子节点的个数比度为2的节点数多1(+1)

  3. 由树转换为二叉树,这个二叉树的形态唯一

  4. 任何树中,分支数(在二叉树中叫度之和)比结点数少一

  5. 数据结构nowcoder-NOTE(持续更新)_第7张图片

图:

  1. 最小生成树 :a.必须使用(n-1)条边来构造n个顶点 b.不能使用回路的边 c.权值最小
    (1)Prim算法:

    (2)Kruskal算法

  2. AOV网:无权有向图-拓扑排序
    AOE网:有权有向图-关键路径(最长的路径)

  3. 最短路径-Dijkstra算法
    数据结构nowcoder-NOTE(持续更新)_第8张图片

  4. 度数之和=2*边数————所以无向图的度数之和一定是偶数

  5. BSF和DSF算法一次遍历完整个图的所有元素条件必须是连通图(非连通图不可以)

  6. 保证n个顶点无向图在任何情况下都是连通的所需边数最少是:(n-1)(n-2)/2+1 <保证(n-1)顶点图是完全图 >

  7. 图中任意两点度的和大于或等于顶点总数,那一定是哈密尔顿图

  8. 建立邻接表或逆邻接表时,若顶点信息即为编号,则时间复杂度为O(n+e)。
    若需要通过查找才可以得到位置,则为O(n*e)

  9. n个顶点的强连通图最多有n(n-1)条边,最少有n条边

  10. 有向图邻接表某顶点链表长度为0其度数不一定为0(度=出度+入度)

  11. B-树只支持随机搜索,B+树支持随机和顺序搜索(优势在于叶子结点之间有指针)

  12. 邻接表得节点数等于=结点数+边数

  13. 有向图-出度=入度

  14. 数据结构nowcoder-NOTE(持续更新)_第9张图片

查找:

  1. 二叉排序树的插入元素一定称为叶子结点,AVL树(平衡二叉树)插入元素时要做出调整
  2. 哈希表查找元素是最快的,时间复杂度为O(1)
  3. 折半查找法的时间复杂度为O(log 2 N)

其他:

  1. list为双向链表,支持快速增删

  2. vector为数组,支持快速随机访问,插入删除时需要移动其他元素,复杂度高

  3. map、set:为红黑树,插入删除复杂度低

  4. 堆(内存)与栈(内存)之间的区别
    a·堆:堆的内存由程序员来分配,且在使用中容易产生碎片 (自己做菜自己吃,什么时候收盘子自己知道,但是可能会浪费(产生碎片),因为可能自己一个人吃不完。)
    桟:栈的内存由系统来自动分配,但自由度小 (公司食堂,你吃饭由食堂工作人员帮你打饭和分配位置,吃完了工作人员帮你收盘子。你浪费粮食(碎片)那是不可能的,因为食堂会把碎片拿去喂猪。)

  5. 局部变量分布在栈上,new出来的对象分布在堆上

  6. c语言中标识符只能以字母和下划线为开头

数据结构nowcoder-NOTE(持续更新)_第10张图片

  1. 查二维数组的时间复杂度是O(1)

基础知识

  1. 数据结构:是指互相之间存在着一种或多种关系的数据元素的集合
  2. 算法:对特定问题求解步骤的一种描述,是指令的有限序列
  3. 算法五特征:有穷性、确定性、可行性、输入、输出
  4. 好的算法要求:正确、可读、健壮、高效
  5. 数据逻辑结构包括:集合结构、线性结构、树状结构、图形结构
  6. 数据存储结构包括:顺序存储、链式存储、索引存储、散列存储。
  7. 树形结构和图形结构合称为:非线性结构

  8. 数据结构nowcoder-NOTE(持续更新)_第11张图片

算法

  1. 链表的删除
  2. 链表的添加
  3. 链表的遍历
  4. 双向链表的删除
  5. 尾递归
  6. 三元组储存
  7. 二叉树的储存(双亲、孩子)

你可能感兴趣的:(数据结构,数据结构,链表)