数据结构
思维导图

绪论
基本概念
-
数据
- 信息的载体
-
数据元素
- 数据的基本单位
-
数据项
- 是构成数据元素的不可分割最小单位。学生记录是一个数据元素,由学号姓名这些数据项共同组成
-
数据对象
具有相同性质的数据元素的集合,是数据的子集
-
数据类型
-
数据类型是一个值的集合和定义在集合上的一组操作的总称。
-
原子类型
- 值不可分的数据类型
-
结构类型
- 可分的
-
抽象结构类型
- 抽象数据组织及与之相关的操作
-
数据结构三要素
-
算法的设计取决于所选的逻辑结构,而算法的实现依赖于所选的存储结构
-
逻辑结构
-
数据元素之间的关系,分为线性结构和非线性结构
-
线性结构
- 线性表,栈,队列等
-
非线性结构
- 树、图、集合等
-
集合(无关系)、线性结构(一对一)、树形结构(一对多)、图状结构或网状结构(多对多)
-
-
存储结构
-
顺序存储
- 可以随机存取,只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
-
链式存储、
- 只能顺序存储。不会出现碎片现象,能充分利用所有存储单元,指针要占用额外空间
-
索引存储
- 检索速度快,附加的索引表额外占用存储空间。增加和删除数据时也要修改索引表,会消耗不少时间
-
散列存储
- 也叫哈希存儲。根据元素的关键字直接计算出该元素的存储地址,
- 其优点是检索、增加和删除结点的操作都很快:
- 缺点是若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销。
-
-
数据的运算
运算的定义针对逻辑结构,运算的实现针对逻辑结构
复杂度分析
算法概念与特性
- 有穷性、确定性、可行性 、输入、输出
好的算法满足
- 正确性、可读性、健壮性、效率与低存储量需求
总结:
- 逻辑结构:栈,线性表,队列
- 顺序表,单链表,邻接表,单双链表,循环链表。
还有一些名词:顺序存储,链式存储,索引存储,散列存储(哈希存储)。
线性表
顺序存储
- 顺序表
链式存储
- 单链表、双链表、循环链表、静态链表
总结几个判空
- 没有头结点的链表判空 head==null
- 有头结点的链表判空 head->next == null
- 循环单链表的判空: L->next =L
- 循环双链表的判空: L-next == L && L->prior==L
栈和队列
操作受限
-
栈
-
基本概念
-
栈的数学性质
- 出栈元素的不同排列个数为
(n个数的排列为A!,计算完排列之后别忘了取出不合适的)
- 出栈元素的不同排列个数为
-
基本操作
-
-
顺序栈
-
操作
-
S.top。S.top=-1
-
进栈
- 栈未满的情况下:S.data[++S.top]=x;
-
出栈
- 栈不空的情况下:x=S.data[S.top–];
-
判空
- S.top==-1
-
栈满
- S.top==MaxSize-1
-
栈长
- S.top+1
-
-
S.top=0时,即top指向栈顶元素的下一位置。则入栈操作变成S.data[S.top++]=x,出栈为x=S.data[–S.top]
-
-
区分top指向的是当前栈顶元素还是下一元素
-
-
链栈
-
共享栈
-
初始指针
- top0=-1,top1=Maxsize
-
栈满
- top1-top0=1
-
进栈操作
- 0号栈先加一再赋值,一号栈先赋值再加一
-
出栈
- 相反
-
特点
- 更好的利用存储空间,避免上溢
-
-
-
队列
-
基本概念
-
队首出(删除),队尾入队(增加)
-
判空
- Q.frontQ.rear0
- 子主题 2
-
判满
- 无法判断,继而引出循环队列
-
-
循环队列
-
三种区分队空与队满方法
-
牺牲一个元素
-
队满
- (Q.rear+1)%MaxSize ==Q.front
-
队空
- Q.front==Q.rear
-
元素个数
- (Q. rear-Q. front+MaxSize)% Maxsize
-
-
增设表示元素个数
-
增设tag数据成员
-
P79页循环队列出入队示意图
-
-
-
链式队列
-
双端队列
- 输出受限的双端队列
- 输入受限的双端队列
-
推广
-
数组
-
一维数组
-
多维数组
-
压缩矩阵
-
对称矩阵
-
上下三角矩阵
- 存储元素个数比对称矩阵多一
-
三对角矩阵
-
特点
- |i-j|>1
-
-
按行优先和按列优先
-
- <
-
-
数据结构精要

本文深入讲解数据结构基础知识,包括逻辑结构、存储结构、算法设计等内容。涵盖了线性表、栈、队列、树、二叉树、图等多种数据结构及其应用,同时探讨了排序、查找等经典算法。
最低0.47元/天 解锁文章
4438





