数据结构
Tony L.Du
风吹浪打,不忘初心
展开
-
分治归并——排序
归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加原创 2015-11-19 20:14:36 · 477 阅读 · 0 评论 -
已知二叉树先序中序求后序,已知后序中序求先序
已知中序先序求后序#include<iostream>#include<stdio.h>#include<cstring>using namespace std;char inorder[100];char preorder[100];void build(int in_l, int in_r, int pre_l, int pre_r){ int mid = strchr(inor原创 2015-11-28 22:09:25 · 790 阅读 · 0 评论 -
Binary Tree_build & travserse(二叉树建立,遍历)
#include <stdio.h>#include <stdlib.h>struct Node{ char data; struct Node * left; struct Node * right;};void Create(Node ** root){ char ch; scanf("%c", &ch); if(ch == '#') retur原创 2016-10-31 22:12:05 · 667 阅读 · 0 评论 -
最长回文子串-Manacher算法(详解)
定义: 回文串:一个字符串, 逆置之后,与原串相同; 回文子串: 一个字符串的子串(连续),是回文串.则该子串为整个字符串的一个回文子串. 最长回文子串:一个字符串中最长的回文子串.求最长回文子串最容易想的方法1(dp): 先将串逆置,再与原串求最长公共子序列(LCS)(o(n^2)), //时间O(n^2) 空间O(f(n^2));方法2(纯暴力): 两重循环枚举起点原创 2016-04-11 15:07:25 · 7215 阅读 · 2 评论 -
括号匹配(){}[]({[]})
描述 现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出N原创 2016-04-08 02:17:23 · 1214 阅读 · 0 评论 -
51Nod 1298 圆与三角形
题目链接: 51Nod 1298 圆与三角形题目描述: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出”Yes”,否则输出”No”。(三角形的面积大于0)。Input 第1行:一个数T,表示输入的测试数量(1 <= T <= 10000),之后每4行用来描述一组测试数据。 4-1:三个数,前两个数为圆心的坐标xc, yc,第3个数为圆的半径R。(-30原创 2016-03-25 14:06:11 · 1374 阅读 · 0 评论 -
CODE[VS] 1295 N皇后问题
题目链接:CODE[VS] 1295 N皇后问题题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。输入描述 Input Description 给定棋盘的大小n (n ≤ 13)输出描述 Out原创 2016-03-09 13:25:20 · 617 阅读 · 0 评论 -
CODE[VS] 1029 遍历问题
题目链接: CODE[VS]1029 遍历问题 题目描述 Description 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 输入描述 Input Desc原创 2016-03-17 19:52:39 · 1041 阅读 · 0 评论 -
POJ 1426 Find The Multiple(简单搜索bfs)
题目链接: [kuangbin带你飞]专题一 简单搜索 E - Find The Multiple题目大意: 给一个数n,让你找出一个只有1,0,组成的十进制数,要求是找到的数可以被n整除。解题思路: 最高位为1, 接下来每一位不是0就是1,双入口bfs代码如下:#include<iostream>#include<stdio.h>using namespace std;stru原创 2016-01-26 11:03:44 · 456 阅读 · 0 评论 -
迭代加深搜索(埃及分数)
迭代加深:对于可以用回溯法求解但解答树的深度没有明显上限的题目,可以考虑使用迭代加深搜索。 如果可以设计出乐观估价函数,则迭代加深搜索成了IDA*算法深度递增,仿广搜,限定下界的深搜;迭代加深,剪枝。 已埃及分数为例: 题目: http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=358题意:某真分数,需要将其化简为最少的原创 2016-01-18 22:35:24 · 829 阅读 · 0 评论 -
初识图,图的存储(邻接矩阵,邻接链表)和深搜遍历
1.图的基本概念(1)图是由顶点集合与顶点间的关系集合组成的一种数据结构 Graph(V, E)其中V称为顶集(Vertices Set),E称为边集(Edges set) :V是顶点的非空有限集合,E是顶点之间关系的有限集合. (2)有序图:顶点对(v1, v2)是有序的;无序图:顶点对(v1, v2)是无序的。 (3)无向边:若顶点vi, 到vj之间的原创 2015-12-01 17:25:13 · 5107 阅读 · 0 评论 -
POJ 1321棋盘问题(简单搜索dfs回溯)
简单深搜+回溯题目:http://poj.org/problem?id=1321Description: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input: 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开原创 2016-01-18 22:51:43 · 919 阅读 · 0 评论 -
破损的键盘(uva 11988)
题目大意:你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下。给你一段按键的文本,其中’[‘表示Home键,’]’表示End键,输出这段悲剧的文本。思路:使用链表来模拟,遇到Home键,就将后边的文本插入到这段文本的最前边,遇到End键,就插入到这段文本的最后边。但是用链表会用到指针,过程比较繁琐。这里用一个Next数组模拟指向,Next[i]表示当前显示屏中s[i]右边的字符原创 2015-11-28 21:57:55 · 958 阅读 · 0 评论 -
铁轨(UVa 514)
PopPush城市有一座著名的火车站。这个国家到处都是丘陵。而这个火车站是建于上一个世纪。不幸的是,那时的资金有限。所以只能建立起一条路面铁轨。而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走。具体看下图。当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组。假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1原创 2015-11-28 15:06:17 · 2598 阅读 · 2 评论 -
DFS求连通块(UVa 572)
图:图描述的是一些个体之间的关系与现行表和二叉树不同的是:这些个体之间既不*是前驱后继的关系,也不是祖先后代的层次关系,而是错综复杂的网状结构油田(Oil Deposits,UVa 572) 输入一个m行n列的字符矩阵,统计字符“@”组成多少个“八连块”。如果两个字符“@”所在的格子相邻(横丶竖或者对角线方向),就是说它们同属于一个八连块。例如:样例输入:1 1 * 3 5 @@* @原创 2015-11-26 22:09:51 · 837 阅读 · 0 评论 -
马(糟)踏棋盘问题
马踏棋盘算法(骑士周游问题)定义:将马随机放在国际象棋的8×8棋盘[0~7][0~7]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格 (可扩展为NxN的棋盘)鄙人小白,连续数天研究此问题。 也是老师布置的作业,某老师编写的教科书上面的代码思想为:采用栈的数据结构,即将马的行走顺序压入栈中具体步骤如下: 1)建立一个栈,定义其栈顶和栈底原创 2015-11-19 20:11:50 · 1039 阅读 · 0 评论 -
堆排序
#include <iostream>#include <stdio.h>using namespace std;int heep[] = {2, 5, 3, 7, 4, 9, 1, 6, 8, 10};int n = 10;void heep_print(int cnt){ printf("\n%d:\n", cnt); for(int i = 0; i < n;i++){原创 2016-12-20 00:10:46 · 744 阅读 · 3 评论