数据结构复习(1)——基础知识和线性表

数据结构基本知识

  1. 数据项(不可再分割的最小单位)->数据元素(数据的基本单位)->数据
  2. 数据结构就是相互之间存在一种或多种特定关系的数据元素的集合。
  3. 数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
  4. 数据结构的三要素:
    逻辑结构:集合(无关系),线性结构(一对一关系),树形结构(一对多关系),图状结构(多对多关系)。
    物理结构(存储结构):顺序存储(逻辑相邻,物理也相邻),链式存储(逻辑相邻,物理不一定相邻),索引存储(索引表),散列存储(散列表)。
    数据的运算:类似函数、方法。
  5. 数据类型:原子类型、结构类型(struct)。
  6. 抽象数据类型:类似于容器、队列、字符串等。
  7. 算法特性:有穷性、确定性、可行性、输入和输出。
  8. 好算法的特质:正确性、可读性、健壮性、高效率和低存储。
  9. 时间复杂度主要看循环执行条件是如何变化的大小关系
  10. 空间复杂度主要看定义变量的空间
    空间复杂度是常数级别,就是原地工作。

线性表

线性表概念主要强调逻辑结构和数据的运算:一对一关系,增删查改一系列操作。之后的顺序表、链式表等等都是带上了存储结构的线性表。

一、顺序表(顺序存储的线性表)

定义:

  1. 静态分配:你知道需要多少空间存数据
  2. 动态分配:事先不知道,用户输入总个数n才知道or连n都不告诉你。
    c:定长malloc,不定长还需要realloc
    c++:new数组,vector

基本操作:插入、删除、按值查找平均都是O(n)

二、单链表、双链表、循环链表、双循环链表(链式存储的线性表)
  1. 单链表
    判空:

    1. 头指针为空。
    2. 头结点的next为空。

    判断结束:

    1. 头指针:当前结点为空。
    2. 头结点:当前结点的next为空。
      在这里插入图片描述
  2. 双链表
    判空:同上
    判结束:同上。
    在这里插入图片描述

  3. 循环链表
    判空:1. 同上。 2. 头结点的next指向自己。
    判结束:当前指针的下一个指针又变成了开始的指针。
    在这里插入图片描述
    因为有尾指针,下一个就是头指针,而只有头指针则还需要遍历整个链表。

  4. 循环双链表
    判空:1. 同上。2. 头结点的next和prior都指向自己。
    判断结束:当前执政的下一个指针或者前一个指针是最开始的结点。在这里插入图片描述

基本操作:单说增删都是O(1),但是实际运用中还是需要查到指定点的位置的,所以增删查时间复杂度都是O(n)。

三、静态链表(实际是一个数组)

其实有很多的定义方法。
0下标的位置不存储数据,cur位置存放起始下标。结束的cur存储0。绝对不移动数据。

  1. 添加:取备用结点的索引存好数据,想连接到哪个结点后面就把自己的cur值就变成那个结点的cur值,然后把自己的索引赋值那个结点cur值,就和链表一样更改next一样。
  2. 删除:删除的结点的cur值给到其前驱结点,并把删除节点加入到备用结点中。
  3. 查找:从0下标的cur开始依次根据cur跳跃到下标查找。

判空:0下标位置的cur为0。
判断结束:当前cur为0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值