数据结构与算法理论学习之线性表

本文详细介绍了数据结构中的线性表、栈、队列和串的概念与操作,包括逻辑结构、存储结构和相关算法。重点讲解了线性表的插入、删除算法,以及栈和队列的实现与应用,如栈的先进后出特性在解决问题中的运用,队列的先进先出原则。同时,还探讨了字符串的模式匹配算法,如朴素算法和KMP算法。此外,还涉及到了树型结构和图状结构的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构与算法三天时间够吗?2021.01.19晚-?? 对了 记得总结博客项目怎么做的,自己整理下;



数据与算法内容分为三个部分,逻辑结构、存储结构、算法。

逻辑结构

逻辑结构:数据与数据之间的关系

数据结构的基本概念

  1. 按照某种逻辑关系组织起来的一批数据,如线性表、树、图;
  2. 存储结构:按照一定方式放在计算机中:如数组、链表;
  3. 算法:在这组数据上定义了运算的集合:如插入、删除、查找、排序等;

数据的逻辑结构

1. 线性结构

元素之间的关系是一对一的;

1.1 线性表

在这里插入图片描述
上面的元素a1,a2,…,an等可以是复杂数据项;

1.2 线性表的存储结构

顺序存储结构-----顺序表
在这里插入图片描述
元素地址计算,其中len是每个元素所需空间大小
在这里插入图片描述
非顺序存储结构-链式存储结构------链式表

  • 单链表
    在这里插入图片描述
    非顺序存储,物理位置不一定相邻;
    在bc之间插入x,通过指针指向来进行插入;
    在这里插入图片描述
  • 单向循环列表
    在这里插入图片描述
  • 双向链表
    在双向链表中,结点都有两个指针域,一个用于存放前继结点地址,一个用于存放后继结点地址;
    在这里插入图片描述
  • 双向循环链表
    在这里插入图片描述## 标题
  • 静态链表(前面几种都是动态链表)
    类似于数组,但是也有两部分组成,数据和地址,如下图所示
    在这里插入图片描述
1.3 线性表的算法

顺序存储结构的算法

  • 插入算法
    插入算法的思想
    在这里插入图片描述
    在这里插入图片描述
    对于插入算法的时间复杂度与插入数据的位置有关,平均时间复杂度为O(n);
    插入算法1:将数据出入到有序列表的合适位置,首先要查找到插入位置,然后做插入操作;插入数据之后有序列表要任然有序

  • 删除算法
    删除线性表中的第i个元素,并且返回删除的数据值;
    算法思想:
    在这里插入图片描述
    在这里插入图片描述
    删除算法元素平均移动次数是表长的一半;删除算法平均时间复杂度O(n)
    删除算法1
    在这里插入图片描述
    非顺序存储结构的算法

  • 定位算法

  1. 单向链表的定位
    功能:在链表中查找第i个结点,若存在返回第i个结点地址,否则返回null空;
    算法思想:从头结点开始逐个查找并计数,直到找到第i个结点为止;
    算法分析:定位算法执行,平均移动表长一半,算法时间复杂度为O(n);
    在这里插入图片描述
  • 单链表的插入算法
  1. 功能:在线性表第i处插入其数值为x新结点;
  2. 算法思想:找到第i-1个结点,在第i-1个结点后面插入新的结点;
  3. 算法分析:单链表插入只需要更改后继结点;
  • 双向链表的插入算法
  1. 功能:在双向链表的第i个结点(p结点)插入新的结点s;
  2. 算法思想:需要更改四个指针指向,要更改s的前驱,后继指针;
    在这里插入图片描述
  • 删除算法
  1. 单链表的删除算法
    功能:删除单链表的第i个结点,(p指向第i-1个结点);
    算法思想:单向链表删除只需要更改后继指针;
  2. 双向链表的删除算法
    功能:删除第i个结点(p结点);
    算法思想:需要找到第i个结点P;
    在这里插入图片描述
    链表的应用
  • 多项式相加
    在这里插入图片描述
1.4 特殊的线性表

栈是特殊的线性表,是操作受限的线性表,是一种先进后出的线性表;
在这里插入图片描述

  • 栈的顺序存储结构:
    判断栈满,栈空条件;
    在这里插入图片描述
  • 栈的四种操作
    入栈
    在这里插入图片描述
    出栈
    判断栈满
    判断栈空
  • 栈的链式存储结构
    在这里插入图片描述
    链式存储结构栈进栈算法思想
    在这里插入图片描述
    链式存储结构栈出栈算法思想
    在这里插入图片描述
  • 栈的应用
    例子1
    在这里插入图片描述
    在这里插入图片描述
    例子2
    在这里插入图片描述
1.5 特殊的线性表队列
  • 队列的基本概念
    队列是先进先出的,在表的一端(队尾)进行插入,另外一端(对头)进行删除;相比于栈,栈一种入栈序列可以对应多种出栈序列,队列一种入队序列就只有一种出队序列,如入队序列1,2,3,4,对应的出队序列就是1,2,3,4;
    在这里插入图片描述
    队列的几种基本运算
    在这里插入图片描述
  • 循环队列(顺序存储)
    循环队列解决了两个问题一个是假溢出问题一个是提高了效率
    循环队列指针移动问题;
    在这里插入图片描述
    循环队列条件判断问题:
    在这里插入图片描述
    入队算法需要先判断队列是否已满,出队算法需要判断队列是否为空;
    算法分析:T(n)=O(1);
  • 链式队列(非顺序存储)
    在这里插入图片描述
    在队尾入队,队首出队:队首出队如下
    在这里插入图片描述
  • 队列的应用
    循环队列例子:报数问题
    在这里插入图片描述
    算法思想:
    在这里插入图片描述
1.6 特殊的线性表
  • 串的基本概念
    串是一种特殊的线性表;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 串的模式匹配
  1. BF算法(朴素算法)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    算法分析
    最好的情况时间复杂度为O(m),其中m是子串的长度;
    最坏情况时间复杂度为O(mn),其中n是主串长度;
    平均时间复杂度也是O(m
    n);
    在这里插入图片描述
  2. KMP算法
    在这里插入图片描述
    在这里插入图片描述
  3. 串的应用
    在这里插入图片描述

2. 树型结构

元素之间的关系一对多;树型结构如图所示
在这里插入图片描述

3. 图状结构

元素之间关系多对多的;图状结构如图所示
在这里插入图片描述

4.算法分析

  1. 算法时间复杂度
    算法中各语句执行时间总和;时间复杂度类型如下
    在这里插入图片描述

  2. 算法空间复杂度


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值