~~~~~数据结构~~~~~
Dunyb
坚毅
展开
-
链式前向星
一种数据结构存图方式理论知识:点击此处通用代码:存图 :const int MAXN = ;int head[MAXN], cnt = 1;bool vis[MAXN];struct Edge{ //根据需要+变量 int to, dis, next;}edge[MAXN << ];void add_edge(int u, int v, int di...原创 2020-04-09 14:07:25 · 333 阅读 · 0 评论 -
HDU - 3183 (A Magic Lamp)
题目连接题意: 题意:不能改变数字序列的顺序,从n个数中删除m个,输出删除后最小的数数据范围: (m<n<=1000)输出忽略前导0;思路: 用一个栈,然后然后如果栈顶元素大于s [ i ]就弹出栈顶元素(删除该数),一直循环,如果s [ i ] 小于栈顶元素或者栈为空,压入栈,这样我们的栈到最后维护了一个单调递增的...原创 2020-02-19 21:51:32 · 208 阅读 · 0 评论 -
树的遍历
树的静态写法struct node{ typename data; vector child;}Node[maxn];int index = 0;int newNode(int v){ Node[index].data = v; Node[index].child.clear(); return index++;}树的先根遍历void PreOrder(int...原创 2019-02-28 15:33:31 · 173 阅读 · 0 评论 -
任务调度的合理性 (25 分)
7-6任务调度的合理性(25 分)假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程...原创 2019-02-28 16:16:22 · 2516 阅读 · 1 评论 -
1053 Path of Equal Weight (30 分)
1053Path of Equal Weight(30 分)Given a non-empty tree with rootR, and with weightWiassigned to each tree nodeTi. Theweight of a path fromRtoLis defined to be the sum of the weights o...原创 2019-02-28 16:51:27 · 170 阅读 · 0 评论 -
二叉查找树
查找操作void search(node *root, int x){ if(root == NULL){ printf("search failed\n"); return ; } if(x == root->data){ printf("%d\n", root->data); }else if ( x < root->data){ sea...原创 2019-02-28 18:40:28 · 148 阅读 · 0 评论 -
平衡二叉树(AVL)
初识:平衡二叉树知识点下面就是代码了。struct node { int v, height; //v 权值 height 当前子树高度 node *lchild, *rchild;};node* newNode(int v){ node* Node = new node; Node->v = v; Node->height = 1; Node->...原创 2019-02-28 20:45:27 · 293 阅读 · 0 评论 -
堆
堆是一棵完全二叉树,是用数组存放的。层序遍历存到数组中,用数组模拟。很有意思、大顶堆,小顶堆。5个要点就是 调整,建堆,插入,删除,排序。时间复杂度O(logn)1)调整const int maxn = 100;int heap[maxn], n = 10;void downAdjust(int low, int high){ int i = low, j = i *...原创 2019-03-01 16:55:51 · 183 阅读 · 0 评论 -
哈夫曼树(优先队列)合并果子
Input第一行包含一个整数T(T<=50),表示数据组数。每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数。第二行包含n个正整数ai(ai<=100),表示每堆果子的果子数。Output每组数据仅一行,表示最小合并代价。Sample Input241 2 3 453 5 2 1 4Sample Output...原创 2019-03-01 17:15:11 · 634 阅读 · 0 评论 -
图(无向图代码)
/* 测试数据5 71 2 121 4 181 3 162 3 23 4 45 2 224 5 10*/#include <iostream>#include <cstring>#include <queue>#include<algorithm>using namespace std;typedef int Ve...原创 2019-03-01 17:21:42 · 1847 阅读 · 0 评论 -
图(有向图代码)
/* 测试数据5 71 2 121 4 181 3 162 3 23 4 45 2 224 5 10*/#include <iostream>#include <cstring>#include <queue>#include<algorithm>using namespace std;typedef int Ve...原创 2019-03-01 17:23:10 · 1481 阅读 · 0 评论 -
7-1 根据后序和中序遍历输出先序遍历 (25 分)
7-14 根据后序和中序遍历输出先序遍历 (25 分)本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格...原创 2019-02-20 13:13:44 · 3607 阅读 · 0 评论 -
根据先序和中序遍历输出后序遍历
测试样例74 1 3 2 6 5 71 2 3 4 5 6 7答案2 3 1 5 7 6 4#include<iostream>using namespace std;typedef struct BiTNode{ struct BiTNode *lchild; struct BiTNode *rchild; int data;}BiT...原创 2019-02-20 13:41:41 · 1139 阅读 · 0 评论 -
图 (Dijkstra)
有向图代码无向图代代码邻接矩阵比较简单就直接开一个二维数组就OK邻接表可以用vector,因为vector是个变长数组嘛,vector<int> Adj[N];可以设置出度邻接表,或者入度邻接表如果需要权值。那就弄个结构体嘛struct Node{ int v; //边的终点编号 int w; //边权 };vector<Node>...原创 2019-03-01 18:50:20 · 750 阅读 · 0 评论 -
关键路径
AOE知识点求 ve[ ] 数组 时间发生的最早时间,和拓扑序列stack<int> topOrder;bool topologicalSort(){ queue<int> q; for(int i = 0; i < n; i ++){ if(inDegree[i] == 0){ q.push(i); } } while(!q.e...原创 2019-03-06 21:47:00 · 339 阅读 · 0 评论 -
随机选择
问题描述:给定一个由整数组成的集合,集合中的整数各不相同,现在要将他们分为两个子集合,使得这两个子集合的并为原集合,交为空集,同时在两个子集元素个数n1 与 n2 之差的绝对值 | n1- n2 | 尽可能小的前提下,要求他们各自元素之和s1 和 s2 的差的绝对值 |s1 - s2 | 尽可能的大,求这个|s1 - s2 | 是多少,第一个思路 sort 排序。第二种思路就是随机选择...原创 2019-04-02 18:55:14 · 1175 阅读 · 0 评论 -
静态二叉树
不会用指针的也能实现二叉树(静态二叉树)数组实现。struct node{ int data; int lchild; int rchild;}Node[maxn];int index = 0;int newNode(int v){ Node[index].data = v; Node[index].lchild = -1; Node[index].rchild = ...原创 2019-02-28 15:02:28 · 494 阅读 · 0 评论 -
拓扑排序
vector<int> G[MAXV];int n, m, inDegree[MAXV];bool topologicalSort(){ int num = 0; //记录拓扑序列的顶点数 queue<int> q; for(int i = 0; i < n; i++){ if(inDegree[i] == 0) // 如果顶点i的入度为 0 入队 ...原创 2019-02-23 18:47:35 · 176 阅读 · 1 评论 -
栈
链栈代码#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std;typedef char SElemType;typedef struct SqStack { SElemType data; SqStack *next;}SqSta...原创 2018-10-31 18:14:52 · 146 阅读 · 0 评论 -
循环队列
循环队列出现的原因:顺序队列出队后 的空间不能再次利用,造成资源浪费。所以出现循环队列这个代码是用tag标记的循环队列思路:(rear+1)%m==front 则队列满,(front+1)%m == rear则队列空。队列开始为空,设tag=0。简单的说就是front 追 rear 如果追上就是空队列然后rear如果追上front 就是满队列当 tag == 1且 fron...原创 2018-10-31 18:25:58 · 11720 阅读 · 0 评论 -
队列
链队列 #include <iostream>#include<stdlib.h>#include<math.h>#include<stdio.h>using namespace std;#define ERROR 0#define TRUE 1#define FALSE ...原创 2018-10-31 18:16:02 · 158 阅读 · 0 评论 -
暑假训练第五天打卡,刷了一天的循环基础题,有点意思啊。开关灯
开关灯, 描述假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反...原创 2018-08-22 10:14:24 · 251 阅读 · 0 评论 -
冒泡排序,快速排序
冒泡排序基础款、时间复杂度 O(n^2)最好最坏一样空间 O(1)void baseBubbleSort(int *a){ //基础冒泡算法 for(int i = 1; i <= a[0]; i++){ for(int j = 1; j <= a[0] - i; j++){ if(a[j+1] < a[j])...原创 2018-12-26 20:07:17 · 249 阅读 · 0 评论 -
直接插入排序,折半插入排序,希尔排序
直接插入排序时间复杂度: 最好 O(n) 最坏 O(n^2) 平均(n^2)空间复杂度:O(1);void InsertSort(int *a){//直接插入排序 int j, temp; for(int i = 2; i <= a[0]; i++){ j = i - 1; temp = a[i]; whil...原创 2018-12-26 20:19:44 · 371 阅读 · 0 评论 -
简单选择排序,堆排序
简单选择排序时间复杂度O(n^2)空间 O(1)void SelectSort(int *a){ for(int i = 1; i <= a[0]; i++){ int mindex = i; for(int j = i+1; j <= a[0]; j++){ if(a[mindex] > a[j]){ mindex = j; }...原创 2018-12-26 20:22:26 · 212 阅读 · 0 评论 -
归并排序
#include <iostream>#include<math.h>using namespace std;void merge(int *a, int low, int mid, int high){ int *b = new int[ high - low + 2 ]; b[0] = high - low + 1; int j = mid + 1; ...原创 2018-12-26 20:26:19 · 142 阅读 · 0 评论 -
二叉树代码
#include <iostream>#include <stack>#include<queue>#include<iostream>#include<stdio.h>#include<stdlib.h>#include<iomanip>using namespace std;#define m原创 2018-11-09 15:56:35 · 319 阅读 · 0 评论 -
非递归遍历二叉树
1、前序 int PreorderNonrecursion(BiTree T)//非递归先序遍历算法{ BiTree Stack[maxSize]; int top = -1; BiTree p; Stack[++top] = T; while(top != -1) { p = Stack[top--]; cout << p->data <...原创 2018-11-09 15:53:48 · 346 阅读 · 0 评论 -
二叉树遍历 及 创建
每次老师讲这个二叉树都是先讲的遍历再将的创建,因为你不会遍历就不会创建二叉树。因为是二叉树所以这个树的每个结点都要有 1个数据域,2个指针域所以我们需要定义一个结构体typedef struct BiTNode{ char data; struct BiTNode *lchild;//左孩子 struct BiTNode *rchild;//右孩子}Bi...原创 2018-11-09 15:36:40 · 270 阅读 · 0 评论 -
二叉树
二叉树基础1.斜树所有节点都只有左子树(左斜树),或者所有节点只有右子树(右斜树),称为斜树如图2、满二叉树所有分支节点都存在左子树和右子树,并且所有的叶子结点都在同一层上。根据满二叉树的定义,得到其特点为:叶子只能出现在最下一层。 非叶子结点度一定是2. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。3、完全二叉树若设二叉树的深度...转载 2018-11-07 21:45:01 · 630 阅读 · 0 评论 -
冒泡排序,选择排序,插入排序,快速排序
This is my first 文章。今天我们学习了最基础的算法,最简单的排序(一)稳定排序: a在b的前面,且a=b,排序后a还在b的前面,这就是稳定的排序 既然有稳定的那就肯定有不稳定的排序 不稳定排序:a在b的前面,且a=b,排序后a可能会出现在b的后面,这就是不稳定的排序 然后是内排序,外排序(二)内排序:所有的排序操作都是在内存内完成...原创 2018-08-22 10:00:55 · 315 阅读 · 0 评论 -
树的遍历 (25 分)给中序和后序,写层序遍历
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 ...原创 2019-02-22 16:59:13 · 2408 阅读 · 0 评论 -
HuffmanTree哈夫曼树(赫夫曼树)及哈夫曼编码
今天带领大家学一下哈夫曼一. 概念:赫夫曼树又叫做最优二叉树,它的特点是带权路径最短。1)路径:路径是指从树中一个结点到另一个结点的分支所构成的路线,2)路径长度:路径长度是指路径上的分支数目。3)树的路径长度:树的路径长度是指从根到每个结点的路径长度之和。4)带权路径长度:结点具有权值,从该节点到根之间的路径长度乘以结点的权值,就是该结点的带权路径长度。5)树的带...原创 2018-11-22 18:29:36 · 3822 阅读 · 0 评论