数据结构课程
关于数据结果的笔记,例题
陌陌623
BBZZUU
展开
-
打怪升级-世界机器人开发者大赛
很多游戏都有打怪升级的环节,玩家需要打败一系列怪兽去赢取成就和徽章。这里我们考虑一种简单的打怪升级游戏,游戏规则是,给定有 N 个堡垒的地图,堡垒之间有道路相连,每条道路上有一只怪兽把守。怪兽本身有能量,手里的武器有价值。打败怪兽需要的能量等于怪兽本身的能量,而怪兽一旦被打败,武器就归玩家所有 —— 当然缴获的武器价值越高,玩家就越开心。你的任务有两件:帮助玩家确定一个最合算的空降位置,即空降到地图中的某个堡垒,使得玩家从这个空降点出发,到攻下最难攻克(即耗费能量最多)的那个堡垒所需要的能量最小;从这原创 2021-10-15 15:12:45 · 225 阅读 · 0 评论 -
旅游规划-堆优化版本-超精简
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中原创 2021-10-15 09:08:39 · 102 阅读 · 0 评论 -
邻接表代码
简洁版#include <iostream>using namespace std;// 表链接的元素struct node{ // 链接的是那个点 int index; node *next;};// 整个表struct head{ // 第一个链接的结点 node *First;} * rode[100];void Insert(int x, int y){ node *t; t = (node *)malloc原创 2020-06-18 17:43:18 · 310 阅读 · 0 评论 -
堆
文章目录标准复炸版简洁版插入建立把x直接放到i位置上看x所属的子树,让x一直与他的父节点比较直到x为顶或不满足条件退出如果完数据后建立过程和Insert差不多的只不过是向下比较每次看一个子树,从最小的子树的开始最小的子树的根节点是N/2 所以第一个p结点是这个让p和他的儿子比较若要最小堆,则从儿子中找最小的和父亲比满足parent > child 就交换标准复炸版// Inset创建 和 Build创建原创 2020-06-18 15:28:16 · 96 阅读 · 0 评论 -
先序中序转二叉树
文章目录先序中序后序中序先序中序在纸上计算一下他们转的过程就很容易发现规律写程序更简单,只需要计算出每个子树的起始位置计算的时候使用静态链表更为方便#include <iostream>#include <vector>#include <algorithm>#include <map>#include <queue>using namespace std;struct node{ int D原创 2020-06-18 10:53:17 · 579 阅读 · 3 评论 -
矩阵压缩公式和广义表
对称矩阵下标变换公式名称公式上三角元素对应的坐标j(j+1)/2+i下三角元素对应的坐标i(i+1)/2+j广义表做题概念表头:第一个非空元素表尾:其余元素长度:括号数+1深度:括号嵌套数...原创 2020-06-18 09:35:27 · 500 阅读 · 0 评论 -
KMP
KMPKMP算法的计算过程相对来说比较容易假如有两个串,s(原始串)和p(需要从s中查找的子串)它主要节省的时间的原因是,s一直前进,回溯只在p上进行,重要的是p的回溯并不是直接回到p的原点我们来设想一下,如果p的开头是abc,而在p的中间或后面的位置也有abc这三个子串:abcdefabcg如果有一次和s的比对,已经比对到了后面的abc(前面的字符都一样),在比较g的时候出现了问题,那是不是可以从d开始比较呢?而不是傻乎乎的从开头的a开始答案是可以的,因为比...原创 2020-06-18 08:34:32 · 594 阅读 · 0 评论 -
关键路径
复杂版过程1. 先搞出一个拓扑序2. 计算最早开始时间 利用拓扑序从源点开始跑依次求出每个点的邻接点的最早开始时间 若b是a的邻接点Earliest[b] = max(Earliest[a] + a.weight,Earliest[b]);a的最最早开始时间+ a到b的权重 默认最早开始时间是0最早完成时间 : 要等之前的节点最慢的那个完了之后才能开始这个节点3. 由第二步即可知道路径长度,最后一个节点的完成时间就是若还要求关键路径:4.原创 2020-05-29 20:54:23 · 253 阅读 · 0 评论 -
最短路径问题
定义含义最短路径(Shortest Path)在网络中,求两个不同顶点之间的所有路径中,边权重值之和最小的那一条路径源点(Source)第一个顶点终点最后一个顶点(Destination)单源最短路径问题从固定源点出发到其他所有顶点的最短路径多源最短路问题求任意两顶点之间的最短路径...原创 2020-05-26 09:28:42 · 480 阅读 · 0 评论 -
最小生成树 Prim 算法和Kruskal算法 分析加应用
概念 最小生成树 MST一颗无回路的 有 v-1个边 的树包含全部的结点的 生成树生成树:任意加一条边都一定会构成回路Prim 算法让一颗树长大不能由树一次到达的 就定义距离dist为无穷每次假如一个点之后 都要更新dist假如一个点之后 那么剩下的点的权值 就是到达这个树的权值Kruskal将森林合并成树...原创 2020-05-23 08:54:19 · 460 阅读 · 0 评论 -
数据结构复习目录
文章目录图图图拓扑排序强连通原创 2020-05-20 21:05:59 · 250 阅读 · 0 评论 -
强连通代码 - 详细
强连通定义定义在有向图G中,如果两个顶点间至少存在一条互相可达路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。...原创 2020-05-19 21:29:40 · 337 阅读 · 0 评论 -
拓扑排序 - 看这个就完了
文章目录内容繁琐版简洁版1.邻接表 - vector + 队列 + BFS2. 邻接矩阵 + 栈 + BFS3. 邻接表 + DFS内容含义表示一个递进过程每个点之间都有联系而这些联系可以组成一个依次递进的过程比如:有结点A,B,CC结点完成后才能做B结点,而B结点完成后才能进行A结点即C->B->A 这样一个排序的序列所以拓扑排序就是进行这样的一个过程拓扑排序的过程因为是要找一个递进过程所以要先找度为0的结原创 2020-05-19 18:26:11 · 654 阅读 · 0 评论 -
线性探测法和平方探测法 - 哈希表 - 完整代码
直接上代码#include <iostream>#include <cmath>using namespace std;#define MAX 100000 //允许开辟的最大散列表长度typedef int ElementType;typedef int Index; // 散列地址类型typedef Index Position; // 数据所在...原创 2020-04-28 10:08:31 · 1573 阅读 · 0 评论 -
堆中的路径
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上...原创 2020-04-12 15:08:32 · 188 阅读 · 0 评论 -
还原二叉树 简洁
题目给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5题解用先序和中序组成一个二叉树...原创 2020-04-07 17:03:56 · 269 阅读 · 0 评论 -
串的模式匹配PTA
题目给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。输入样例:abcabcabcabcacabxy3abcabcacabcabcabcdabcabcabcabcacabxyz输出样例:abcabcacabxy...原创 2020-03-26 12:13:49 · 2429 阅读 · 0 评论 -
统计二叉树度为2的结点个数 (10分)
利用一个int型变量来标记个数int NodeCount(BiTree T){ int s = 0; if (!T) return 0; if (T->lchild) s += NodeCount(T->lchild); if (T->rchild) s += NodeCount(T...原创 2020-03-25 17:21:55 · 2260 阅读 · 0 评论 -
PTA先序输出叶结点 (10分)
函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Righ...原创 2020-03-25 17:15:23 · 1492 阅读 · 0 评论 -
PTA 二叉树的遍历 (15分)
前面的三个递归比较好做最后一个层次遍历 用数组模拟一下设两头,i是结尾,j是开头j++就是取出元素i++就是放进去元素如果i==j那么就是放完了void InorderTraversal(BinTree BT){ if (!BT) return; InorderTraversal(BT->Left); printf(" %c", B...原创 2020-03-25 17:07:48 · 1343 阅读 · 0 评论 -
PTA 二叉树的非递归遍历 PTA
直接上代码void InorderTraversal(BinTree BT){ Stack S = CreateStack(); BinTree p = BT; while (p != NULL || !IsEmpty(S)) { if(p!=NULL) { Push(S, p); ...原创 2020-03-25 16:18:07 · 2512 阅读 · 0 评论 -
数据结构笔记
文章目录1.二叉树的遍历1.中序非递归遍历二叉树2.队列层次遍历2.静态链表存储二叉树1.二叉树的遍历1.中序非递归遍历二叉树先序遍历把printf放到Push后面即可就是模拟递归遍历的做法2.队列层次遍历2.静态链表存储二叉树...原创 2020-03-17 09:17:58 · 92 阅读 · 0 评论 -
分离链表法 哈希表 完整代码
#include <iostream>#include <cmath>using namespace std;#define MAX 100000typedef int ElementType;typedef int Index; // 散列地址类型/******** 以下是单链表的定义 ********/struct LNode{ ElementT...原创 2020-04-28 10:03:45 · 304 阅读 · 0 评论 -
哈夫曼树 - 完整代码
// 博客// https://blog.csdn.net/shuangde800/article/details/7341289// https://www.cnblogs.com/kubixuesheng/p/4397798.html// 一个结点的权值实际上就是这个结点子树在整个树中所占的比例.// 根据哈弗曼树的定义,一棵二叉树要使其WPL值最小// 必须使权值越大的叶子结点越靠...原创 2020-04-28 10:02:55 · 718 阅读 · 0 评论 -
邻接表代码
#include <iostream>using namespace std;#define MAX 100 //最大顶点数typedef int Vertex; // 用顶点下标表示顶点typedef int WeightType; // 权重typedef char DataType; //存储的数据类型// 边的定义typedef str...原创 2020-04-28 10:02:09 · 1111 阅读 · 0 评论 -
临界矩阵代码
#include <iostream>using namespace std;#define MAX 100 //最大顶点数#define INF 65535 //双字节无符号整形的最大值typedef int Vertex; // 用顶点下标表示顶点typedef int WeightType; // 权重typedef char Da...原创 2020-04-28 10:01:23 · 296 阅读 · 0 评论 -
奇数值结点链表
struct ListNode *readlist(){ struct ListNode *head, *p1, *p2; head = malloc(sizeof(struct ListNode)); p1 = p2 = head; while (1) { p2->next = p1; scanf("%d", &am...原创 2020-01-06 16:56:50 · 653 阅读 · 0 评论 -
链表输入
#include <stdio.h>#include <stdlib.h>struct List{ int data; struct List *next;} * a;struct List *cin();void cout(struct List *head);int main(){ a = cin(); cout(a);...原创 2019-12-16 11:37:30 · 609 阅读 · 0 评论 -
单链表逆转
题目函数接口定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToNode List; /*...原创 2019-12-08 22:58:01 · 332 阅读 · 0 评论 -
二叉树 - 中序先序后序遍历 - 插入 - 删除 - 查找 - 二叉查找树
#include <iostream>#include <stack>#include <queue>#include <string>using namespace std;#define MAX_N 100typedef char ElementType;typedef struct TNode *Possition;typede...原创 2020-04-10 17:24:01 · 257 阅读 · 0 评论 -
平衡二叉树AVL 删除-插入-建立-LL旋转-RR旋转--LR旋转-RL旋转
#include <iostream>using namespace std;typedef int TElementType;typedef struct AVLNode{ TElementType data; struct AVLNode *left; struct AVLNode *right; int height; //树的高度} *...原创 2020-04-10 17:23:02 · 555 阅读 · 0 评论