树、图、堆、STL

图论基础

简单图:

没有自环,两个顶点之间最多只有一条边。

完全图:

一个简单图,每两个顶点之间都有一条边。一共有(n-1)*n/2条边。

二分图:

一个简单图,设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。

一般二分图都能化成:

图的定义:

相邻、度数…………

有向图:

边都是单向的。

带权图:

可以给边加权,成为带权图。

稀疏图:

边与V*(V-1)相比非常少的图。他的补图为稠密图。

简单路径:

不出现重复的点。

连通图:

每两点之间都有路径。

树:

N个点,N-1条边

关于树的具体知识:

1.纳尼??Vector(顺序表结构 向量)和List(单链表)居然不够用??

vector list
search log n 线性
insert 线性 O(1)

无法同时兼顾高效性!!

2.中间概念

边、节点、指定根、有根树、子树、孩子、父亲、度数、兄弟、祖先、后代、叶子节点。没有意外的话,上文有讲。

任何一棵树中,所含的边数应该恰好等于所有顶点度数之和,也等于顶点总数-1.

3.有序树:将同一节点的所有孩子编号使他们具有这种意义上的某一个次序

4.WTF??原来树这么神奇?? 树:无环连通图 极小连通图 极大无环图

5.树的半线 性 v的祖先/后代若存在,则必然/未必唯一.

6.生成树:原图的子图,是一棵树。

图/树 ( 反正是通用的 ) 的表示方法 : 邻接矩阵与邻接表。

邻接矩阵:

优点:查找/删除一个点时间复杂度O(1)

邻接表:

优点:快速遍历某点所有数据 以及 占用空间小

缺点:查找、删除边不是常数时间。

二叉树

定义:二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

由二叉树定义以及图示分析得出二叉树有以下特点:

1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。

2)左子树和右子树是有顺序的,次序不能任意颠倒。

3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。 这点与普通的树不同。

1)在二叉树的第i层上最多有2i-1 个节点 。(i>=1)

2)二叉树中如果深度为k,那么最多有2k-1个节点。(k>=1)

3)n0=n2+1 n0表示度数为0的节点数,n2表示度数为2的节点数。

4)在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]是向下取整。

5)若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:

(1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;

(2) 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;

(3) 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。

所以,二叉树的表示比普通的树的表示方便多了!! 只需开一个数组,记录当前节点(x)以及节点编号(y)。他爸的编号就是y/2。

STL 数据结构

标准数据库,简称STL;

数据结构:

1.栈(stack)

1.1 栈的定义

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。所以,我们一般画一个桶来模拟栈的运行。

我们来实现栈:

#include <stack>
stack <int> a;
a.push(x);
a.pop();
a.empty();
a.top();

2.队列(queue)

与栈相反,队列的规则是先进后出。

#include <queue>
queue <int> a;
empty()函数返回真(true)如果队列为空,否则返回假(false)。 front()返回队列第一个元素的引用。 pop()函数删除队列的一个元素 push() 在末尾加入一个元素 size() 返回队列中元素的个数
优先队列

它是个队列,你把数据存进去,C++的STL自动帮帮你排序(你可以这么理解吧)。

#include <queue>
queue <int> a;
empty()函数返回真(true)如果队列为空,否则返回假(false)。 top()返回队列第一个元素的引用。 pop()函数删除队列的一个元素 push() 在末尾加入一个元素 size() 返回队列中元素的个数

操作与上面类似。

本文有部分参考:作者:MrHorse1992链接:https://www.jianshu.com/p/bf73c8d50dc2来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

树、图、堆、STL(来自菜鸡的"炒鸡"干粮)的更多相关文章

  1. 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

  2. JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

    1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...

  3. 树和堆(julyedu网课整理)

    date: 2018-12-05 16:59:15 updated: 2018-12-05 16:59:15 树和堆(julyedu网课整理) 1 定义 1.1 树的定义 它是由n(n>=1)个 ...

  4. ㊙力荐!!!那些炒鸡有用的chrome插件㊙

    今天咱们来说一说那些炒鸡

  5. 炒鸡简单的canvas粒子(山东数漫江湖)

    位图的canvas一直不会被svg比下去的原因了. 俗话说,须弥芥子,是大小之说,也有以小见大之说,颗颗粒子,足以构建宏大效果. 这是一篇炒鸡简单的canvas粒子教程,主要是讲如何粒子特效的原理,一 ...

  6. 洛谷 P5471 - [NOI2019] 弹跳(二维线段树优化建图+堆优化存边)

    题面传送门 一道非常有意思的题(大概可以这么形容?) 首先看到这类一个点想一个区域内连边的题目可以很自然地想到线段树优化建图,只不过这道题是二维的,因此需要使用二维线段树优化建图,具体来说,我们外层开 ...

  7. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树

    题目大意 给你一棵有根树,有\(n\)个点.还有一个参数\(k\).你每次要删除一条长度为\(k\)(\(k\)个点)的祖先-后代链,问你最少几次删完.现在有\(q\)个询问,每次给你一个\(k\), ...

  8. 【51nod1443】路径和树(堆优化dijkstra乱搞)

    点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...

  9. 【BZOJ4504&&Hihocoder1046】K个串(主席树,堆)

    题意:一个长度为n的数字序列,选出其中的一个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只被统计一次)询问第k大的和是多少 1 <= n <= 100000, 1 < ...

随机推荐

  1. Markdown转载

    @TOC 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown ...

  2. 【Vue的路由,SPA概念】

    前言 本章是为了以后实现前端页面的搭建而写的, 重点在于如何实现 单页Web应用 因为相对于以前的传统多页面web,有很大的缺陷. 那么就必须了解一下Vue的路由设置. SPA的概念 总的而言,我们知 ...

  3. Powered by .NET Core 进展0819:高速开车车况汇报

    继续以流水账的方式向大家汇报,自从上周六上午将 .net core 版博客站点从 windows 部署切换到 linux 上的 docker-compose 部署后,到目前一直在线. Linux 上没 ...

  4. 从60分到85分——SD-WAN进阶教程(下)

    本文为<从60分到85分——SD-WAN进阶教程>的下篇,上篇请跳转https://www.sdnlab.com/20683.html. (续上文)Enterprise Oriented ...

  5. copy and mutableCopy

    结论: 1, 深复制与浅复制 2,immutable和mutable 3,代码分析: #pragma mark - String - (void)stringCopyAndMutableCopy { ...

  6. .NET Core C#中级篇2-5 常见实用类

    .NETCore CSharp 中级篇2-5 本节内容为常见实用类和方法的使用 String.Format string.format方法是一个字符串格式化类,它里面的一些写法是对字符串进行指定格式的 ...

  7. 微服务SpringCloud之Spring Cloud Config配置中心服务化

    在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...

  8. TomatoLog-1.1.0实现ILoggerFactory

    TomatoLog TomatoLog 是一个基于 .NETCore 平台的产品. The TomatoLog 是一个中间件,包含客户端.服务端,非常容易使用和部署. 客户端实现了ILoggerFac ...

  9. Linux软件包管理(12)

    RPM包管理: RPM(RedHat Package Manager),早期是在RedHat发行版下,由于比较火,所以慢慢运行于各个发行版(如suse,centos等). 它生成具有.RPM扩展名的文 ...

  10. C#数据结构_图

    顶点的度=顶点的入度+顶点的出度. 顶点 v 的入度是指以该顶点 v 为弧头的弧的数目:顶点 v 的出度是指以该顶点 v 为弧尾的弧的数目. 简单路径:一条路径上顶点不重复出现. 回路:第一个顶点和最 ...