
数据结构学习
总结知识点,刷题,学习数据结构~
从心开始ぃ
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最小生成树
什么是最小生成树(Minimum Spanning Tree)1、是一棵树无回路,并且|v|个顶点一定有|v|-1条边2、是生成树包含全部顶点,并且|v|-1条边都在图中3、边的权重最小向生成树中任意加一条边都一定构成回路。最小生成树算法1、Prim最小生成树算法2、Kruskal最小生成树算法...原创 2020-03-25 13:42:35 · 266 阅读 · 0 评论 -
六度空间(30分)——广度优先搜索(bfs)
问题描述“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然...原创 2020-03-18 08:25:17 · 1214 阅读 · 0 评论 -
File Transfer (25分)并查集问题
We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer ...原创 2020-03-31 11:15:30 · 200 阅读 · 0 评论 -
Maximum Subsequence Sum (25分) (java解决最后一个测试点超时问题)
Given a sequence of K integers { N1 , N2, …, NK}. A continuous subsequence is defined to be { Ni, Ni+1, …, Nj} where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has th...原创 2020-03-30 21:29:29 · 292 阅读 · 0 评论 -
全排列模板
#include<iostream>using namespace std;int count = 0; typedef int Element; void swap(Element arr[], int i, int j){ Element temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}void allSort(...原创 2020-03-26 14:37:10 · 282 阅读 · 0 评论 -
拓扑排序
题目描述 DescriptionAiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还有一个屏幕,上面显示了一些信息。屏幕上说,要将所有按钮都按下才能出去,而又给出了一些信息,说明了某个按钮只能在另一个按钮按下之后才能按下,而没有被提及的按钮则可以在任何时候按下。可是Aiden发现屏幕上所给信息似乎有矛盾,请你来帮忙判断。输入描述 Input Description第一行,...原创 2020-03-26 10:58:40 · 133 阅读 · 0 评论 -
最短路径问题
单源最短路问题(Dijkstra算法)给一个n(1 ≤ n ≤ 2500) 个点 m(1 ≤ m ≤ 6200) 条边的无向图,求 s 到 t 的最短路。输入格式:第一行四个由空格隔开的整数 n、m、s、t。之后的 m 行,每行三个正整数 si、ti、wi(1≤wi≤109),表示一条从si 到 ti 长度为 wi 的边。输出格式:一个整...原创 2020-03-24 23:03:22 · 1288 阅读 · 0 评论 -
列出连通集 (25分) (深度优先搜索、广度优先搜索)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 … vk }"的格式,每...原创 2020-03-23 21:36:23 · 389 阅读 · 0 评论 -
堆中的路径 (25分) (最小堆)
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上...原创 2020-03-23 10:49:38 · 453 阅读 · 0 评论 -
并查集(Disjoint-set)
#include<iostream>using namespace std;#define N 10int parent[N];int find(int x) //寻找元素所在集合 返回根结点 { //根结点的父节点是-1 //先比较元素的父节点是否等于-1,如果是则找到了根结点 // if(parent[x] == -1) return x // else ret...原创 2020-03-22 13:57:20 · 135 阅读 · 0 评论 -
Root of AVL Tree (25分)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is...原创 2020-03-21 19:48:48 · 273 阅读 · 0 评论 -
二叉搜索树的创建与遍历
#include<iostream>#include<queue>using namespace std;typedef struct node *Tree;struct node{ int v; Tree left,right;};Tree Insert(Tree T,int v){ if(!T){ //如果树是空的 T = (Tree)mal...原创 2020-03-21 16:46:07 · 252 阅读 · 0 评论 -
是否同一棵二叉搜索树 (25分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的...原创 2020-03-21 13:13:31 · 695 阅读 · 0 评论 -
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 po...原创 2020-03-19 21:15:18 · 201 阅读 · 0 评论 -
数据结构——树的概念学习
一、树的概念学习树是n个节点构成的有限集合。当n=0时,称为空树。若n>0,每个树都有一个根节点。1、树的子树是不相交的。2、除了根节点外,每一个节点有且仅有一个父节点。3、一棵n个节点的树有n-1条边。树的常用术语:1、节点的度(Degree): 节点的子树个数。2、树的度:树的所有节点中最大的度数。3、叶节点(Leaf):度为0的节点。4、父节点(Parent):有子树...原创 2020-03-19 15:29:50 · 784 阅读 · 0 评论 -
C++ queue用法
队列是一种能简单高效的保存时间先后次序的抽象数据类型,满足先进先出,只支持push和pop操作。不同于stack,队列的push和pop操作在队列的两侧进行。成员函数:• q.size() //返回队列中的元素数量• q.empty() //判断队列是否为空,返回true或false• q.front() //返回对队列首“元素”的可变引用• q.back() //返回到队尾元素的一个可...原创 2020-03-18 21:05:53 · 212 阅读 · 0 评论 -
C++ stack用法
Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。使用STL的stack需要用#include< stack >头文件用法empty() //堆栈为空则返回真pop() //移除栈顶元素push() //在栈顶增加元素size(...原创 2020-03-18 20:47:37 · 178 阅读 · 0 评论 -
c++中map的用法
一、说明map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。二、用法:1、头文件使用map容器需要头文件包含语句#include< map >2、变量声明:map< string, floa...原创 2020-03-18 19:34:38 · 730 阅读 · 0 评论 -
c++中vector的用法
一、说明vector是C++中的一种数据结构,它相当于一个动态的数组,当我们不知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.二、用法:1、头文件在程序开头处加上#include< vector >以包含所需要的类文件vector还有一定要加上using namespace std;2、变量声明:一维向量声明:vector < int &...原创 2020-03-18 18:29:32 · 127 阅读 · 0 评论 -
动态规划——最长上升子序列
输入样例71 7 3 5 9 4 8输出样例4import java.util.Scanner;public class Main { public static int maxLen[] = new int[1010]; public static void main(String[] args) { Scanner sc = new Scanner(System.in);...原创 2020-03-14 19:04:24 · 188 阅读 · 0 评论 -
二分查找
import java.util.Scanner;public class Main { public static int BinarySearch(int a[],int size,int p){ int L = 0; //查找区间的左端 int R = size - 1; //查找区间的右端 while(L <= R){ //如果查找区间不为空就继续查找 i...原创 2020-03-13 22:14:04 · 105 阅读 · 0 评论 -
整数拆分——递归
题目描述给定一个正整数,我们可以定义出下面的公式:N=a[1]+a[2]+a[3]+…+a[m];a[i]>0,1<=m<=N;对于一个正整数,求解满足上面公式的所有算式组合,如,对于整数 4 :4= 4;4 = 3 + 1;4 = 2 + 2;4 = 2 + 1 + 1;4 = 1 + 1 + 1 + 1;所以上面的结果是 5 。注意:对于 “4 = 3 ...原创 2020-03-12 18:51:31 · 3266 阅读 · 0 评论 -
爬台阶问题 —— 递归与动态规划
题目一个人爬楼梯,他可以一次走一阶或者两阶,输入不同的楼梯数,求有多少种不同的走法?样例输入5810样例输出83489三种方法import java.util.Scanner;public class Main { public static int fun1(int n) { //递归方法 if(n == 1 || n==0) { return 1;...原创 2020-03-12 17:51:15 · 434 阅读 · 0 评论 -
二叉树的建立与遍历详解
1、二叉树的建立与遍历分布详解定义二叉树结构体:typedef struct BinaryTreeNode{ TelemType data; struct BinaryTreeNode *Left; struct BinaryTreeNode *Right;}Node;创建二叉树:Node* createBinaryTree(){ Node ...原创 2020-02-08 18:38:10 · 5950 阅读 · 1 评论 -
数据结构结构体定义问题
typedef用法#define只是简单的字符串替换typedef 定义一种类型的别名,广泛应用于c、c++中。typedef 用法解释typedef unsigned int uintuint等价于unsigned int类型定义typedef int *pointerpointer p声明等价于int *p声明在数据结构中,经常用typedef定义...原创 2019-11-11 18:49:56 · 1512 阅读 · 0 评论 -
树的同构(二叉树的顺序存储结构)
树的同构1、静态链表实现#include<stdio.h>#include<stdlib.h>#define Null -1 struct TreeNode{ char Element; int Left; int Right;}T1[10],T2[10];int check[100];int BuildTree(struct TreeNode T...原创 2019-11-10 00:48:33 · 316 阅读 · 0 评论 -
链表
一、链表数据的输入与输出#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;}Lnode,*List;//链表的读入及输出 int main(){ int n; printf("请输入数据总数\n"); scanf("%d",&...原创 2019-11-01 00:24:43 · 132 阅读 · 0 评论 -
最大子列和问题
最大子列和问题一、最大子列和问题给定K个整数组成的序列{ N1 , N2 , …, NK },“连续子列”被定义为{ Ni , Ni+1 , …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要...原创 2019-10-29 13:23:09 · 137 阅读 · 0 评论