
数据结构
数据结构
Alicepus
一只可爱的大一学生喔~~
展开
-
排序算法思想
不是吧?o(n^2)的算法也要讲?1.冒泡排序辅助记忆:i∈[0,N-1) //循环N-1遍j∈[0,N-1-i) //每遍循环要处理的无序部分swap(j,j+1) //两两排序(升序/降序)// c++void bubble_sort(T arr[], int len) { int i, j; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 -原创 2020-07-05 22:37:41 · 180 阅读 · 0 评论 -
链表类算法
单向链表c++在这里插入代码片Javapackage 数据结构与算法;import java.util.*;public class 链表 { public static void main(String[] args) { /* LinkedList<String> myList = new LinkedList<String>(); myList.add("1"); myList.add("2"); myList.add("3");原创 2020-07-04 19:58:27 · 178 阅读 · 0 评论 -
链表的专题
文章目录1 输出单链表的第K个节点两次遍历法:递归法:双指针法2.1 链表中存在环快慢指针法:2.2 定位环入口2.3 计算环长度3 有序链表合并常规解决递归解决4 翻转链表迭代法递归法1 输出单链表的第K个节点两次遍历法:(1)遍历单链表,遍历同时得出链表长度 N 。(2)再次从头遍历,访问至第 N - K 个节点为所求节点。/*计算链表长度*/int listLength(ListNode* pHead){ int count = 0; ListNode* pCur = pH转载 2020-07-06 08:14:44 · 145 阅读 · 0 评论 -
KMP算法
public class KMP { private int[][] dp; private String pat; public KMP (String pat) { this.pat = pat; int M = pat.length(); // dp[状态][字符] = 下个状态 dp = new int[M][256]; // base case dp[0][pat.charAt(0)] = 1; // 影子状态 X 初始为 0 int X = 0; /原创 2020-07-13 08:12:20 · 176 阅读 · 0 评论 -
深度优先搜索(DFS) & 广度优先搜索(BFS)总结
文章目录深度优先1.算法模板2.例题2.1 n 皇后问题(洛谷)2.2 素数环(洛谷)2.3 全排列(洛谷)2.4 马的遍历(洛谷)广度优先1.算法模板2.例题2.1 Dungeon Master(洛谷)2.2走迷宫2.3 Knight Moves(洛谷)深度优先1.算法模板void dfs(int i) // 核心代码{ if ( 1.到达推出条件 ) { // 搜索结束, 退出 } for ( 2.遍历所有可能 ) { if ( 3.满足走原创 2020-07-14 20:48:30 · 371 阅读 · 0 评论 -
树的专题(构造与理论)
各类树的构造基本的二叉树package 数据结构与算法;// 根节点// 父节点// 子节点// 度(子节点个数)// 节点的权(值)// 叶子节点(无子节点)// 子树// 层// 树高度 ,最大树深度// 森林public class 树结构 { public static void main(String[] args) { // 创建一棵树 BinaryTree binTree = new BinaryTree(); // 创建一个根节点 TreeN原创 2020-07-04 23:39:47 · 146 阅读 · 0 评论 -
二叉树的专题
1.数据结构:class TreeNode{ int val; //左孩子 TreeNode left; //右孩子 TreeNode right;}2.二叉树的最大深度int maxDeath(TreeNode node){ if(node==null){ return 0; } int left = maxDeath(node.left); int right = maxDeath(node.right);转载 2020-07-05 16:05:16 · 151 阅读 · 0 评论 -
散列表
解决散列冲突 :1. 开放寻址法线性探测二次线性探测在 1 的基础上,探测第二次再哈希使用不同的哈希算法来存放(可能用多个)2. 链地址法如图,一次hash后链式存储原创 2020-07-17 10:10:20 · 117 阅读 · 0 评论 -
并查集模板
#include <iostream>#define ll long longusing namespace std;int father[5010];void initial(int n) { for(int i=0; i <= n; i++) father[i] = i;}int find(int x) { return x == father[x] ? x : father[x] = find(father[x]);}bool isSame(in原创 2020-07-04 17:19:45 · 131 阅读 · 0 评论 -
图论_三类最短路径模板
文章目录1.floyd2.dijkstra1.floyd#include<bits/stdc++.h>using namespace std;int main(){ int e[10][10] int n, m; int t1, t2, w; //用inf(infinity的缩写)存储一个我们认为的正无穷值 //读入n和m,n表示顶点个数,m表示边的条数 scanf("%d %d", &n,&m); //初始化 for(int i = 1; i <原创 2020-07-12 09:12:22 · 169 阅读 · 0 评论 -
图论_最小生成树算法
文章目录1.Kruskal2.Prim1.Kruskal#include<iostream>using namespace std;struct Edge{ int u,v,w; bool operator <(Edge K)const{ return w<K.w; }} edge[N];int n,m;int father[N],res;int mst=0;int Find(int x){ if(father[x转载 2020-07-14 21:19:29 · 171 阅读 · 0 评论 -
拓扑排序与关键路径
文章目录理论AOV 网判定任意一条拓扑排序字典序最小的一条路径【例题】1.拓扑排序的判定2.输出拓扑排序结果3.拓扑排序的应用理论拓扑排序(只适用于AOV网(有向无环图))运用 : 事务先后(非唯一)拓扑排序思路:1.选择一个入度为 0 的点 并输出2.从AOV网中删除此顶点以及此顶点为起点的所有关联边3.重复上述两步,直到不存在入度为0的顶点为止4.如果书粗糙顶点数小于AOV网中的顶点数,则输出“有回路信息”,否则输出的顶点序列就是一种拓扑排序算法实现:1.数据结构: indgr[i]转载 2020-07-15 22:15:05 · 543 阅读 · 0 评论