[NEFU 数据结构] 第 2 章 线性表 知识点整理
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NEFU 数据结构] 第 2 章 线性表 知识点整理相关的知识,希望对你有一定的参考价值。
[NEFU 数据结构] 第 2 章 线性表 知识点整理
阅读须知
-
需求指向:
此博客用于应付NEFU数据结构考试,基于题目进行整理,不适合想深入学习数据结构与算法艺术的同学。 -
前置知识:
C语言 -
参考资料:
数据结构C语言版|第二版 严蔚敏
数据结构C语言版习题解析与实验指导|第二版 严蔚敏
一、思维导图
二、考点
2.1 线性表的定义和特点
- 存在唯一的一个被称作第一个的数据元素
- 存在唯一的一个被称作最后一个的数据元素
- 除第一个之外,结构中的每个数据都只有一个前驱
- 除最后一个之外,结构中的每个数据都只有一个后继
2.4 线性表的顺序表示和实现
- 逻辑上相邻的元素,其物理次序也是相邻的
- L O C ( a i ) = L O C ( a 1 ) + ( i − 1 ) ∗ L LOC(a_i)=LOC(a_1)+(i-1)*L LOC(ai)=LOC(a1)+(i−1)∗L
- 线性表的存储结构是一种随机存储结构
- 顺序表的基本操作实现
操作 | 时间复杂度 | 其他 |
---|---|---|
初始化 | 申请空间,构建空表 | |
取值 | O ( 1 ) O(1) O(1) | e [ i − 1 ] e[i-1] e[i−1]为第i个元素 |
查找 | O ( N ) O(N) O(N) | A S L = n + 1 2 ASL=\\frac {n+1} 2 ASL=2n+1 |
插入 | O ( N ) O(N) O(N) | E i n t = n 2 E_{int}=\\frac n2 Eint=2n , 第i个位置插入移动 n − i + 1 n-i+1 n−i+1个 |
删除 | O ( N ) O(N) O(N) | E d e l = n − 1 2 E_{del}=\\frac{n-1} 2 Edel=2n−1 , 删除第i个移动 n − i n-i n−i个 |
2.5 线性表的链式表示和实现
- 存储单元可以连续也可以不连续
- 结点包含数据域和指针域
- 首元结点:存储第一个数据元素的结点
- 头结点:首元结点之前附设的结点
- 头指针:指向链表中第一个结点的指针
- 单链表是非随机存取的存储结构,也称为顺序存取
- 所有结点通过指针的链接而组织成单链表
- 单链表基本操作的实现
操作 | 时间复杂度 | 其他 |
---|---|---|
初始化 | ||
取值 | O ( N ) O(N) O(N) | A S L = n − 1 2 ASL=\\frac {n-1} 2 ASL=2n−1 |
查找 | O ( N ) O(N) O(N) | |
插入 | O ( 1 ) O(1) O(1) | 确定位置还是 O ( N ) O(N) O(N) |
删除 | O ( 1 ) O(1) O(1) | 确定位置还是 O ( N ) O(N) O(N) |
创建(前插法) | O ( N ) O(N) O(N) | |
创建(后插法) | O ( N ) O(N) O(N) | |
创建一个包含N个结点的有序单链表 | O ( N 2 ) O(N^2) O(N2) | |
查找直接后继 | O ( 1 ) O(1) O(1) | |
查找前驱 | O ( N ) O(N) O(N) | 双向链表优化 |
- 循环链表中止条件:p!=L,p->next!=L
- 循环链表设立尾指针不设头指针,两个线性表合并复杂度 O ( 1 ) O(1) O(1)
- 双向链表插入删除操作复杂度为 O ( N ) O(N) O(N)
2.6 顺序表和链表的比较
- 存 储 密 度 = 数 据 元 素 本 身 占 用 存 储 量 结 点 结 构 占 用 的 存 储 量 存储密度=\\frac {数据元素本身占用存储量} {结点结构占用的存储量} 存储密度=结点结构占用的存储量数据元素本身占用存储量
- 顺序表存储密度1,链表存储密度小于1
- 背下面两个表
2.7 线性表的应用
- 线性表的合并: O ( n ∗ m ) O(n*m) O(n∗m)
- 有序表的合并
仍然按照原序排列:最好 O ( m i n ( m , n ) ) O(min(m,n)) O(min(m,n)),最坏 O ( m + n ) O(m+n) O(m+n)
按照原序逆序排列: O ( m + n ) O(m+n) O(m+n)
以上是关于[NEFU 数据结构] 第 2 章 线性表 知识点整理的主要内容,如果未能解决你的问题,请参考以下文章