408学习笔记——表解数据结构

本文详细探讨了数据结构的各个方面,包括线性表、栈、队列、串、树、图、查找和排序。重点讲解了二叉树、AVL树、红黑树、哈希表和各种排序算法的实现与特性,如冒泡排序、快速排序、归并排序和堆排序。此外,还提到了外部排序的归并策略以及如何处理大规模数据。内容覆盖了《王道论坛-2022年数据结构考研复习指导》的核心知识点,是深入理解数据结构和算法的宝贵资料。

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

涵盖了《王道论坛-2022年数据结构考研复习指导》里的几乎全部内容!

目录

1 绪论

2 线性表

2.1 线性表基本概念

2.2 线性表分类

3 栈和队列

3.1 栈和队列

3.2 特殊矩阵的压缩存储

4 串

5 树

5.1 树的基本概念

5.2 二叉树

5.3 树、森林的遍历

并查集

6 图

6.1 图的基本概念

图的分类

6.2 图的存储

6.3 图的遍历

6.4 图的应用

7 查找

7.1 查找的基本概念

7.2 查找算法

处理散列函数冲突的方法

7.3 B树和B+树

B树的插入和删除

8 排序

8.1 排序的基本概念

8.2 内部排序

8.3 外部排序——归并排序

推荐的Github库


1 绪论

基本概念 解释
数据 数据项(构成数据元素的不可分割的最小单位)∈数据元素(数据的基本单位)∈数据对象Ì数据
数据类型 原子类型、结构类型、抽象数据类型ADT
逻辑结构 线性结构、非线性结构(集合、树、网)
存储/物理结构/映像 顺序(可静态可动态分配,存储密度高,逻辑上相邻的元素物理上也相邻,适合线性结构、图、树等)、链式(比顺序存储更能方便表示各种逻辑结构,结点内的存储单元地址必须连续)、索引、散列/哈希存储(不能反映数据逻辑关系)
数据结构三要素 逻辑结构、物理结构、运算;ADT定义了一个完整的数据结构
存取方式 指读写方式,顺序表可随机存取
算法——特性 有穷性(但程序可无穷)、确定性、可行性、输入、输出
算法——设计 正确性、可读性、健壮性、效率与低存储量要求
算法问题规模n 算法中所有语句之和T(n)是n的函数
基本运算 最深层循环内的语句,其频度与T(n)同量级
时间复杂度T(n) 最坏、最好、平均时间复杂度;一般指最坏情况下估计算法执行时间的一个上界;与实现算法的语言无关;O(n^k)<O(2^n)<O(n!)<O(n^n);递归程序的时间复杂度用递推公式来算
空间复杂度S(n) Space
算法原地工作 空间复杂度=O(1)
同一个算法,实现语言的级别越高,执行效率越低
在相同规模下,复杂度为O(n)的算法在时间上总是优于复杂度为O(2^n)的算法
逻辑结构独立于存储结构,而存储结构不能独立于逻辑结构
既描述逻辑结构,又描述存储结构和数据运算:顺序表、哈希表、单链表
O(m+n)=O(max(m,n))

2 线性表

2.1 线性表基本概念

解释
线性表L L=(a1,a2,…,a_n),a1为表头元素,a_n为表尾元素;除第一个元素外,每个元素有且仅有一个直接前驱
位序 从1开始
其他基本概念 表长、表头元素、表尾元素、直接前驱、直接后继
头指针 若有头结点,则指向头结点
头结点 线性表的表长不含头结点
前插操作 在某结点前面插入一个新结点
后插操作 在某结点后面插入一个新结点
InitList(&L)
Length(L)
LocateElem(L,e)
GetElem(L,i)
ListInsert(&L,i,e)
ListDelete(&L,i,&e)
PrintList(L)
Empty(L) 判空
DestroyList(&L)
合并两个长度分别为m和n的有序表,最坏情况下需要比较m+n-1次

2.2 线性表分类

解释 插入基本操作 插入时间复杂度 删除基本操作 删除时间复杂度
顺序表 动态分配时若空间满,需另开辟一块更大的空间 元素移动 O(n) 元素移动 O(n)
单链表 可头插法、尾插法建立 查找 O(n) 查找 O(n)
双链表 每个结点有两个指针
循环单链表 最后一个结点指向首个结点
循环双链表
静态链表 借助数组的链式存储结构,其指针称为游标
比较操作的时间代价常弱于移动操作

3 栈和队列

3.1 栈和队列

队列/队
操作特性 后进先出LIFO 先进先出FIFO
操作位置 栈顶 队头/首出/离队,队尾入/进队
主要指针 top=栈顶元素 front=队头元素但初始也为0,rear=队尾元素的下一个位置
顺序存储结构 顺序栈、共享栈(减少上溢,有2个指向栈顶元素指针 顺序队列(存在假溢出,即Q.rear==Maxsize时元素无法进队但数组中仍有空位;队空时front==rear==0)、循环队列
链式存储结构 链栈:表头为栈顶的单链表,无头结点 链队列(尾指针rear=队尾结点)、双端队列
出来元素的不同排列个数 Catalan数:1/(n+1) C(2n,n)
应用 括号匹配、表达式求值(编译原理)、中缀表达式变后缀表达式(运算符在操作数后)、递归(DFS)、进制转换、迷宫求解、调用函数及其局部变量 层次遍历、计算机系统中资源分配(如缓冲区)
其他 只可能发生上溢(因为插入删除都在栈顶进行) 栈和队列的逻辑结构相同,都是线性结构
双端队列 进队时前端进的排在后端进的元素前,出队时无论前、后端,先出的排在前面 没限制的双端序列输入序列为1234....n,则输出序列有n!个
输入受限的双端队列 允许在一端进行插入和删除,但在另一端只允许插入
输出受限的双端队列 允许在一端进行插入和删除,但在另一端只允许删除

3.2 特殊矩阵的压缩存储

概念 解释
维界 数组元素的下标的取值范围
上、下三角区 i<j、i>j(也叫对角线以下)
主对角线 i=j
特殊矩阵 对称矩阵、三角矩阵(存储完一方的元素之后,再紧接着存储另一方的常量一次)、对角/带状矩阵、三对角矩阵
稀疏矩阵 逻辑:三元组;存储:数组、十字链表(将行单链表、列单链表结合)
按行优先 先存储行较小的
按列优先 先存储列较小的

4 串

解释
字符串/串 可在串后加一个不计入串长的结束标记字符”\0”
空串Ø
子串/模式串 设为p_1 p_2 … p_m
主串 包含子串的串,设为s_1 s_2 … s_n,子串在主串中的位置从1开始
存储结构 定长顺序(超过预定义长度的串值会被截断)、堆分配存储(地址连续但动态分配)、块链存储(每个结点(即块)可存放一个或多个字符)
串的最小操作子集 串赋值StrAssign、StrCompare、Strlength、Concat、SubString
前缀 除最后一个字符外,所有的头部子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值