830数据结构概念考点
数据结构概念考点
- 在数据结构按逻辑结构可以分为:线性结构和非线性结构
- 根据数据元素之间关系的不同特性,基本逻辑结构分为集合、线性结构、树形结构、图形结构
- 数据的基本单位是数据元素,数据的最小单位是数据项
线性表
- 线性结构中元素之间存在一对一的关系
- 线性表采用链式存储时,其地址连续与否都可以;采用顺序存储时,其地址必须是连续的
链表
- 单链表中设置头结点的作用是在表头进行插入或删除操作时无需进行额外操作
- 循环链表的主要优点是从任一结点出发可以访问整个链表
栈
- 栈是一种操作受限的线性表,只能在线性表的一端进行插入和删除操作,访问按照先进后出的原则
- n的元素以某种顺序入栈,所有可能的出栈序列总和为\({1\over{n+1}}C^n_{2n}\) (卡特兰数)
队列
-
队列也是一种操作受限的线性表,仅允许在表的一端进行插入,另一端进行删除,插入端称为队尾rear,删除端称为队头font
-
队列操作的原则是先进先出(FIFO)
-
循环队列的判空条件
Q.front==Q.rear,队满条件(Q.rear+1)%Maxsize== Q.front
矩阵的压缩存储
- 稀疏矩阵一般的压缩存储方法主要有:三元组和十字链表
树
-
树形结构中元素之间存在一对多的关系
-
总分支数=总结点数-1
二叉树
-
\(n_0=n_2+1\)
-
任何一颗二叉树的叶子节点在前序、中序、后序遍历序列中的相对次序不变
-
如果二叉树T2由树T1转换而来,则树的先序对应二叉树的先序
-
n个结点的二叉链表存储的二叉树中,空链域的个数为n+1
完全二叉树
-
一棵深度为 k 且有\(2^k-1\)个结点的二叉树称为满二叉树
-
高度为 h,有 n 个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为 1~n 的结点一 一对应时,称为完全二叉树
-
具有 n 个结点的完全二叉树的深度为\(\lfloor log_2n \rfloor+1\)
-
若\(i \leq \lfloor n/2 \rfloor\),则结点 i 为分支结点,否则为叶子结点
线索二叉树
- 线索二叉树的左线索指向前驱结点,右线索指向后继结点
T->ltag=1表示T所指结点没有左子树,T->lchild指向结点的直接前驱
二叉排序树BST
-
定义:二叉排序树或是空树,或是满足以下性质的二叉树
-
若它的左子树不为空,则左子树上所有关键字的值均不大于根关键字的值
-
若它的右子树不为空,则右子树上所有关键字的值均不小于根关键字的值
-
左右子树各是一颗二叉排序树
-
-
对二叉排序树进行中序遍历,可以得到一个递增有序序列
平衡二叉树
-
左右子树的高度差的绝对值不超过1的二叉排序树
-
平均查找长度\(O(log_2n)\)
哈夫曼树
- 带权路径长度WPL最短的二叉树称为哈夫曼树
- n个权值构成的哈夫曼树共有2n-1个结点
- 前缀编码:没有一个编码是另一个编码的前缀
图
- 图型结构中元素之间存在多对多的关系
图的基本概念
-
有向完全图
具有 n(n-1) 条边的有向图
-
无向完全图
具有n(n-1)/2条边的无向图
-
连通图
任意两个顶点之间都连通
n个顶点的无向连通图至少有n-1条边
-
连通分量
即极大连通子图
-
强连通图
任意两个顶点之间都有路径,否则将其中的极大强连通子图称为强连通分量
-
简单路径、简单回路
在路径序列中,顶点不重复出现的路径称为简单路径;除第一个和最后一个顶点外,其余顶点不重复出现的回路称为简单回路
图的存储
邻接矩阵
- 若使用邻接矩阵表示某有向图,则矩阵中非零元素的个数等于图中边的数目;若为无向图,则为边的数目的两倍
邻接表
- n个顶点,e条边的有向图,建立图的算法的时间复杂度为\(O(n+e)\)
- 所需存储空间:无向图\(O(|V|+2|E|)\),有向图\(O(|V|+|E|)\)
图的遍历
广度优先搜索BFS
-
需要辅助队列,n个顶点均需入队一次,最坏情况下空间复杂度\(O(|V|)\)
-
采用邻接表存储时,时间复杂度\(O(|V|+|E|)\)
-
采用邻接矩阵存储时,时间复杂度\(O(|V|^2)\)
深度优先搜索DFS
-
连通图的深度优先搜索可以采用栈来暂存刚访问过的顶点,空间复杂度\(O(|V|)\)
-
采用邻接表存储时,时间复杂度\(O(|V|+|E|)\)
-
采用邻接矩阵存储时,时间复杂度\(O(|V|^2)\)
最小生成树
- 带权无向图的最小生成树不唯一,仅当各边权值都不相等时最小生成树唯一
- 最小生成树的边的权值之和总是唯一的,而且是最小的
- 最小生成树的边数为顶点数减1
- Prim算法时间复杂度为\(O(|V|^2)\),不依赖于|E|,适用于边稠密图,
- Krustkal算法时间复杂度为\(O(|E|log|E|)\),更适合边稀疏图
拓扑排序
- 拓扑排序可以判断一个有向图是否有环
关键路径
-
在AOE网中,完成工程的最短时间是从源点到汇点的最长路径的长度
-
若网中有几条关键路径,提高一条关键路径上的活动的速度,不能导致整个工程缩短工期,除非是公共活动
查找
顺序查找
- 每个元素的平均查找长度为\((n+1)/2\),时间复杂度为O(n)
折半查找
- 时间复杂度\(O(\log_2(n))\)
- 折半查找要求线性表必须以顺序方式存储,且结点按关键字有序排序
B-树
- m阶B-树中每个结点最多有m棵子树,m-1个关键字,非根非叶结点至少有\(\lceil m/2 \rceil\)棵子树
- B-树和B+树都能有效地支持随机查找,B+树还可以支持顺序查找
- 插入元素过程中若引起树根结点的分裂,则新树高度为原树高度加 1
- B树是所有结点的平衡因子均等于0的多路平衡查找树
散列/哈希表
-
评判一个散列函数优劣的两个主要条件是:计算方便 和散列地址分布均匀
-
在哈希查找方法中,要解决两方面的问题,分别是构造一个合适的哈希函数和确定解决地址冲突的办法
-
冲突:散列函数把两个或两个以上的不同关键字映射到同一地址
排序
-
不稳定排序口诀:快些选一堆朋友(快速排序、希尔排序、简单选择排序,堆排序)
-
快些以\(nlog_2n\)速度归队
(快速排序、希尔排序、归并排序、堆排序时间复杂度\(O(nlog_2n)\)
| 最好 | 平均 | 最坏 | 空间 | 稳定性 | |
|---|---|---|---|---|---|
| 直接插入 | \(O(n)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | √ |
| 冒泡排序 | \(O(n)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | √ |
| 简单选择 | \(O(n^2)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | × |
| 希尔排序 | \(O(1)\) | × | |||
| 快速排序 | \(O(nlog_2n)\) | \(O(nlog_2n)\) | \(O(n^2)\) | \(O(log_2n)\) | × |
| 堆排序 | \(O(nlog_2n)\) | \(O(nlog_2n)\) | \(O(nlog_2n)\) | \(O(1)\) | × |
| 2路归并 | \(O(nlog_2n)\) | \(O(nlog_2n)\) | \(O(nlog_2n)\) | \(O(n)\) | √ |
| 基数排序 | \(O(d(n+r))\) | \(O(d(n+r))\) | \(O(d(n+r))\) | \(O(r)\) | √ |

浙公网安备 33010602011771号