![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础数据结构
文章平均质量分 73
MistKafka
这个作者很懒,什么都没留下…
展开
-
uva442 栈
题意:给出矩阵规格, 然后给出矩阵算式, 求每个算式的计算量。当矩阵无法相乘时 输出error思路:1.计算量的计算方式 (A.r, A.c) * (B.r, B.c) 的计算量是 A.r * A.c * B.c() 2.关键: 用栈在储存矩阵。 遇到 '(' 时读掉, 遇到字母时压栈, 遇到')'时计算栈的顶部两个矩阵, 形成行矩阵压入栈中。 3.用数组保存读入的矩阵,原创 2013-07-07 23:00:00 · 1638 阅读 · 0 评论 -
uva839 Not so Mobile (重建二叉树)
题意:天平的平衡条件 Wl * Dl == Wr * Dr。 题目给出的是 二叉树天平, 平衡条件是所有天平都要平衡。 大天平的W 是小天平两边的W总和(很明显嘛~ 不行你就受力分析下啊)。思路:好了, 这题就无法逃脱建树的命运了。 递归建树, 然后递归判断是否平衡。每次读入一行, 如果Wl == 0, 则递归建左子树, 如果Wr == 0, 则递归建右子树。 判断的时候, 如果Wl原创 2013-07-27 16:06:44 · 1650 阅读 · 0 评论 -
uva10562 Undraw the Trees (不定叉树重建)
题意:根据给定的图树, 输出对应的括号树。树的结点可以是任意可打印的字符, 不包括'|' 、'-'、 '#' '、 ' '\0'、 '\n'。 对于\n 其实我是看别人题解的。那句英语折磨死我了。思路:关键在于递归建树。用二维char数组一次性读掉整张图。因为是不定叉, 所以用vector保存孩子结点。具体如下: 特殊处理第一行(可能为空树), 找到根结点的坐标开始递归。 对于每一原创 2013-07-27 16:23:45 · 1017 阅读 · 0 评论 -
uva712 S-Tree (假二叉树重建)
题意:给定x1 x2 x3 x4......的0 1指派, 根据这些指派得出值真假。怎么得出? x1 ~xn的顺序就是它的深度(看图), 如果是0 往左边走, 1往右边走。 走n步,走到叶子, 叶子是1则真, 是0则假。思路: 这道题虽然是数据结构题, 但其实用不到树。我们可以根据x1~xn的序列根据它的指派生成它的十进制值index。 然后输出terminal[index]就行了。(原创 2013-07-26 21:48:19 · 1000 阅读 · 0 评论 -
uva112 Tree Summing(二叉树 + 栈)
题意:LISP 列表语言实现二叉树, 构树方式对照图就可知道, 叶子后面都有两个()。 给定一个数target, 求此树中是否有一条路径(从root到叶子), 它上面的结点总和等于target, 如果存在 输出yes, 否则输出no。思路:这道题可以不用建树。只要读到叶子结点的时候, 把这条路的sum 跟 target比较, 相等就ok = true。 如何读? 读到( 入栈staS原创 2013-07-26 21:20:26 · 1055 阅读 · 0 评论 -
uva673 Parentheses Balance(模拟+栈)
题意:判断给定的括号是否匹配平衡。思路:用栈来模拟 遇到'(' 或'['的时候入栈, 遇到 ')'或']'跟栈定匹配。匹配成功则栈顶出栈。 最后栈空则括号平衡。陷阱: 小心))))))))))】】】】】】】】括号组算法复杂度: 有几个符号就要入栈、匹配几次, 所以是o(N)思路:#include #include using namespace std;原创 2013-07-25 19:13:27 · 2608 阅读 · 0 评论 -
uva11111 Generalized Matrioshkas (模拟 + 栈)
题意:类似于括号匹配, 不过每个数字只能跟自己的相反数匹配。并且, 括号的所有直接子括号的数值之和必须小于它的数值。思路:用栈模拟, 遇到负数入栈; 正数则与栈顶匹配, 若匹配成功则消去栈顶 , 否则也入栈。栈的元素是结构体, 除了上面的括号自身的数值value外, 还有所有直接子括号的和sum。 在负数入栈前, 要把它的数值加到栈顶(如果empty就不用)的sum, 并判断, 判断完原创 2013-07-25 17:16:22 · 990 阅读 · 0 评论 -
uva540 Team Queue(模拟:队列)
题意:有n个队伍。 对于每个ENQUEUE x 命令。 如果x所在的队伍已经在队列中, 则x排在队列中它的队伍的尾巴, 否则排在队列的末尾。 可以理解为队列中的队列的味道。思路:用一个team[]数组, 来标记所有数字所在的队列。 queue que[1000], 由于组数最多有1000组, 也就是最多有1000个子队列, 如果你在第0组, 把你放到大队列中, 只要把你放到que[0原创 2013-07-25 19:41:21 · 3389 阅读 · 0 评论 -
uva11234 Expression (二叉树重建+层次遍历)
题意:具体没理解。我知道我这样回答很坑。 根据后缀表达式重建树, 然后输出层次遍历的逆序。 思路: 如何建树?从左往右读入字符, 遇到小写字符建一个结点压入栈中, 遇到一个大写字母建一个结点, 其左右子树便是栈顶的前两个, 构成的新树再压入栈中。 最后只剩一棵树。 然后对这棵树层次遍历(BFS), 输出层次遍历的逆序。算法复杂度: 缺。代码:/*建树*/#i原创 2013-07-16 17:00:01 · 865 阅读 · 0 评论 -
uva297 Quadtrees (树的重建)
题意:一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个子图表示一个点。 f表示这块子图填满, p表示它还有4个子图, e表示没有子图(当然啦, 它也没有填满)。 给定两个字符串(其实就是两幅图, 两棵树), 求把两图合并后的图的黑点数。思路:可以根据两字符串建两棵树, 然后合并。 但是直接用字符串合并似乎会更简单。从头到尾逐个字符比较两个字符串, 如果原创 2013-07-26 21:34:03 · 1952 阅读 · 0 评论