数据结构与算法三天时间够吗?2021.01.19晚-?? 对了 记得总结博客项目怎么做的,自己整理下;
数据结构与算法理论学习之线性表
数据与算法内容分为三个部分,逻辑结构、存储结构、算法。
逻辑结构
逻辑结构:数据与数据之间的关系
数据结构的基本概念
- 按照某种逻辑关系组织起来的一批数据,如线性表、树、图;
- 存储结构:按照一定方式放在计算机中:如数组、链表;
- 算法:在这组数据上定义了运算的集合:如插入、删除、查找、排序等;
数据的逻辑结构
1. 线性结构
元素之间的关系是一对一的;
1.1 线性表
上面的元素a1,a2,…,an等可以是复杂数据项;
1.2 线性表的存储结构
顺序存储结构-----顺序表
元素地址计算,其中len是每个元素所需空间大小
非顺序存储结构-链式存储结构------链式表
- 单链表
非顺序存储,物理位置不一定相邻;
在bc之间插入x,通过指针指向来进行插入;
- 单向循环列表
- 双向链表
在双向链表中,结点都有两个指针域,一个用于存放前继结点地址,一个用于存放后继结点地址;
- 双向循环链表
- 静态链表(前面几种都是动态链表)
类似于数组,但是也有两部分组成,数据和地址,如下图所示
1.3 线性表的算法
顺序存储结构的算法
-
插入算法
插入算法的思想
对于插入算法的时间复杂度与插入数据的位置有关,平均时间复杂度为O(n);
插入算法1:将数据出入到有序列表的合适位置,首先要查找到插入位置,然后做插入操作;插入数据之后有序列表要任然有序 -
删除算法
删除线性表中的第i个元素,并且返回删除的数据值;
算法思想:
删除算法元素平均移动次数是表长的一半;删除算法平均时间复杂度O(n)
删除算法1
非顺序存储结构的算法 -
定位算法
- 单向链表的定位
功能:在链表中查找第i个结点,若存在返回第i个结点地址,否则返回null空;
算法思想:从头结点开始逐个查找并计数,直到找到第i个结点为止;
算法分析:定位算法执行,平均移动表长一半,算法时间复杂度为O(n);
- 单链表的插入算法
- 功能:在线性表第i处插入其数值为x新结点;
- 算法思想:找到第i-1个结点,在第i-1个结点后面插入新的结点;
- 算法分析:单链表插入只需要更改后继结点;
- 双向链表的插入算法
- 功能:在双向链表的第i个结点(p结点)插入新的结点s;
- 算法思想:需要更改四个指针指向,要更改s的前驱,后继指针;
- 删除算法
- 单链表的删除算法
功能:删除单链表的第i个结点,(p指向第i-1个结点);
算法思想:单向链表删除只需要更改后继指针; - 双向链表的删除算法
功能:删除第i个结点(p结点);
算法思想:需要找到第i个结点P;
链表的应用
- 多项式相加
1.4 特殊的线性表栈
栈是特殊的线性表,是操作受限的线性表,是一种先进后出的线性表;
- 栈的顺序存储结构:
判断栈满,栈空条件;
- 栈的四种操作
入栈
出栈
判断栈满
判断栈空 - 栈的链式存储结构
链式存储结构栈进栈算法思想
链式存储结构栈出栈算法思想
- 栈的应用
例子1
例子2
1.5 特殊的线性表队列
- 队列的基本概念
队列是先进先出的,在表的一端(队尾)进行插入,另外一端(对头)进行删除;相比于栈,栈一种入栈序列可以对应多种出栈序列,队列一种入队序列就只有一种出队序列,如入队序列1,2,3,4,对应的出队序列就是1,2,3,4;
队列的几种基本运算
- 循环队列(顺序存储)
循环队列解决了两个问题一个是假溢出问题一个是提高了效率
循环队列指针移动问题;
循环队列条件判断问题:
入队算法需要先判断队列是否已满,出队算法需要判断队列是否为空;
算法分析:T(n)=O(1); - 链式队列(非顺序存储)
在队尾入队,队首出队:队首出队如下
- 队列的应用
循环队列例子:报数问题
算法思想:
1.6 特殊的线性表串
- 串的基本概念
串是一种特殊的线性表;
- 串的模式匹配
- BF算法(朴素算法)
算法分析
最好的情况时间复杂度为O(m),其中m是子串的长度;
最坏情况时间复杂度为O(mn),其中n是主串长度;
平均时间复杂度也是O(mn);
- KMP算法
- 串的应用
2. 树型结构
元素之间的关系一对多;树型结构如图所示
3. 图状结构
元素之间关系多对多的;图状结构如图所示
4.算法分析
-
算法时间复杂度
算法中各语句执行时间总和;时间复杂度类型如下
-
算法空间复杂度
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。