算法与数据结构
你看这人,真菜
没啥就是个菜鸡
展开
-
二叉树的前中后层序遍历(递归、非递归Java实现)
1 二叉树的前中后序递归实现树的前中后序的遍历这个是很常见的问题,其递归做法相对简单,呜呜,但是刷题的时候好像都要用非递归//前序遍历List<Integer> preList = new ArrayList<Integer>();public List<Integer> preOrder(TreeNode root){ if(root == nul...原创 2019-12-30 11:10:18 · 666 阅读 · 0 评论 -
[常用排序算法] 归并排序 (Merge Sort)
一 基本思想归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。二 算法描述把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序...原创 2019-12-28 11:02:42 · 131 阅读 · 0 评论 -
[常用排序算法] 桶排序 (Bucket Sort)
一 基本思想桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。二 算法描述第1步,求数列最大最小值,运算量为n。第2步,创建空桶,运算量为n。第3步,把原始数列的元素分配...原创 2019-12-26 16:58:22 · 186 阅读 · 0 评论 -
[常用排序算法] 堆排序(Heap Sort)
一 基本思想堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组...转载 2019-12-25 16:34:19 · 240 阅读 · 0 评论 -
[常用排序算法] 希尔排序 (Shell Sort)
一 基本思想希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把元素按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,...原创 2019-12-25 09:09:39 · 118 阅读 · 0 评论 -
[常用排序算法] 快速排序 (Quick Sort)
一 基本思想(分治+填坑)通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。二 算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比...原创 2019-12-23 11:30:15 · 158 阅读 · 0 评论 -
[常用排序算法] 插入排序(Insertion Sort)
一 基本思想插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。在要排序的一组数中,假定前n-1个数已经...原创 2019-12-23 09:28:48 · 429 阅读 · 0 评论 -
[常用排序算法] 选择排序(Selection Sort)
一 基本思想选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。二 算法描述(n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。)初始状态:无序区为R[1…n],有序区为空;第...原创 2019-12-23 09:19:10 · 174 阅读 · 0 评论 -
[常用排序算法] 冒泡排序 (Bubble Sort)
1 算法概述原创 2019-12-23 08:52:21 · 174 阅读 · 0 评论 -
[浙大数据结构] 08-图7 公路村村通 (30分)
1 题目描述现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成...转载 2019-12-19 16:52:27 · 1348 阅读 · 0 评论 -
[浙大数据结构] 06-图3 六度空间 (30分)
1 题目描述“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标...转载 2019-12-18 20:25:58 · 279 阅读 · 0 评论 -
[浙大数据结构] 06-图1 列出连通集 (25分)
1 题目描述给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1v2 … ...原创 2019-12-18 19:52:07 · 591 阅读 · 0 评论 -
[浙大数据结构] 03-树3 Tree Traversals Again (25分)
1 题目描述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, ...原创 2019-12-15 08:39:18 · 171 阅读 · 0 评论 -
[浙大数据结构] 05-树7 堆中的路径 (25分)
1 题目描述将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从...原创 2019-12-13 15:50:04 · 345 阅读 · 0 评论 -
[浙大数据结构] 04-树6 Complete Binary Search Tree (30分)
1 题目描述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 ri...原创 2019-12-12 21:53:37 · 321 阅读 · 1 评论 -
[浙大数据结构] 04-树4 是否同一棵二叉搜索树(25 分)
1 题目描述给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个...原创 2019-12-12 15:12:55 · 320 阅读 · 1 评论 -
[浙大数据结构] 03-树2 List Leaves (25分)
1 题目描述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-12-08 20:05:38 · 1085 阅读 · 0 评论 -
[浙大数据结构] 03-树1 树的同构 (25分)
1 题目描述给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1 图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10...原创 2019-12-07 14:49:24 · 402 阅读 · 1 评论 -
[浙大数据结构] 02-线性结构1 两个有序链表序列的合并 (15分)
1 题目描述本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode ...原创 2019-12-05 14:41:29 · 580 阅读 · 0 评论 -
队列练习--判断队列中有多少个元素
现采用大小为10的数组实现一个循环队列。设在某一时刻,队列为空且此时front和rear值均为5。经过若干操作后,front为8,rear为2,问:此时队列中有多少个元素?A.4B.5C.6D.7答案:A解析:若队尾>队头队列元素个数=队尾指针-队头指针若队头>队尾队列元素个数=队尾指针-队头指针+队列容量...原创 2019-12-05 10:27:18 · 3936 阅读 · 0 评论 -
顺序存储结构与链式存储结构对比
顺序存储结构:优点:1)随机存取(时间复杂度为O(1));2)无需为表示表中元素之间的逻辑关系而增加额外的存储空间;缺点:1)插入、删除操作需要移动大量元素,效率低(时间复杂度为O(n));2)表的长度难以确定链式存储结构优点:1)插入、删除不需要移动数据,效率高(时间复杂度为O(1));缺点:1)存取时需要遍历,效率低(时间复杂度为O(n));3、适用的场合顺...原创 2019-12-04 16:57:22 · 1761 阅读 · 0 评论 -
[浙大数据结构] 01-复杂度3 二分查找 (20分)
1 题目描述本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position...原创 2019-12-04 16:51:18 · 481 阅读 · 1 评论 -
[浙大数据结构] 01-复杂度2 Maximum Subsequence Sum (25分)
1 题目描述01-复杂度2 Maximum Subsequence Sum (25分)Given a sequence of K integers { N1 , N2 , …, NK }. A continuous subsequence is defined to be { Ni, Ni+1 , …, Nj} where 1≤i≤j≤K. The Maximum Subsequen...原创 2019-12-04 16:12:26 · 219 阅读 · 0 评论 -
pat平台使用注意事项
pat真是个神奇的在线平台呀~2019.12.04 开始学习浙大数据结构这门课这门课和pat平台是相结合的,习题需要在pat上刷之前在leetcode上刷题,刚来到这个平台着实有点懵,不知道该怎么下手写代码这个平台和leetcode 差别还是蛮大的简单总结一下 我所疑惑的地方吧~(1)这个平台需要写输入和输出,就是需要自己去提供输入的接口,那些数据是由系统提供的(2)这个平台上写代码...原创 2019-12-04 11:33:04 · 1099 阅读 · 0 评论 -
[浙大数据结构] 01-复杂度1 最大子列和问题 (20分)
1 题目描述01-复杂度1 最大子列和问题 (20 分)给定K个整数组成的序列{ N1 , N2 , …, NK},“连续子列”被定义为{ Ni , Ni+1, …, Nj},其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求...原创 2019-12-04 11:23:01 · 564 阅读 · 0 评论 -
[数据结构] 给定n 个数,进行数组求和
开始着手看java 的数据结构,慢慢去培养自己的思维能力,从简单的开始学吧,这事也不着急,反正急也急不来今天主要是看了第一章的一些内容,随便看了一下,下面是数组求和问题,感觉自己看了别人的代码写下来之后又自己写了一份,值得记录一下。1 情景描述–数组求和考虑如下问题:给定n个整数,计算它们的总和。算法:Sum ( A[], n)输入:由n个整数组成的数组A[]输出:A[ ] 中所有元...原创 2019-10-21 21:33:08 · 1599 阅读 · 0 评论 -
线性表初始化运行代码
#include <stdio.h>#include <stdlib.h>#define Max 100 //定义数组的最大长度typedef int Datatype; //定义数组的数据类型typedef struct{ Datatype data[Max]; //data数组用于开辟一段连续的存储空间 int length; //定...原创 2019-10-15 22:23:36 · 3358 阅读 · 0 评论 -
常见的算法设计方法
为了获得有效的算法,必须了解一些解体的基本思想和方法。对于很多问题,只要仔细分析了数据对象后,相应的处理方法就有了;对于有些问题则不然。然而,作为探寻问题求解思路的基本思想和方法,对于任何算法设计都是有用的。1 穷举法穷举法亦称作枚举法。它的基本思想是,首先根据求解问题的部分条件确定答案的大致范围,即列举出解的所有可能的情况;然后在此范围内对所有可能的情况逐一验证,若某个情况经过验证符合问题...原创 2019-08-01 20:22:46 · 6112 阅读 · 0 评论