数据结构小结Ⅰ

数据结构第一次小结

一.思维导图

二.概念笔记

算法(指令的有限序列)

  1. 有穷性:必须在其所涉及的每一种情形下,都能在执行有穷步操作之后结束
  2. 确定性:算法的每一步操作,其顺序和内容需要有明确定义,且不能有所歧义
  3. 数据输入:初始数据的输入
  4. 信息输出:有效信息的输出
  5. 能行性:一个算法的每一步操作都必须是可行的

抽象数据类型(ADT)

  1. 概念:指一个数学模型以及定义在这个模型上的一组操作,主要是指用户在程序设计时自己定义的数据类型
  2. 标准格式
ADT 抽象数据类型名
{
    Data:数据元素之间逻辑关系的定义;
    Operation:
    操作1;
    ...
}

算法的描述和分析

  1. 椭圆框:表示算法的“开始”或“结束”
  2. 矩形框:表示某些基本操作,如赋值、组织循环等操作
  3. 平行四边形框:表示输入、输出操作
  4. 菱形框:表示判别断、比较条件

顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,采用顺序存储结构存储的线性表称为顺序表

优点:

  1. 随机访问时间复杂度为O(1)
  2. 空间连续,存储密度高

缺点:

  1. 中间或前面部分的插入删除时间复杂度为O(n)
  2. 不可以增长长度

链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现

优点:

插入或者删除一个元素时,无需移动其他元素,只需要改变指针指向

缺点:

访问元素效率低,查找速度慢

栈是特殊的线性表,分为顺序栈和链栈,只能在栈的末尾进行插入和删除操作,具有后进先出的特点(LIFO)

基本操作 目的
InitStrack(S) 初始化栈
IsEmpty(S) 判断栈是否为空
Push(S,x) 入栈
Pop(S,x) 出栈

队列

队列也是是一种特殊的性表,进行插入操作的端称为队尾,进行删除操作的端称为队头,先进先出(FIFO)

循环队列的判断

操作 结果
Q->rear==Q->front 队空
(Q->rear+1)%Q->maxsize==Q->front 队满

时间复杂度(大小比较)

​O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(n!)

三.疑难问题及解决方法

对KMP算法掌握不好,对其中的一些步骤有些纠结,在网络上找到一篇关于KMP算法的博客,很有帮助
详解KMP算法

posted @ 2020-03-28 14:53  阿尔法个贝塔  阅读(219)  评论(0)    收藏  举报