定义
算法处理对应的数据,这些被处理的数据,都必须按照一定的规则进行组织,当这些数据之间存在一种或多种特定关系的时候,我们就称这种关系为结构
分类
- 线性结构:数据与元素之间是一对一的结构,每个数据元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继;
- 树性结构:数据结构中的元素存在一对多的关系,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(双亲节点)及下一层的多个元素(孩子节点)相关;
- 网状结构:数据结构中的元素存在多对多的关系,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。
1.线性结构
1.1线性表
若干个数据组成的集合称作线性表,只有一个“首元素”,只有一个“末元素”,除末元素之外,其余元素均有唯一的后继元素,除首元素之外,其余的元素均有唯一的前驱元素。总结:线性表操作方式:添加结点,插入结点,删除结点,查找结点,遍历结点,统计结点。
- 1.1.1顺序线性表:
操作步骤:
1.1.1.1 定义顺序队列结构
1.1.1.2 初始化队列
1.1.1.3 获取队列状态
1.1.1.4 入队操作
1.1.1.5 出队操作
1.1.1.6 获取队头元素 - 1.1.2链式线性表(动态存储分配内存,包含数据模块和指针)
1.1.2.1 定义链表结构
1.1.2.2 添加结点至尾部
1.1.2.3 添加结点至首部
1.1.2.4 插入结点
1.1.2.5 查找结点
1.1.2.6 删除结点
1.1.2.7 链表的长度
- 1.1.1顺序线性表:
1.2队列(先进先出)
队列是一种特殊的线性表,至允许在表的前端(队头)进行删除操作,在表的后端(队尾)进行插入操作。- 1.2.1
1.2.1.1 定义顺序队列结构(data ,head ,tail)
1.2.1.2 初始化队列
1.2.1.3 获取队列状态
1.2.1.4 入队操作
1.2.1.5 出队操作
1.2.1.6 获取队头元素
- 1.2.1
1.3栈(后进先出)
栈是一种线性表的特殊形式,是按照(Last In First out,LIFO)的原则处理数据。只有入栈(Push,即将数据保存到栈顶,先移动指针,然后将数据保存到栈顶指针所指的位置)和出栈(Pop,即将栈顶的数据弹出,然后修改栈顶指针,使其指向栈中的下一个元素)。- 1.3.1
1.3.1.1 定义顺序栈结构(data ,head ,tail)
1.3.1.2 初始化栈
1.3.1.3 判断栈的状态
1.3.1.4 入栈操作
1.3.1.5 出栈操作
1.3.1.6 获取栈顶元素
- 1.3.1
2.树性结构
2.1树(层次结构)
它是由N(N>=1)个有限节点组成一个具有层次关系的集合.- 2.1.1二叉树
- 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树
- 完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树
2.1.1.1 定义二叉树链式结构
2.1.1.2 初始化二叉树
2.1.1.3 添加结点到二叉树
2.1.1.4 获取二叉树的左右子树
2.1.1.5 获取二叉树的状态
2.1.1.6 在二叉树中查找
2.1.1.7 清空二叉树
- 2.1.1二叉树
2.2二叉树的遍历
- 先序遍历 :先访问根节点,再按先序遍历左子树,最后按先序遍历右子树(DLR)
- 中序遍历 :先按中序遍历左子树,再访问根节点,最后按中序遍历右子树(LDR)
- 后序遍历 :先按后序遍历左子树,再按后序遍历右子树,最后访问根节点(LRD)
- 按层遍历 :按二叉树的层进行遍历,可更直观的从图中得出遍历的结果。
2.3线索二叉树
- 先序线索二叉树 :(DLR)
- 中序线索二叉树 :(LDR)B F D A C G E H
- 后序线索二叉树 :(LRD)
- 2.4最优二叉树(赫夫曼树)
- 2.4.1带权路径WPL
- 2.4.2赫夫曼编码(权值是:0,1)
3.网状结构
3.1图(网状关系)
图是一种复杂的非线性结构。图G由两个集合V(顶点Vertex)和E(边Edge)组成,定义为G=(V,E).- 无向图
- 有向图
3.2 图的存储
- 邻接矩阵(1表示有链接0表示无链接,缺点:浪费空间)
- 邻接表
3.3图的遍历
- 3.3.1广度优先遍历
3.3.1.1 从图中选择一个未被访问的顶点Vi,将其标记为已访问
3.3.1.2 接着依次访问Vi的所有未被访问的邻接点,并标记为已被访问
3.3.1.3 从这些邻接点出发进行广度优先遍历,直至图中所有和Vi有路径相桶的顶点都被访问过。
3.3.1.4 重复(3.3.1到3.3.3)直到所有顶点都被访问 - 3.3.2深度优先遍历
3.3.2.1 从图中选择一个未被访问的顶点Vi,将其标记为已访问
3.3.2.2 接着依次访问Vi的一个未被访问的邻接点,进行深度优先遍历
3.3.2.3 重复(3.3.2.2),直至图中所有和Vi有路径相桶的顶点都被访问过。
3.3.2.4 重复(3.3.1到3.3.3)直到所有顶点都被访问