系列文章目录
文章目录
- 前言
- STL-stack
- C语言自定义栈(数组)
- 应用
- 队列
- 实现
- 应用
- 遍历
- 优先队列(堆)
- 树
- 二叉树
- 前缀树
- 哈希表(Map实现)
- 搜索
- 广度优先搜索
- 深度优先搜索(dfs)
- 图的存储
- 邻接矩阵
- 邻接表
- 最短距离
- Dijkstra-迪杰斯特拉算法
- Floyd-佛洛依德算法
- 总结
前言
数据结构不是机试的重点,主要用于优化算法效率。
栈的应用
STL-stack
C语言自定义栈(数组)
- 数组
- 栈顶为0
- 入栈
- ++top
- 出栈
- top--
队列
实现
- 数组
- 头和尾
应用
遍历
- 树型结构或网格结构的数据
- 用队列实现树的层序遍历
- 一般是递归遍历
- 离根结点越近越先遍历到
- 用队列实现树的层序遍历
优先队列(堆)
- 小根堆
- 根上的数据最小
- 大根堆
- 根上的数据最大
- 堆实现
树
二叉树
- 考试时使用静态的二叉树
- 二叉排序树(map的底层实现)
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define N 100005
struct Node
{
int val;
int l, r;
}tree[N];
void dfs(int root)
{
//前序遍历
//printf("%d", tree[root].val);
if(tree[root].l) dfs(tree[root].l);
//中序遍历
//printf("%d", tree[root].val);
if(tree[root].r) dfs(tree[root].r);
//后序遍历
//printf("%d", tree[root].val);
}
前缀树
- 不常考
- 字母数
哈希表(Map实现)
- 不常考
- 题目:1645-正方形
搜索
- 最高频考点之一
- 最考验代码能力
- 理解代码
广度优先搜索
由近及远,像wifi信号
深度有限搜索
一竿子插到底
迷宫
广度优先搜索
- 队列实现
深度优先搜索(dfs)
- 递归
bfs
图的存储
邻接矩阵
- 稠密图
邻接表
- 节省存储空间
- 稀疏图
最短距离
如果某个节点位于从起点到终点的最短距离路径上,
Dijkstra-迪杰斯特拉算法
- 基于贪婪算法
- 从起点出发逐步找到通向终点的路径
- 从起点出发找到起点临近结点的最短距离
- 然后一次次向远处延申
- 最短路径被途径所有结点所共享
- 和最小生成树中的普利姆算法类似
实现过程
- 将所有顶点分为两个集合
- 已选顶点集合
- 未选顶点集合
- 不断更新三个顶点列表,以实现两个集合的转换
- 列表一:存储该结点是否已被访问的信息
- False-未被访问
- Ture-已被访问
- 列表二:从起点出发到每个结点的距离信息
- 列表三: 存储每个结点被访问时的双亲结点信息
- 两个结点确定一条边
- 列表一:存储该结点是否已被访问的信息
Floyd-佛洛依德算法
- 基于动态规划
- 通过循环迭代,同时找出任意两个点间的最短距离
图论最短距离(Shortest Path)算法动画演示-Dijkstra(迪杰斯特拉)和Floyd
总结
无