数据结构与算法
文章平均质量分 87
Coder.L
记录前进的一个个足迹
展开
-
02-线性结构2 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2...原创 2019-06-19 11:51:29 · 147 阅读 · 0 评论 -
求二叉树高度的递归算法中递归过程理解
int GetHeight(AVLTree A){ int MaxH, HR, HL; if(A) { HL = GetHeight(A->Left); HR = GetHeight(A->Right); MaxH = (HL>HR)?HL:HR; return MaxH+1; } ...原创 2019-07-04 12:08:16 · 12138 阅读 · 1 评论 -
05-树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 comp...原创 2019-07-11 11:00:18 · 117 阅读 · 0 评论 -
03-树3 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...原创 2019-07-18 15:20:09 · 296 阅读 · 0 评论 -
06-图1 列出连通集 (邻接矩阵&邻接表 实现)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{v1v2...v...原创 2019-07-17 17:28:54 · 542 阅读 · 0 评论 -
最大堆最小堆的实现(C语言)
堆是特殊的队列,从堆中取元素是按照元素的优先级大小,而不是元素进入队列的先后顺序。因此,堆也通常被称为“优先队列”。堆的最常用结构是用二叉树表示,不特指的话,他是一棵完全二叉树。因此通常不必用指针,而是用数组来实现堆的存储。我们知道,完全二叉树用数组来表示,就相当于把全完二叉树的层序遍历依次存入数组中,知道最后一个节点。需要注意的是,所用的数组的起点为1,而不是0。这样的目的是很容易能......原创 2019-08-05 16:30:33 · 6125 阅读 · 5 评论 -
排序算法一:插入排序
背景知识:在学习排序算法前,我们需要知道两个概念:排序算法的稳定性、逆序对在一组待排序记录中,如果存在任意两个相等的记录R和S,且在待排序记录中R在S前,如果在排序后R依然在S前,即他们前后位置在排序前后不发生改变,则称该排序算法是稳定的。(排序按从小到大规则的情况下)如果i<j,但是在数组中a[i]>a[j] 则称(i,j)是一对逆序对。简单插入排序:思想:...原创 2019-08-06 10:40:52 · 197 阅读 · 0 评论 -
排序算法二:选择排序
首先来看一下简单选择排序:思想:在未排序的序列中选出最小的元素和当前序列的第一个元素互换,然后在剩下的元素中选出一个与剩下元素的第一个位置互换,依次交换,最后就会形成一个从小到大的已排序序列。void simpleSelectSort(int *a, int N){ int i,j,min; for (int i=0; i<N; i++) { //找...原创 2019-08-06 11:33:28 · 171 阅读 · 0 评论 -
排序算法三:交换排序
冒泡排序:冒泡排序是最简单的交换排序。对N个元素的数组进行排序时,一共进行N-1次循环。在第i次循环中,对从第1到低N-i个元素从前到后进行比较,每次比较相邻的两个元素,若前一个元素大于后一个元素,则交换两者位置,否则保持不变。这样一次循环完成后,就把第i大的元素移动到第N-i个位置上,这称为第i趟冒泡。整个过程一共进行N-1次冒泡。void bubbleSort(int *a, int...原创 2019-08-09 15:21:11 · 303 阅读 · 0 评论 -
二叉树相关的过程动图
找了几个有动图的,收藏一下:AVL的左旋右旋:https://www.jb51.net/article/154428.htmAVL讲解:https://blog.csdn.net/lemon_tree12138/article/details/50393548二叉树的各种遍历:http://www.cainiaoxueyuan.com/suanfa/10147.html待续。。...原创 2019-06-28 16:15:21 · 1618 阅读 · 0 评论 -
05-树7 堆中的路径
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点...原创 2019-07-09 11:16:59 · 143 阅读 · 0 评论 -
03-树2 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...原创 2019-06-24 17:30:47 · 2774 阅读 · 1 评论 -
线性表的顺序存储实现(C语言)
线性表的顺序存储是指在内存中,用一块连续的存储空间来存储线性表的各个元素。在C语言里,一维数组在内存中的存储空间就是一块连续的存储区域。因此使用以为数组来表示线性表的顺序存储。我们需要考虑到,因为这个数组是动态变化的,那么这个数组应该数足够大的,因此我们在初始化这个数组的时候,应该给予其相关问题的最大值。而且我们还需要有一个标记能够告诉我们该数组中已存放的元素的末尾。返回表中元素的长度时,...原创 2019-06-14 17:21:08 · 1404 阅读 · 0 评论 -
01-复杂度1 最大子列和问题
记录:题目如下:给定K个整数组成的序列{N1,N2, ...,NK},“连续子列”被定义为{Ni,Ni+1, ...,Nj},其中1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,...原创 2019-06-11 11:15:22 · 320 阅读 · 0 评论 -
线性表的链式存储实现(C语言)
上一篇用数组实现了线性表的存储,但是这种方式在插入和删除元素时,需要通过元素的移动来实现,效率比较低。而且在估计的最大数组个数小于实际情况时,不好处理。我们可以通过链式存储来实现,是通过“链”来连接元素,因此对于线性表的插入和删除只需要对链进行操作即可。我们将链表中的一个节点表示为如下(每个节点都包含一个指向下一个节点的指针):typedef int ElementType; //...原创 2019-06-16 12:53:25 · 2329 阅读 · 0 评论 -
时间复杂度和空间复杂度(看过的好的文章集合)
第一篇(评论有一条讲log2N感觉还可以)第二篇第三篇...待续原创 2019-06-11 12:21:35 · 576 阅读 · 0 评论 -
03-树1 树的同构
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N(≤...原创 2019-06-25 11:56:52 · 98 阅读 · 0 评论 -
堆栈的线性存储(顺序栈)和链式存储(链栈)
堆栈(Stack)是有约束的线性表,插入和删除都只能在表的同一端。对于用数组来实现的话,我们一般把数组起始位置作为栈底,把下标越来越大的部分作为栈顶。这样就需要一个标记来表示当前栈顶的位置。顺序栈:typedef int elementType;typedef int position;struct StackNode{ elementType * Data;//表示堆栈...原创 2019-06-17 16:34:51 · 1073 阅读 · 0 评论 -
队列的顺序存储(数组)和链式存储(链表)C语言实现
前一篇 堆栈的顺序存储和链式存储------多个数据组成一个有序序列,只能在一端插入,在另一端删除,这样的数据组织方式就叫做队列。又被称为"先进先出表"(FIFO)。顺序存储:首先来看用数组实现,分别用两个变量Front和Rear来表示队列的头和尾,一开始都初始化为-1。当有元素入队时(插入数组尾中)Rear向数组尾移动一。当有元素出队时,Front向右移动一,然后将元素移除。...原创 2019-06-18 13:21:41 · 1809 阅读 · 0 评论 -
04-树4 是否同一棵二叉搜索树
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N(≤10)和L,分别是每个序列插入元素的个数和需要检...原创 2019-07-02 16:45:33 · 441 阅读 · 0 评论 -
堆栈之中缀转后缀表达式(C语言)
我们再来复习一下堆栈(Stack)这个数据结构,堆栈是有一定约束的线性表,插入和删除操作都作用在栈顶(Top)位置。我们既可以通过数组顺序实现堆栈,也可以通过链表链式实现堆栈,具体情况具体分析。那么什么是中缀表达式和后缀表达式呢?通俗地来说,中缀表达式就是我们平常用到的表达式的方式,比如说:1+2x(3-4)而后缀表达式呢?则是计算机容易识别的,但是对于人来说有点难受:...原创 2019-08-14 15:08:40 · 1529 阅读 · 1 评论