数据结构
文章平均质量分 89
帆帆帆帆帆丶
。。。。
展开
-
浅谈线性表(一)【帆帆帆笔记系列】
线性表与链表线性表: 线性表是一种逻辑结构,相同数据类型的n个数据元素的有限序列,除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且只有一个直接后继。 特点:1.元素个数有限 2.逻辑上元素有先后次序 3.数据类型相同 4.仅讨论元素间的逻辑关系。 线性表与顺序表和链表不同 线性表是一种逻辑结构 仅用来讨论元原创 2017-09-07 20:17:40 · 318 阅读 · 0 评论 -
二叉树的构造与遍历
#include/* 构造链式二叉树 输出先序遍历 中序遍历 后序遍历结果 统计叶子节点的个数和二叉树的深度*/struct Tree{ char data; struct Tree *lchild, *rchild;}*t;int cnt=0;//用于统计叶子的数目struct Tree *creat(struct Tree *t)//根据先序建立原创 2017-11-16 18:29:22 · 286 阅读 · 0 评论 -
图的深度/广度优先遍历(BFS DFS)
在了解图的两种遍历方式前,需要知道图的存储方式,此处只说明简单的稀疏图的存储方式:邻接矩阵邻接矩阵既可以用来存储无向图,也可以用来存储有向图。该结构实际上就是用一个二维数组(邻接矩阵)来存储顶点的信息和顶点之间的关系(有向图的弧或无向图的边)。其描述形式如下://图的邻接矩阵存储表示 #define MAX_NUM 20 // 最大顶点个数 enum GraphKind{GY,GN原创 2017-11-15 17:24:46 · 7682 阅读 · 0 评论 -
个人模板【最长公共连续子序列】
#include using namespace std; void getLCS(char* str1, char* str2) { int len1 = strlen(str1); int len2 = strlen(str2); int matrix[len1]; //str1为x方向 //初始化matrix fo原创 2017-11-29 21:19:17 · 207 阅读 · 0 评论 -
个人模板【拓扑排序】
#include using namespace std; int n, m; int a[101][101], d[101]; void topo(){ for(int i = 1; i <= m; i++){ for(int j = 1; j <= m; j++){ if(!d[j]){原创 2017-11-29 21:17:58 · 176 阅读 · 0 评论 -
数据结构—哈夫曼树与哈夫曼编码
一,什么是哈夫曼树哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。它们的带权路径长度分别为:图a: WPL=5*2+7*2+2*2+13*2=54图b: WPL=5*3+2*3+7*2+13*1=48可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。二,如何构建哈夫曼树一般可以按下面步骤构建:1原创 2017-11-26 19:00:14 · 995 阅读 · 0 评论 -
数据结构—树状数组
一,什么是树状数组。 树状数组作为线段树的一个分支,能处理一些特殊情况下的线段树问题,在数学上我们这样定义:数据类型为 ,更新操作为将 变为 ,查询为求 。如果 构成一个幺半群,就可以用线段树实现。如果 并且(S, +)构成一个交换群,就可以用树状数组实现。数据类型为 ,更新操作为对所有的 将 变为,查询为求 。如果 构成一个幺半群, 构成原创 2017-11-28 21:24:04 · 1445 阅读 · 1 评论 -
Hrbust 2224 逆序对问题【归并排序/离散化树状数组】
逆序对问题 Time Limit: 500 MS Memory Limit: 32768 K Total Submit: 386(94 users) Total Accepted: 78(59 users) Rating: Special Judge: NoDescription 给定 n 个数组成的数组,求其逆序对的总数。逆序对定义为,存在 (i, j) 满足 i A[转载 2017-11-27 19:12:35 · 350 阅读 · 0 评论 -
STL之动态数组vector 【帆帆帆笔记系列】
c++中vector用法总结介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空原创 2017-10-16 18:44:39 · 367 阅读 · 0 评论 -
STL之队列 【帆帆帆笔记系列】
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。–队尾(rear)——允许插入的一端–队头(front)——允许删除的一端队列特点:先进先出(FIFO)队列的结构: 基础操作:(1)初始化队列:I原创 2017-10-16 17:53:07 · 283 阅读 · 0 评论 -
HDU 1004 Let the Balloon Rise
Let the Balloon RiseTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 128615 Accepted Submission(s): 50819Problem DescriptionContes原创 2017-11-02 22:34:04 · 216 阅读 · 0 评论 -
二叉树
一、二叉树基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。性质:1、非空二叉树的第n层上至多有2^(n-1)个元素。2、深度为h的二叉树至多有2^h-1个结点。满二叉树:所有终端都在同一层次,且非终端结点的度数为2。在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。完全二叉树:除了最大的层次即成为一颗满二叉树且层次最大那层所有的结点均向左靠齐,原创 2017-10-21 15:46:49 · 371 阅读 · 0 评论 -
通过先序和中序遍历序列来构造二叉树
给出一棵二叉树的先序和中序遍历的序列,构造出该二叉树。思路一:采用分治法。1)取先序遍历序列的第一个值,用该值构造根结点,,然后在中序遍历序列中查找与该元素相等的值,这样就可以把序列分为三部分:左子树(如果有)、根结点和右子树(如果有)。2)将两个序列都分成三部分,这样就分别形成了根结点的左子树和右子树的先序遍历和后序遍历的序列。3)重复1)和2)步骤,直至所有结点都处理完就可以完原创 2017-10-21 16:14:02 · 1768 阅读 · 0 评论 -
STL之栈 【帆帆帆笔记系列】
栈: 栈(stack)又名堆栈,它是一种线性表。其特点在于仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一 个栈插入新元素又称作进栈(入栈 or 压栈);从一个栈删除元素又称作出栈(退栈)。 其重要的特性可以简述为LIFO(Last In First Out),也就是“后入先出”,类似于在桶中放盘子,只能从顶部放上去,也只能从最高处拿出原创 2017-09-14 16:40:48 · 454 阅读 · 0 评论 -
浅谈线性表(二)【帆帆帆笔记系列】
本章来讨论顺序存储和链式存储的具体实现:1.顺序存储顺序表,使用数组实现,一组地址连续的存储单元,数组大小有两种方式指定,一是静态分配,二是动态扩展。注:线性表从1开始,而数组从0开始。优点:随机访问特性,查找O(1)时间,存储密度高;逻辑上相邻的元素,物理上也相邻;缺点:插入删除需移动大量元素。顺序表相关的操作跟数组有关,一般都是移动数组元素。原创 2017-09-07 20:37:07 · 266 阅读 · 0 评论 -
数据结构—图论
图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。图论是一种表示 "多对多" 的关系图是由顶点和边组成的:(可以无边,但至少包含一个顶点)一组顶点:通常用 V(vertex) 表示顶点集合一组边:通常用原创 2017-11-26 19:53:19 · 1590 阅读 · 0 评论