混水之数据结构解读一

301 阅读4分钟

前言

上班之前总觉得在学校学的东西用处不是很大,数据结构和算法也是为了考试,直到考研的时候才发现这个原来很重要,上了班之后更是发现,原来这个真的体现了你的基础性,所以当初没好好学的东西,又都狠狠的补了一遍,这个文章会很长,如果字数太多可能会分开写成好几篇

目录

基本概念

线性表

线性表的基本操作

线性表的顺序表示

线性表的链式表示

栈和队列

队列

栈和队列的基本应用

特殊矩阵的压缩储存

树和二叉树

树和二叉树的基本概念

二叉树的遍历和线索二叉树

树和森林

树和二叉树的基本应用

图的基本概念

图的基本操作

图的遍历及应用

查找的基本算法

顺序查找和折半查找

B树和B+树

B+树

散列表

排序的基本算法

排序的定义

插入排序

交换排序

选择排序

归并排序

基数排序

内部排序

外部排序

正文

基本概念

  • 数据:所有能被计算机识别和处理的集合
  • 数据元素:数据的基本单位,由若干数据项组成
  • 数据对象:具有相同性质数据元素的集合,归属数据的子集
  • 数据类型:分为原子类型,结构类型,书香数据类型
  • 抽象数据类型:定义取决于逻辑特性
  • 数据结构:数据元素的集合,包括逻辑结构、存储结构、数据运算

数据结构的基本要素

  • 逻辑结构:分为线性结构和非线性结构,细分为:集合,线性结构,树形结构,图状结构或网状结构
  1. 存储结构(物理结构):数据在计算机中的的表示(元素表示和关系表示)
    1. 存储结构常用的几种: 顺序存储、链式存储、索引存储、散列存储(Hash存储)
      1. 顺序存储:算法逻辑和存储的物理地址都相邻。优点:随机存取。缺点:只能用相邻的存储单元,会产生较多的外部碎片
      2. 链式存储:算法逻辑上相邻,存储的物理地址不需要相邻,借用指针来表示元素的逻辑关系。优点:不会出现碎片现象。缺点:存储指针占用额外的存储空间,只能顺序存取
      3. 索引存储:要建立个索引表。优点:检索速度快。缺点:索引表会占用较多的存储空间,增加和删除数据的时候还要修改索引表,时间较长。
      4. 散列存储(Hash存储):根据关键字直接计算出存储地址。优点:检索、增加、删除的速度都很快;缺点:散列函数写的不好,会产生存储单元的冲突,进而影响时间空间。

算法的基本概念

  1. 算法的基本条件

    1. 有穷性:没有一直执行的算法(如果一直执行可能是死循环),要在完成一定条件后结束
    2. 确定性:算法目的要明确,输入对应输出
    3. 可行性:算法是可行的
    4. 输入:没有输入算法执行什么?
    5. 输出:不输出算法的意义在哪?
    6. 一些基本要求比如:正确、可读、健壮、时间、空间
  2. 时间和空间复杂度

    1. 时间复杂度:T(n) = O(f(n))
      1. 主要分析的是T(n)的数量级,f(n)是频度,O是T(n)的数量级,n是问题的规模,同时也受限输入的数据的性质
      2. 分析时间复杂性的规则
        1. 加法:T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n)))
        2. 乘法:T(n) = T1(n)*T2(n) = O(f(n))*O(g(n)) = O(max(f(n)*g(n)))
      3. 时间复杂度的顺序: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
    2. 空间复杂度:S(n) = O(g(n)) S(n)是使用的储存空间,n是问题规模。算法还有一个原地工作,就是需要辅助空间O(1)

线性表

  • 线性表的定义:具有相同数据类型的数据元素的 有限序列。L = (a1,a2,...,ai,ai+1,...,an),L是线性表,a1是表头元素且唯一,an是表尾元素且唯一,除去表头元素表尾元素,中间的元素都有并且只有一个前继后继元素。
  1. 线性表的特点:
    1. 个数有限
    2. 具有顺序性
    3. 都是单个的数据元素
    4. 逻辑关系具有抽象性
  • 线性表是逻辑结构,顺序表和链表是存储结构,它们不一样。