数据结构与算法

导航

一、数据结构与算法概念

数据结构的定义

数据结构的概念:数据元素的集合,以及这些数据元素之间的关系,和它的构造方法

数据逻辑结构:

  • 线性结构(1对1)
  • 非线性结构(1对多)

算法

算法的5个重要特性

  1. 有穷性:执行有穷步之后结束,且每一步都可在有穷时间内完成。
  2. 确定性:算法中每一条指令都必须有确切的含义,不能含糊不清。
  3. 输入(>=0)
  4. 输出(>=1)
  5. 有效性(可行性):算法的每个步骤都能有效执行并能在执行有限次后例如a=0,b/a就无效得到确定的结果。

伪代码

伪代码:是一种算法描述语言,介于自然语言与编程语言之间,不用拘泥于具体的实现

二、线性表

线性表

线性表的概念:连续的序列(数据类型提相同)\(a_1,a_2,...,a_n\)

线性报常见的两种存储结构(物理结构)

  1. 顺序存储结构(顺序表)
    • 优点:查找效率高
    • 缺点:插入删除慢
    • 可以随机访问表中任意节点
  2. 链式存储结构(单链表、循环链表、双向链表)
    • image-20240505152707818
    • 适合删除、插入操作,且不会移动元素
    • 从头指针开始比对结点
  3. 链表的基本操作
    • 单链表删除结点
    • 单链表插入结点
    • 双向链表删除结点
    • 双向链表插入结点

三、队列与栈

  • 有栈顶和栈底
  • 先进后出

  • 有队尾和队头
  • 先进先出

循环队列

  • 为空head = tail
  • 为满
    1. 留一个空,head =tail%max *size +1

把握出栈、入栈不同顺序来判断有哪些入栈顺序(可以入俩个,出一个之后再入一个,最后全出)

四、窜

广义表

广义表是n个表元素组成的有限序列,是线性表的推广

广义表长度

  • 最外层括号去掉,逗号输+1就是长度(只需要数最外层的逗号)
    • LS1=(a, (b, c), (d, e))
      • =a, (b, c), (d, e)
      • 现在共有4个逗号,但是不用加括号里面的逗号,所以长度是2+1=3

广义表深度

  • 深度就是最里面的括号是属于被包着的第几层括号
    • LS1=(a, (b, c), (d, e))
      • 这里的(b, c)和(d, e))外面还有一层括号,再加上它们本身的括号,所以深度=1+1=2

串是仅有字符构成的有限序列,是取值范围受限的线性表。

五、数组

image-20240514110930725

  • 注意上面公式是从0开始的(如果是从1开始的,那么结果-1)
  • 巧记方法,题目说以行(或者列)存放的,那么就是用这个数据的行(或者列)*这个数组的列数(或者行数)+列数(或者行数)+起始地址
    • 注意一下对应关系,它说行就拿行乘以列数,很简单识别的

六、树与二叉树

  • 节点的度:它下边子树个数
  • 树的高度::除开最底下叶子节点后,树的层数
  • 叶子节点:树最下面的节点(不一定全在最下面的同一层)
  • 分支节点:度数不为零的
  • 内部节点:除开根节点以外的分支节点
  • 父节点:子节点对应的根节点就是父节点
  • 子节点子树就是子节点
  • 兄弟节点:
  • 层次

二叉树

image-20240517152753603

二叉树的重要特性:

  1. 在二叉树的第i层上最多有\(2^{k-1}\)个节点(\(i\geq1\))
  2. 深度为k的二叉树最多有\(2^{k-1}\)个节点(\(k\geq1\));
  3. 对任何一棵二叉树,如果其叶子节点数为\(n_0\),度为2的节点数为\(n_2\),则\(n_0\)=\(n_2\)+1。
  4. 如果对一颗有n个节点的完全二又树的节点按层序编号(从第1层到\(\lfloor log_2^{n}\rfloor+1\)层,每层从左到右),则对任一节点\(i(1\leq i\leq n)\),有
    • 如果i=1,则节点i无父节点,是二叉树的根;如果\(i> 1\),则父节点是\(\lfloor i/2\rfloor;\)
    • 如果\(2i>n\),则结点i为叶子节点,无左子节点;否则,其左子节点是节点2i;
    • 如果2i+1>n,则节点i无右叶子节点,否则,其右子节点是节点2i+1.

二叉树遍历

  • 前序遍历:根->左->右
  • 中序遍历:左->根->右
  • 后序遍历:左->右->根
  • 层次遍历:从第一层开始,每一层从左到右

七、图

图的存储

image-20240517155940155

image-20240517160248636

image-20240518094744527

八、查找

五大查找

  1. 顺序表查找
    • 顺序查找
    • 二分查找
    • 索引顺序查找
  2. 树表查找
    • 二叉排序树
  3. 散列表查找
    • 哈希查找

顺序查找

顺序查找的过程:将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回成功;否则:则查找失败。

二分查找

image-20240518095911142

二叉查找树(排序)

image-20240518100932418

二叉平衡树

image-20240518101059405

哈夫曼树

image-20240518101335253

B-树

image-20240518165115144

B+树

image-20240518170311120

散列表

image-20240518170732398

image-20240518171023468