ACM_数据结构
Tovi-A
用勇气改变可以改变的事情,用胸怀接受不能改变的事情,用智慧分辨两者的不同。
展开
-
数据结构_队列
队列是一种有序的线性表,队列的两端分别称为队首和队尾。队列只允许在队尾进行插入操作,在队首进行删除操作。插入元素称为入队,删除元素称为出队。 队列常用链表或数组来实现。#include #include using namespace std;#define max 1000//队列定义struct element{ int key;};原创 2015-08-23 15:13:34 · 686 阅读 · 0 评论 -
SPFA模板
/* SPFA求单源最短路径长度 时间复杂度O(KE) */#include using namespace std; const int maxn=300001; const int inf =0x7ffffff; struct edge { int from,to,w,next; }e[1000001]; int head[maxn]; i原创 2016-11-04 17:40:08 · 431 阅读 · 0 评论 -
求树的直径算法
/*树的直径是指树的最长简单路。求法: 两遍BFS :先任选一个起点BFS找到最长路的终点,再从终点进行BFS,则第二次BFS找到的最长路即为树的直径; 原理: 设起点为u,第一次BFS找到的终点v一定是树的直径的一个端点 证明: 1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,原创 2016-11-04 13:25:12 · 11860 阅读 · 0 评论 -
拓扑排序
定义: 图的拓扑排序是对有向无环图来说的,无向图和有环图没有拓扑排序,或者说不存在拓扑排序,对于一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若图G存在边,则u在线性序列中出现在v之前。对一个有向无环图进行拓扑排序产生的线性序列称为满足拓扑次序的序列。一个有向无环图可以表示某种动作或者方案,或者状态,而有向无环图的拓扑序列通常表示某种某案切实原创 2016-05-21 22:02:04 · 467 阅读 · 0 评论 -
图的链式前向星存储结构
一般来讲,图的常用存储结构有邻接矩阵,和邻接表,但我们知道邻接矩阵空间浪费太严重,邻接表不好写,今天来讲一下图的另一只常用的存储结构:前向星和链式前向星,介于上述两种存储结构之间的一种比较均衡的存储结构。 首先我们来说一下图的前向星表示方法:前向星是一种通过存储边信息的方式来存储图的一种数据结构,他构造简单,读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排列,原创 2016-05-21 21:56:43 · 648 阅读 · 0 评论 -
逆波兰表达式
逆波兰表达式 表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式(Infix Expression),如A+B。波兰数学家Jan Lukasiewicz提出了另一种数学表示法,它有两种表示形式:把运算符写在操作数之前,称为波兰表达式(Polish Expression原创 2016-05-21 18:34:00 · 3068 阅读 · 0 评论 -
线段树入门HDU_1754
题目链接:点击打开链接I Hate ItTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 58817 Accepted Submission(s): 22905Problem Description很多学原创 2016-04-07 19:25:57 · 507 阅读 · 0 评论 -
二叉搜索树
一、二叉搜索树的结构二叉搜索树是能够高效的进行下列操作的数据结构。1、插入一个数值2、查询是否包含某个数值3、删除某个数值根据实现的不同,还可以实现其他各种各样的操作,是一种实用性很高的数据结构。二叉搜索树如何储存数值参 见下图、二叉搜索树的例子所有的节点,都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大这一条件。二叉原创 2015-12-01 14:12:03 · 463 阅读 · 0 评论 -
优先队列
定义:能够完成下列操作的数据结构叫做优先队列。1、插入一个数值2、取出最小的数值(获得数值,并且删除)优先队列示意图/*Poj 2431 *题目大意:你需要驾驶一辆卡车行驶L单位距离。最开始时,卡车上有P单位的汽油。卡车没开1单位距离需要消耗1单位的汽油。 * 如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。在途中一共有N个加油站。第i个加油站站在距离原创 2015-12-01 11:20:51 · 468 阅读 · 0 评论 -
单调栈
题目传送门:点击打开链接心塞。因为一个等号找了一个上午的bug。刷题少的确是泪啊、 /*题目大意:给你n头奶牛高度的数据,从左边向右边,每一头奶牛只能看到比他高度矮的奶牛。问这n头奶牛能总共看到的奶牛头数是多少算法分析:可以构造一个单调递增栈,这样就可以求出其他奶牛看到该头奶牛的数量,求和即可 */#include #include #include #include #原创 2015-10-07 11:04:47 · 419 阅读 · 0 评论 -
栈
栈是一种线性表,其插入和删除操作都只能在表的一端进行,这一端称为栈顶,而另一端称为栈底! 直接上代码!#include #include using namespace std;#define max 10000struct element{ //定义栈 int key;};element stack[max];int top = -1;bo原创 2015-08-15 15:29:46 · 607 阅读 · 0 评论 -
线段树
线段树转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326 持续更新中···一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操转载 2015-08-26 10:37:27 · 644 阅读 · 0 评论 -
哈希表
EqsTime Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uSubmit StatusDescriptionConsider equations having the following form: a1x1 3+ a2x2 3+ a3x3 3+ a4x4原创 2015-08-24 09:33:03 · 604 阅读 · 0 评论 -
数据结构_散列表
散列表的查找技术 我们学过的查找技术都是通过一系列的给定值与关键码的比较,查找效率依赖于查找过程中进行的给定值与关键码的比较次数。而散列表的查找不用比较,通过关键码直接确定存储位置。在存储位置和关键码之间建立一个确定的对应关系。 散列表的基本思想:在记录的存储地址和他的关键码之间建立一个确定的对应关系。这样,不经过比较,一次读取就能得到所查元素的查找方法。原创 2015-08-23 23:18:16 · 1340 阅读 · 0 评论 -
数据结构_链表_单向链表
链表(Linked List)是由一连串的结构(称为结点)组成的,其中每个结点都包含指向链中下一个结点的指针。链表中的最后一个结点包含一个空指针。链表与数组不同,数组的线性序是由数组的下标决定的,而链表中的顺序是由各结点的指针域所决定的。链表可以灵活地表示动态集合。 采用链表表示线性表,无论向表中插入或删除元素,都不需要移动数据。与顺序表示法不同,链表的结点不再是连续且等距离地存放原创 2015-08-23 16:14:07 · 541 阅读 · 0 评论 -
二叉排序树BST+求树深度算法
#include "stdio.h"#include "malloc.h"typedef struct node { int key; struct node *lchild, *rchild; }BSTNode, *BSTree;void InsertBST(BSTree *bst, int key){ BSTree s; if (*bst == NULL) { s原创 2016-10-31 20:35:25 · 2075 阅读 · 0 评论