算法与数据结构
文章平均质量分 63
弱爆了的雪饼
欢迎访问我的个人博客:https://lemonlov.github.io/
展开
-
PTA一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2 6 1 -2 0 3原创 2017-10-06 21:36:05 · 1411 阅读 · 0 评论 -
最小堆实现哈夫曼树的构造及哈夫曼编码、解码
以下程序的算法思想主要来自于浙江大学陈越老师主编的数据结构一书。最大堆(最小堆思想差不多)这里就不再多说,这里主要讲讲哈夫曼树的定义及实现。Huffman Tree相关概念:结点的路径长度:从根结点到该结点的路径上分支的数目。树的路径长度:树中每个结点的路径长度之和。(从树根到其余各结点的路径长度之和)结点的带权路径长度(WPL):结点的路径长度与该结点所带权值的乘...原创 2018-12-03 22:49:15 · 8563 阅读 · 12 评论 -
7-4 List Leaves
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 ...原创 2018-12-06 19:52:01 · 853 阅读 · 0 评论 -
7-5 Tree Traversals Again
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stac...原创 2018-12-06 21:38:02 · 2849 阅读 · 0 评论 -
7-6 Root of AVL Tree
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...原创 2018-12-07 16:14:26 · 684 阅读 · 0 评论 -
7-9 Huffman Codes
In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redundancy Codes", and hence printed his name in the history of computer science. As a professor who gives the f...原创 2018-12-10 00:39:36 · 550 阅读 · 0 评论 -
7-11 Saving James Bond - Hard Version
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 ...原创 2018-12-28 00:40:02 · 618 阅读 · 0 评论 -
7-6 列出连通集
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 ... v...原创 2018-12-17 17:18:39 · 415 阅读 · 0 评论 -
7-10 Saving James Bond - Easy Version
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 ...原创 2018-12-17 21:56:53 · 1428 阅读 · 1 评论 -
7-7 六度空间
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而...原创 2018-12-18 14:40:22 · 989 阅读 · 0 评论 -
1076 Forwards on Weibo
Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may follow many other users as well. Hence a social network is formed with followers relations. When a ...原创 2018-12-23 23:29:22 · 312 阅读 · 1 评论 -
7-9 旅游规划
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编...原创 2018-12-30 22:13:31 · 674 阅读 · 0 评论 -
7-8 哈利·波特的考试
哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。 现在哈利·波特的...原创 2018-12-25 22:10:34 · 574 阅读 · 0 评论 -
7-10 公路村村通
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据...原创 2019-01-21 22:10:25 · 571 阅读 · 0 评论 -
7-12 How Long Does It Take
Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.Input Specification:Each input file contains one test case. Each case s...原创 2019-01-22 13:48:05 · 1963 阅读 · 0 评论 -
7-11 关键活动
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系...原创 2019-01-22 17:55:14 · 454 阅读 · 0 评论 -
7-8 File Transfer
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 ...原创 2018-12-05 16:04:29 · 608 阅读 · 0 评论 -
6-10 二分查找
本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position ...原创 2018-12-07 21:43:55 · 799 阅读 · 0 评论 -
线性表的顺序存储与链式存储
线性表的顺序存储#include<iostream>#include<cstdlib>#include<iomanip>using namespace std;#define MaxSize 100#define ElementType inttypedef struct LNode *List;struct LNode{ ElementType data[MaxSize];原创 2017-06-26 20:23:51 · 552 阅读 · 0 评论 -
中缀表达式转前、后缀表达式及其求值
将中缀表达式转换为前缀表达式: 遵循以下步骤: (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从右至左扫描中缀表达式; (3) 遇到操作数时,将其压入S2; (4) 遇到运算符时,比较其与S1栈顶运算符的优先级: (4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈; (4-2) 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入S1;原创 2017-07-19 17:38:31 · 1256 阅读 · 0 评论 -
栈的顺序存储与链式存储
栈的顺序存储#include<iostream>#include<cstdlib>using namespace std;#define MaxSize 100#define ElementType inttypedef struct SNode *Stack;struct SNode{ ElementType data[MaxSize]; int top;};//建原创 2017-10-03 22:01:23 · 754 阅读 · 0 评论 -
PTA-线性结构1 两个有序链表序列的合并
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下原创 2017-10-04 22:15:24 · 765 阅读 · 0 评论 -
后缀表达式求值及中缀表达式转后缀表达式
关于后缀表达式的计算机求值以及中缀表达式转后缀表达式的分析请看我的另一篇博客——中缀表达式转前、后缀表达式及其求值后缀表达式求值#include<iostream> #include<iomanip>#include<cstdlib>#include<cctype> #include<cmath>using namespace std;#define MaxSize 100原创 2017-10-05 12:19:39 · 1575 阅读 · 2 评论 -
循环队列的顺序存储与链队列
循环队列的顺序存储 队列是只允许一端插入一端删除的数据结构,为“先进先出表”。#include<iostream>#include<cstdlib> using namespace std;typedef int ElementType;struct QNode { ElementType *Data; /* 存储元素的数组 */ int Front, Rear;原创 2017-10-05 23:32:16 · 633 阅读 · 0 评论 -
7-4 是否同一棵二叉搜索树
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式: 输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个...原创 2018-12-02 13:53:28 · 833 阅读 · 0 评论 -
7-2 Reversing Linked List
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4,...原创 2018-12-02 17:59:11 · 769 阅读 · 0 评论 -
03-树1 树的同构
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1图2现给定两棵树,请你判断它们是否是同构的。 输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤...原创 2018-11-30 15:03:55 · 240 阅读 · 0 评论 -
二叉树先序遍历、中序遍历、后序遍历的递归算法与非递归算法
首先是二叉树数据结构的定义:typedef struct TNode *Position;typedef Position BinTree; /* 二叉树类型 */struct TNode{ /* 树结点定义 */ int Data; /* 结点数据 */ BinTree Left; /* 指向左子树 */ BinTree Right; /* 指向右...原创 2018-11-28 20:07:24 · 6194 阅读 · 2 评论 -
7-5 堆中的路径
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点...原创 2018-12-05 11:11:16 · 383 阅读 · 0 评论 -
7-7 Complete Binary Search Tree
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 su...原创 2018-12-07 19:50:19 · 1342 阅读 · 0 评论 -
6-6 Level-order Traversal
Write a routine to list out the nodes of a binary tree in "level-order". List the root, then nodes at depth 1, followed by nodes at depth 2, and so on. You must do this in linear time.Format of func...原创 2018-12-07 20:32:58 · 1272 阅读 · 0 评论 -
6-7 Isomorphic
Two trees, T1 and T2, are isomorphic if T1 can be transformed into T2 by swapping left and right children of (some of the) nodes in T1. For instance, the two trees in Figure 1 are isomorphic because t...原创 2018-12-07 20:59:29 · 1713 阅读 · 0 评论 -
6-9 二叉树的遍历
本题要求给定二叉树的4种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );其中BinTree结构定义如下:...原创 2018-12-07 21:12:47 · 775 阅读 · 0 评论 -
7-14 电话聊天狂人
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。输入格式:输入首先给出正整数N(≤105)(10的5次方),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。输出格式:在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加...原创 2019-01-28 23:18:53 · 588 阅读 · 0 评论