
数据结构
风中之神111
我亦飘零久
展开
-
邻接表——数组实现
邻接表用数组来实现。采用头插法。#include <iostream>using namespace std;const int H = 10;int main(){ int u[H*2],v[H*2],w[H*2]; int first[H];//first[i]表示i号节点的第一条边 int next[H*2];//next[i]表示第i条边的下一...原创 2018-10-28 21:48:15 · 695 阅读 · 0 评论 -
Uva1664占领新区域——并查集
题意:n个城市形成一棵树,每条边有权值C(i,j)。任意两个点的容量S(i,j)定义为i与j唯一通路上容量的最小值。找一个点,使得它到其他所有点的容量之和最大。思路:图是一个树形 结构,意味着切断一条边(中间的)可以使图分成两个树。而中心点必然在某一个树中,所以可以用合并法。初始假设所有点都是中心点,他们都其他点的的距离W[i]= 0,每个中心点所覆盖的点集中个数为1(他自己)。如果点a和...原创 2019-06-18 20:32:50 · 264 阅读 · 0 评论 -
滑动窗口
滑动窗后的最小值问题。输入正整数k和一个长度为n的整数序列A1,A2,A3,…,An。定义f(i)表示从元素i开始的连续k个元素的最小值。例如,对于序列5,2,6,8,10,7,4,k=45,2,6,8,10,7,4,k=4,则f(1)=2, f(2)=2, f(3)=6, f(4)=4,f(1)=2, f(2)=2, f(3)=6, f(4)=4。单调队列假设窗口中有两个元素1和2,且1在2...原创 2019-02-26 11:34:30 · 722 阅读 · 0 评论 -
列车调度
问题:铁路调度站入口处的车厢序列编号依次为1,2,3…n。设计一个程序求出所有可能由此输出的长度为n的车厢序列。#include <stack>#include <iostream>using namespace std;const int N = 10;int n,cnt=0;stack<int> S;void Arrange( int i...原创 2018-12-28 19:08:48 · 1004 阅读 · 0 评论 -
平衡二叉树的一点困惑
困惑:对于LR型(在左子树的右子树插入后不平衡)的bf的计算。/* 对以指针T所指结点为根的二叉树作左平衡旋转处理 */ 52. /* 本算法结束时,指针T指向新的根结点 */ 53. void LeftBalance(BiTree *T) 54. { 55. BiTree L,Lr; 56. L=(*T)->...原创 2018-11-25 19:38:09 · 307 阅读 · 1 评论 -
栈—中缀、后缀表达式
利用栈计算后缀表达式#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;stack&gt;using namespace std;int main(){ stack&lt;int&gt; s; char str[50]; cin.getline( str,sizeof(str原创 2018-10-30 21:56:32 · 203 阅读 · 0 评论 -
二叉树的非递归遍历
前序做法:先让根节点入栈,然后开始while循环,将顶部元素访问并出栈,然后将它的孩子依次入栈(先右后左,因为访问顺序是先左后右),取顶,继续循环,直到栈空。Status PreOrderTraverse( BiTree T, Status( *Visit)(Elemtype e) ) { Mystack&lt;BiTree&gt; S; BiTree p = T; ...原创 2018-10-30 21:56:12 · 213 阅读 · 0 评论 -
线索二叉树
上面的图中会出现空指针的情况,比如中序遍历的3号和5号,这时加上一个新增节点即可,这样就构成了回路。一个前序,中序线索化的完整例子:节点信息typedef struct BiTree_clue{ int data;//数据内容 BiTree_clue *lchild, *rchild;//左右孩子节点的地址 PointerTag ltag, rtag;//标识r/l...原创 2018-10-28 22:06:33 · 364 阅读 · 0 评论 -
赫夫曼树的创建
赫夫曼树,即最优二叉树。给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。构造赫夫曼树:把节点的权值按从小到大的顺序排列。从序列中取出前两个(最小),作为孩子节点,求出其父节点的权重并加入到序列。重复1,2,直到序列中只剩一个节...原创 2018-10-28 21:59:27 · 1610 阅读 · 0 评论 -
邻接表&十字链表
邻接表:每一行都可以看成一个单链表,第一行中,v0-1-3可以得到,v0的出度为v1和v3。邻接表完整代码:#include <iostream>using namespace std;const int MAX_V = 15;//边节点typedef struct Edge_node { char data; Edge_node *next;}E...原创 2018-10-28 21:55:58 · 971 阅读 · 0 评论 -
并查集
并查集:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题举个例子首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。以下面这组数据输入数据来说明4 2 1...原创 2018-10-28 21:49:56 · 169 阅读 · 0 评论 -
POJ2985_The k-th Largest Group(树状数组)
转自:https://www.cnblogs.com/wuyiqi/archive/2011/12/25/2301071.html题意:首先给你N只老鼠,M个操作;最开始一只老鼠一个组;输入0,输入两个数i,j;使得i老鼠与j老鼠的组合并;输入1,输入一个数K,求第K大的组有多少只老鼠。思路:第K大就是第n-k+1小,用树状数组求第K小。觉得:https://www.cnblogs....转载 2019-08-04 18:11:17 · 311 阅读 · 0 评论