数据结构
Jimobbb
这个作者很懒,什么都没留下…
展开
-
浙大数据结构习题笔记:排序算法总结
排序算法总结PS:期末复习,好久没看浙大的笔记了,习题也一直没做……后来发现排序算法上学期期末也没看,借着复习数据结构来看一下排序算法。视频中的这张图我觉得总结的很棒,觉得考试可能会考(总结的代码实现:#include <iostream>#include <cstdlib>#include <algorithm>#include <cmath>#define NUM_SIZE 20int A[NUM_SIZE];using name原创 2020-08-06 19:56:45 · 226 阅读 · 0 评论 -
浙大数据结构习题笔记:07-图6 旅游规划 (25分)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中原创 2020-07-21 16:31:15 · 515 阅读 · 0 评论 -
浙大数据结构习题笔记:Kruskal算法
Kruskal算法相比于Prim算法,Kruskal算法实现原理更简单,但是前置工作比较复杂(建立并查集和最小堆)如不使用堆,可以将所有边进行排序,从小到大,再寻求并查集,查找并入最小生成树#include<iostream>#include<string>#include<vector>#include<queue>#define INF 100000#define MaxVertex 105typedef int Vertex; int原创 2020-07-21 15:45:58 · 204 阅读 · 0 评论 -
浙大数据结构习题笔记:Prim算法
Prim算法具体算法见慕课Prim算法不需要特殊建立并查集和堆,裸建更轻松。#include <iostream>#include <vector>#define INF 100000#define MAX_VERTEX 105typedef int Vertex;int G[MAX_VERTEX][MAX_VERTEX];int parent[MAX_VERTEX]; //并查集int dist[MAX_VERTEX];int Nv;int Ne;原创 2020-07-21 15:41:29 · 230 阅读 · 0 评论 -
浙大数据结构习题笔记:07-图4 哈利·波特的考试 (25分)
07-图4 哈利·波特的考试 (25分)哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只原创 2020-07-19 21:17:17 · 134 阅读 · 0 评论 -
浙大数据结构习题笔记:Floyd算法(多源有权图最短路)
Floyd算法(多源有权图最短路)具体实现请看慕课原理就是一个三层循环,逐层遍历出结果安插到备用的两个二重矩阵中间,可以看错Dijkstra算法的多源化具体代码实现#include<iostream>#include<stdlib.h>#define INF 1000000#define MaxVertex 100typedef int Vertex;int G[MaxVertex][MaxVertex];int dist[MaxVertex][MaxVertex原创 2020-07-16 20:36:40 · 166 阅读 · 0 评论 -
浙大数据结构习题笔记:Dijkstra算法(有权图最短路)
Dijkstra算法(有权图最短路)具体教程内容见慕课具体代码为可执行版,按有权图模式规范化输入即可,输出第一行为各行dict代表某结点从原点过来的总权重,输出第二行path为上一个结点的路径具体代码实现#include<iostream>#include<stdlib.h>#define Inf 1000000#define Init -1#define MaxVertex 100typedef int Vertex;int G[MaxVertex][MaxVe原创 2020-07-16 20:14:06 · 221 阅读 · 0 评论 -
浙大数据结构习题笔记:邻接矩阵与邻接表实现图
邻接矩阵和邻接表实现图1.邻接矩阵实现#include<stdio.h>#include<stdlib.h>#define MaxVertexNum 100typedef int weightType;typedef int Vertex;typedef int DataType;typedef struct GNode *ptrToGNode;struct GNode{ // 图 int Nv; // 顶点数 int Ne; // 边数 we原创 2020-07-14 15:36:55 · 623 阅读 · 0 评论 -
浙大数据结构习题笔记:06-图3 六度空间 (30分)
06-图3 六度空间 (30分)原题“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、原创 2020-07-12 15:06:22 · 831 阅读 · 1 评论 -
浙大数据结构习题笔记:06-图2 Saving James Bond - Easy Version (25分)
06-图2 Saving James Bond - Easy Version (25分)原题This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the c原创 2020-07-12 13:50:35 · 351 阅读 · 1 评论 -
浙大数据结构习题笔记:06-图1 列出连通集(无向图DFS与BFS)
06-图1 列出连通集(无向图DFS与BFS)原题给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 … vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BF原创 2020-07-11 14:33:09 · 862 阅读 · 0 评论 -
浙大数据结构习题笔记:05-树8 File Transfer (25分)
05-树8 File Transfer (25分)原题总结这道题就是并查集的配套习题,之前学校在学图的算法时就提到过要使用并查集实现,但因为没细讲并查集的实现导致我学的一知半解(学完这个后,觉得还可以,这里面的并查集还是比较好实现的,通过数组下标记录对应值,数组中存储的是每个值的父节点的位置。Find和Union采用极简的操作如下int Find(SetType S[],int n){ for(;S[n] >= 0;n = S[n]); return x;}void Uni原创 2020-07-08 14:42:36 · 254 阅读 · 0 评论 -
浙大数据结构习题笔记:05-树7 堆中的路径 (25分)
05-树7 堆中的路径 (25分)原题将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 3原创 2020-07-06 15:00:23 · 629 阅读 · 0 评论 -
浙大数据结构习题笔记:最小堆的建立
最小堆的建立最小堆的建立有两种方式的插入一种是逐次插入的时候排序成完全二叉树,代码比较简单。另一种是借助堆排序的方法,先输入所有的节点,再通过类似于堆的删除操作的方式,从存在子节点的节点开始反向排序,将所有的节点捋顺。具体代码实现#include <iostream>#include <malloc.h>const int MinData = -100000;const int MaxSize = 1005;using namespace std;typed原创 2020-07-06 14:33:37 · 403 阅读 · 1 评论 -
浙大数据结构习题笔记:04-树6 Complete Binary Search Tree (30分)
04-树6 Complete Binary Search Tree (30分)题目A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node原创 2020-07-05 16:53:57 · 607 阅读 · 0 评论 -
浙大数据结构习题笔记:03-树3 Tree Traversals Again (25分)
03-树3 Tree Traversals Again (25分)分析看了下视频解析,觉得除了常规的借助先序与中序遍历把这棵树重新构造出来再遍历外,视频中借助规律和递归分治法真的是很简洁。主函数中,在题中可以明白,Push进去的是先序的内容,Pop出去的是中序的内容,这样遍历完成所有输入后,可以得到pre in两个代表先序与后序遍历的数组。之后,关键是围绕着这两个数组找出后序post的顺序,我们发现一些规律:先序遍历中:根一定是第一项中序遍历中:根的左右分别代表左右子树后序遍历中:根一定是原创 2020-07-03 14:49:00 · 241 阅读 · 0 评论 -
浙大数据结构习题笔记:03-树2 List Leaves (25分)
03-树2 List Leaves (25分)原题如下:Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) whi原创 2020-07-03 13:22:12 · 420 阅读 · 0 评论 -
浙大数据结构习题笔记:02-线性结构3 Reversing Linked List (25分)
02-线性结构3 Reversing Linked List (25分)PS:在网上看了看关于这道题的许多解析,觉得还是这种数组法最容易理解。主要是我觉得这道题的输入方式使得构造链表的操作不好表述。首先可以看到一个规律是:Address与Data是绑定的,是不可变的,改变的是Next,于是借助这个关系,创建三个大容量数组data next list其中第一个负责在输入的Address下标下记录datanext数组同理而list数组负责顺着地址将数据串成顺序形式,也就是说,实际上此数组占用了,在接下原创 2020-07-01 15:50:29 · 491 阅读 · 4 评论 -
浙大数据结构习题笔记:04-树5 Root of AVL Tree (25分)
04-树5 Root of AVL Tree (25分)没什么好说的……其实就是插入平衡二叉树的过程,具体实现慕课中已经讲过了,写一下再注意一下输入格式就好了。#include <iostream>#include <malloc.h> typedef struct AVLNode *AVLTree;struct AVLNode{ int data; // 存值 AVLTree left; // 左子树 AVLTree right; // 右子树原创 2020-07-01 14:42:31 · 255 阅读 · 0 评论 -
浙大数据结构习题笔记:02-线性结构4 Pop Sequence (25分)
02-线性结构4 Pop Sequence (25分)灵感参考 《数据结构》02-线性结构4 Pop Sequence题目Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequenc原创 2020-06-30 15:05:43 · 454 阅读 · 0 评论 -
浙大数据结构习题笔记:04-树4 是否同一棵二叉搜索树(25 分)
04-树4 是否同一棵二叉搜索树(25 分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后原创 2020-06-29 15:15:13 · 940 阅读 · 0 评论 -
浙大数据结构习题笔记:AVL树插入(平衡二叉树)
AVL树(平衡二叉树)四种AVL树的插入,说白了就是四种调整方法的使用判断平衡与否首先四种调整方法的定位,关键是两个节点的寻找影响节点:影响AVL树平衡位置的节点,例如图中的 NOV被影响节点:因为新插入节点而引起不平衡的节点,例如图中的MAR通过判定影响节点在被影响节点的左右方位,我们可以得到RR LL LR RL四种调整方式RR旋转影响节点在被影响节点的右子树的右子树,采用RR旋转代码片段实现AVLTree RR(AVLTree A){ AVLTree B = A-&g原创 2020-06-28 20:36:25 · 718 阅读 · 0 评论 -
浙大数据结构习题笔记:二叉搜索树
二叉搜索树感觉FindTail和FindFor部分返回的内容不太好输出…#include <iostream>#include <malloc.h>using namespace std;typedef int ElemType;typedef struct TreeNode *BinTree;struct TreeNode{ ElemType data; BinTree left; BinTree right;};BinTree Fi原创 2020-06-27 14:15:31 · 189 阅读 · 0 评论 -
浙大数据结构习题笔记:03-树1 树的同构 (25分)
03-树1 树的同构 (25分)题目给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中原创 2020-06-26 14:56:52 · 1164 阅读 · 0 评论 -
浙大数据结构习题笔记:二叉树各种遍历完全代码实现
二叉树各种遍历全代码实现看到二叉树的遍历,虽然上课讲这段的时候,就练习了很多,但当时仅仅是做了伪代码实现。没有做实际的可执行代码实现,这次好好写了一下,遍历的原理不再阐述,主要贴一下代码实现PS:其实就是上课的时候,对于非递归部分,老师仅仅讲了如何用栈和队列的思想,而没有讲一讲实现栈的部分,而教科书上的代码我觉得太冗长了,于是乎直接用C++的STL容器的stack与queue来玩,要不然真的要写烂了……使用样例完全代码实现#include <iostream>#include &l原创 2020-06-26 13:30:21 · 243 阅读 · 0 评论 -
浙大数据结构习题笔记:02-线性结构1 两个有序链表序列的合并 (15分)
02-线性结构1 两个有序链表序列的合并 (15分)本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrT原创 2020-06-24 15:05:39 · 212 阅读 · 0 评论 -
浙大数据结构习题笔记:01-复杂度3 二分查找 (20分)
01-复杂度3 二分查找 (20分)L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch要查找X在Data中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个特殊的失败标记NotFound。原函数#include <stdio.h>#include <stdlib.h>#define MAXSIZE 10#define NotFoun原创 2020-06-24 14:54:17 · 803 阅读 · 0 评论 -
浙大数据结构习题笔记:一元多项式的乘法与加法运算
一元多项式的乘法与加法运算虽然是mooc例题,但码下来觉得代码量也不小,写完对单链表的插入删除内存处理也有了点了解最后在PTA上提交后,一开始没有注意到格式,后来微调了一下格式才搞好。02-线性结构2 一元多项式的乘法与加法运算 (20分)设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和原创 2020-06-23 21:39:47 · 210 阅读 · 0 评论 -
浙大数据结构习题笔记:队列的两种表示
队列的两种表示分别使用数组法和单链表法数组法需要注意添加元素时,头指针的限制条件Q->rear = (Q->rear+1) % MAX_SIZE包括判断队列是否满,也需要用此式与Q->front判断是否相等#include <stdio.h>#include <malloc.h>#define MAX_SIZE 100typedef int elemType;typedef struct QNode *queue;struct QNode{原创 2020-06-22 13:53:05 · 198 阅读 · 0 评论 -
浙大数据结构习题笔记:栈与链栈
栈#include <stdio.h>#include <malloc.h>#define MAX_SIZE 100typedef int elemType;typedef struct SNode *stack;struct SNode{ elemType data[MAX_SIZE]; int top;};stack S;stack createStack();int isFull(stack S);int isEmpty(stac原创 2020-06-21 19:48:35 · 313 阅读 · 0 评论 -
浙大数据结构习题笔记:顺序表与单链表
顺序表的顺序与链式存储自己码了一遍两种实现方式的函数模板,都是能直接运行起来的版本。顺序存储:#include <stdio.h>#include <malloc.h>#define MAX_SIZE 100typedef int ElemType;typedef struct LNode *List;//线性表定义struct LNode{ ElemType data[MAX_SIZE]; int last;};List L;//访问原创 2020-06-21 17:38:01 · 223 阅读 · 0 评论 -
浙大数据结构习题笔记:最大子列和问题
前言本学习学校开了数据结构这么课,但本人感觉一学期没怎么听,基本的一些东西也搞不出来那种,觉得这个假期有必要在考试之前重新预习一遍……找了找觉得浙大陈越老师讲的网课不错,于是就准备重新跟一遍数据结构的网课。01-复杂度1 最大子列和问题#include <stdio.h>#include <string.h>int MaxSum1(int A[],int N){ int oneSum,maxSum = 0; int i,j,k; for(i=0原创 2020-06-19 12:57:56 · 232 阅读 · 0 评论