数据结构基础
兔老大RabbitMQ
全站最硬核博主(之一)。在腾讯总部工作,bat/tmd有五家发过offer。acm/leetcode刷题狂,c /Java/python/go/php各种后端语言都喜欢,安卓/node/叶子/jsp等前端也能写,最喜欢鼓捣各种组件,请多指教。
展开
-
折纸的折痕(RVL中序遍历)
这个题我见到过不止一次。笔试面试。你拿个纸折一折会发现是这样的:这棵树左子树是纸的下半部分,右子树是纸的上半部分。下折痕指的是折痕突起的方向是纸的背面。可以看出折痕是一棵满二叉树,根节点是下折痕,每一棵子树的左孩子是上折痕,每一棵子树的右孩子是下折痕。从纸的上面到下面打印就是二叉树的RVL(右根左)的遍历。对折N次就是指N层节点。/** * 请把纸条竖着放在...原创 2020-01-19 10:34:28 · 7316 阅读 · 47 评论 -
看这玩意复习你还会挂科?《数据结构篇》
一.绪论1.何谓程序设计? 程序 = 算法 + 数据结构2.数据结构的定义 是相互之间存在一种或多种特定关系的数据元素的集合3.数据、数据元素、数据对象的概念 数据(data):对客观事物的符号表示,含义很广,指数、图像、声音、文本等一切计算机可以处理的事物。数据元素(data element):组成数据的基本单位。数...原创 2020-01-14 15:12:42 · 20553 阅读 · 160 评论 -
汉诺塔JS
var delay = 200; //in milliseconds var drag=false; var objDisk=null; var x = 0; var y = 0; var disksOnTower1 = new Array(null,null,null,null,null,null,null,null); var disksOn...原创 2020-01-11 11:27:52 · 8017 阅读 · 72 评论 -
JS演示图论汇总
BFS.jsvar BFSClass = function () { this.isVisit = new Array(); this.adj = new Array(); this.vQueue = new Array(); this.curV; this.temp = new Array(); this.init = function (b...原创 2020-01-11 11:23:16 · 10807 阅读 · 61 评论 -
时间复杂度 P/NP/NPC
你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。...原创 2018-09-06 17:51:48 · 12390 阅读 · 62 评论 -
redis——数据结构和对象的使用介绍
redis官网微软写的windows下的redis我们下载第一个额案后基本一路默认就行了安装后,服务自动启动,以后也不用自动启动。出现这个表示我们连接上了。redis命令参考链接String字符串结构struct sdshdr{ //记录buf数组中已使用字节的数量 int len; //记录buf数组中未使用的数量 ...原创 2019-10-12 19:56:30 · 4116 阅读 · 45 评论 -
拓扑排序
(1)有向无环图无环的有向图,简称 DAG (Directed Acycline Graph) 图。有向无环图在工程计划和管理方面的应用:除最简单的情况之外,几乎所有的工程都可分为若干个称作“活动”的子工程,并且这些子工程之间通常受着一定条件的约束,例如:其中某些子工程必须在另一些子工程完成之后才能开始。对整个工程和系统,人们关心的是两方面的问题:①工程能否顺利进行;②完...原创 2019-02-20 21:18:21 · 4022 阅读 · 58 评论 -
数据结构课上笔记12
二叉树的存储结构 顺序存储结构 完全二叉树:用一组地址连续的 存储单元依次自上而下、自左至右存 储结点元素,即将编号为 i 的结点元 素存储在一维数组中下标为 i –1 的分量中。一般二叉树:将其每个结点与完 全二叉树上的结点相对照,存储在一 维数组的相应分量中。 最坏情况:树退化为线性后:我们要把它“变”成这个大家伙来存了:深度为 k 的且只 有 ...原创 2018-11-23 14:51:52 · 3636 阅读 · 39 评论 -
数据结构课上笔记13
树存储结构 父节点表示法 数据域:存放结点本身信息。双亲域:指示本结点的双亲结点在数组中的位置。对应的树:/* 树节点的定义 */#define MAX_TREE_SIZE 100 typedef struct{ TElemType data; int parent; /* 父节点位置域 */} PTNode; typedef st...原创 2018-11-23 16:09:55 · 3509 阅读 · 19 评论 -
二叉树序列化/反序列化
二叉树被记录成文件的过程,为二叉树的序列化通过文件重新建立原来的二叉树的过程,为二叉树的反序列化设计方案并实现。(已知结点类型为32位整型) 思路:先序遍历实现。因为要写入文件,我们要把二叉树序列化为一个字符串。首先,我们要规定,一个结点结束后的标志:“!”然后就可以通过先序遍历生成先序序列了。 但是,众所周知,只靠先序序列是无法确定一个唯一的二叉树的,原因...原创 2018-11-26 17:49:30 · 3963 阅读 · 22 评论 -
根据数组建立平衡二叉搜索树
它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉(搜索)树。 二分:用有序数组中中间的数生成搜索二叉树的头节点,然后对数组的左右部分分别生成左右子树即可(重复过程)。生成的二叉树中序遍历一定还是这个序列。 非常简单,不过多叙述:public class SortedArrayToBalancedBST { public sta...原创 2018-11-26 21:10:11 · 5227 阅读 · 25 评论 -
数据结构课上笔记11
满二叉树 (Full binary tree)除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。国外(国际)定义:a binary tree T is full if each node is eit...原创 2018-11-23 14:25:16 · 3694 阅读 · 47 评论 -
数据结构课上笔记14
图是一种: 数据元素间存在多对多关系的数据结构 加上一组基本操作构成的抽象数据类型。图 (Graph) 是一种复杂的非线性数据结构,由顶点集合及顶点间的关系(也称弧或边)集合组成。可以表示为: G=(V, VR) 其中 V 是顶点的有穷非空集合; VR 是顶点之间 关系的有穷集合,也叫做弧或边集合。弧是顶点的有序对,边是顶点的无序对。 特点:(相对于线性结构...原创 2018-11-25 20:49:08 · 4027 阅读 · 50 评论 -
判断平衡二叉树
平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1。并且左右两个子树都是一棵平衡二叉树(不是我们平时意义上的必须为搜索树)判断一棵树是否为平衡二叉树: 可以暴力判断:每一颗树是否为平衡二叉树。 分析:如果左右子树都已知是平衡二叉树,而左子树和右子树高度差绝对值不超过1,本树就是平衡的。 为此...原创 2018-11-19 21:05:25 · 3505 阅读 · 21 评论 -
判断二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 判断某棵树是否为二叉搜索树 单纯判断每个结点比左孩子大比右孩子小是不对的。如图:1...原创 2018-11-19 20:42:11 · 3819 阅读 · 23 评论 -
先序中序数组推后序数组
二叉树遍历所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:⑴访问结点本身(N),⑵遍历该结点的...原创 2018-11-22 15:59:39 · 3838 阅读 · 23 评论 -
先序中序后序两两结合重建二叉树
遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍...原创 2018-11-21 16:16:04 · 4068 阅读 · 26 评论 -
串的堆分配实现
今天,线性结构基本就这样了,以后(至少是最近)就很少写线性基础结构的实现了。串的类型定义typedef struct{ char *str; int length;}HeapString;初始化串InitString(HeapString *S){ S->length=0; S->str='\0';}长度int S...原创 2018-11-08 15:50:23 · 3953 阅读 · 25 评论 -
数据结构课上笔记9
数组:按一定格式排列起来的具有相同类型的数据元素的集合。 二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。 同理,推广到多维数组。若 n -1 维数组中的元素又是一个一维数组结构,则称作 n 维数组。 声明格式:数据类型 变量名称[行数] [列数] ; 实现:一般都是采用顺序存储结构来表示数组。 二维数组两种顺序存储方式:以行序为主序 (低下标...原创 2018-11-07 21:22:05 · 3858 阅读 · 22 评论 -
数据结构课上笔记15
图的存储 多重链表:完全模拟图的样子,每个节点内的指针都指向该指向的节点。节点结构内指针数为度缺点:浪费空间、不容易操作 数组表示法(邻接矩阵表示法)可用两个数组存储。其中一个 一维数组存储数据元素(顶点)的信息,另一个二维数组 (邻接矩阵)存储数据元素之间的关系(边或弧)的信息有向图:有向网:缺点:用于稀疏图时空间浪费严重优点:操作较容易...原创 2018-12-07 14:36:06 · 3552 阅读 · 35 评论 -
Abstract Self-Balancing Binary Search Tree
二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。具体介绍和实现:https://blog.csdn.net/hebtu666/arti...原创 2018-12-14 21:45:51 · 5645 阅读 · 52 评论 -
c语言实现排序和查找所有算法
c语言版排序查找完成,带详细解释,一下看到爽,能直接运行看效果。/* Note:Your choice is C IDE */#include "stdio.h"#include"stdlib.h"#define MAX 10void SequenceSearch(int *fp,int Length);void Search(int *fp,int length);vo...原创 2019-07-31 14:54:38 · 7910 阅读 · 115 评论 -
java常用类介绍及源码阅读(LinkedList)
java.util类 LinkedList<E>java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.AbstractSequentialList<E> java...原创 2019-06-03 16:40:38 · 4993 阅读 · 27 评论 -
数组精选题目三连(5)
子数组的最大累加和问题输入一个整形数组,求数组中连续的子数组使其和最大。比如,数组x应该返回 x[2..6]的和187.这四个代码完成的功能都是求最大子数组(注意用词准确,子数组连续,子序列可以不连续)。1)for(i = 1; i <= n; i++) scanf("%d", &num[i]);ans = num[1]; for(i = 1; i ...原创 2019-06-03 15:57:30 · 3116 阅读 · 33 评论 -
java常用类介绍及源码阅读(ArrayList)
java.util类 ArrayList<E>继承关系:java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.ArrayList<E>List接口的动态数组的实现。...原创 2019-06-03 10:28:50 · 7489 阅读 · 32 评论 -
数组基操三连(4)
题目一给定一个长度为N的整型数组arr,其中有N个互不相等的自然数1~N请实现arr的排序但是不要把下标0~N-1位置上的数值通过直接赋值的方式替换成1~N。要求:时间复杂度为O(N),额外空间复杂度为O(1)。思路:从左向右检查,检查到需要换的以后,就直接把它放到该去的位置,然后被换掉的数,位置肯定也不对,继续重复相同的方法,最后肯定会跳回来(原因懒得说了自己想想),然...原创 2019-06-02 18:04:20 · 3089 阅读 · 24 评论 -
数组基操三连(3)
原创 2019-06-02 14:58:20 · 2888 阅读 · 0 评论 -
数组基操三连(1)
题目: 给定一个数组arr,求出需要排序的最短子数组长度要求: 时间o(n),空间o(1)思路: 有序的数组中,任意一个数字,一定小于左边的数大于右边的数。 我们找到的需要排序的子数组,显然是比右边最小的值大,或比左边最大的值小。 我们初始化变量noMinindex=-1;从右往左遍历,记录经过的最小值为min,若当前数大于min,说明,如...原创 2019-05-31 21:50:40 · 5770 阅读 · 44 评论 -
数组精选题目三连(6)
题目一:调整有序的arr数组,使得左半部分有序且不重复,不用保证右边是否有序。思路: u : 左边的最后位置,即0---u为答案 i : 从u到右遍历 当arr[i]和arr[u]不相等时,说明是目前遇到的最大的数,此时调换arr[u+1]和arr[i] public static void leftUn...原创 2019-06-12 14:51:47 · 3099 阅读 · 29 评论 -
LRU介绍和实现
LRU全称是LeastRecently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。(这一段是找的,让大家理解一下什么是LRU)。说一下我们什么时候见到过LRU:其实老师们肯定都给大家举过这么个例子:你在图书馆,你把书架子里的...原创 2019-04-17 18:22:01 · 5033 阅读 · 59 评论 -
最短路
最短路 典型用途:交通网络的问题——从甲地到乙地之间是否有公路连通?在有多条通路的情况下,哪一条路最短? 交通网络用有向网来表示:顶点——表示城市,弧——表示两个城市有路连通,弧上的权值——表示两城市之间的距离、交通费或途中所花费的时间等。 如何能够使一个城市到另一个城市的运输时间最短或运费最省?这就是一个求两座城市间的最短路径问题。 问题抽象:在有向网中A点...原创 2019-02-20 21:19:25 · 3333 阅读 · 23 评论 -
最小生成树
问题提出: 要在n个城市间建立通信联络网。顶点:表示城市,权:城市间通信线路的花费代价。希望此通信网花费代价最小。问题分析: 答案只能从生成树中找,因为要做到任何两个城市之间有线路可达,通信网必须是连通的;但对长度最小的要求可以知道网中显然不能有圈,如果有圈,去掉一条边后,并不破坏连通性,但总代价显然减少了,这与总代价最小的假设是矛盾的。结论: 希望找到一棵生成树,它的...原创 2019-02-20 21:16:21 · 3323 阅读 · 27 评论 -
c语言文件操作
文件操作读写1 文件处理原理及基本概念C语言的文件处理功能,大体上分为两种:一种是设置缓冲区,另一种是不设置缓冲区。因为不设置缓冲区的方法直接对磁盘进行操作,速度较慢,并且由于不是C的标准函数,跨平台操作时容易出问题。本文只介绍设置缓冲区的文件处理方式:当使用包含在头文件stdio.h中的标准I/O函数时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进...原创 2018-12-21 09:26:46 · 10451 阅读 · 105 评论 -
数据结构课上笔记8
串的概念:串(字符串):是由 0 个或多个字符组成的有限序列。 通常记为:s =‘ a1 a2 a3 … ai …an ’ ( n≥0 )。串的逻辑结构和线性表极为相似。 一些串的类型: 空串:不含任何字符的串,长度 = 0。空格串:仅由一个或多个空格组成的串。子串:由串中任意个连续的字符组成的子序列。主串:包含子串的串。位置:字符在序列中的序号。子串在主...原创 2018-11-07 21:07:34 · 4132 阅读 · 24 评论 -
数据结构课上笔记10
树 树的定义:树(Tree)是 n(n≥0)个结点的有限集。若 n=0,称为空树;若 n > 0,则它满足如下两个条件: (1) 有且仅有一个特定的称为根 (Root) 的结点; (2) 其余结点可分为 m (m≥0) 个互不相交的有限集 T1, T2, T3, …, Tm, 其中每一个集合本身又是一棵树,并称为根的子树 (SubTree)。显然,树的定义是一个递...原创 2018-11-09 17:09:25 · 3367 阅读 · 26 评论 -
数据结构课上笔记7
介绍栈和队列基本概念和用法。 设输入序列1、2、3、4,则下述序列中( )不可能是出栈序列。【中科院中国科技大学2005】A. 1、2、3、4 B. 4、 3、2、1C. 1、3、4、2 D.4、1、2、3选D我是一个个模拟来做的。 描述栈的基本型性质:1、集合性:栈是由若干...原创 2018-10-26 14:28:53 · 4384 阅读 · 0 评论 -
二叉树概述
各种实现和应用以后放链接一、二叉树的基本概念二叉树:二叉树是每个节点最多有两个子树的树结构。根节点:一棵树最上面的节点称为根节点。父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子 节点。叶子节点:没有任何子节点的节点称为叶子节点。兄弟节点:具有相同父节点的节点互称为兄弟节点。节点度:节点拥有的子树数。上图中,13的度为2,46的...原创 2018-09-26 15:08:35 · 3519 阅读 · 26 评论 -
数据结构作业1 讲解和拓展
原题来自雪梨教育http://www.edu2act.net/task/list/checked/题后给出讲解和扩展任务1_1 比较下列算法的时间复杂度任务描述: 下面给出4个算法,请分析下列各算法的时间复杂度,请写清楚题号,并将每个小题的分析过程写出来,并给出分析结果。(1)for(i = 1; i <= n; i++) scanf("%d", &am...原创 2018-09-20 16:35:57 · 7224 阅读 · 75 评论 -
双链表实现
以前写的不带头的单链表实现,当时也啥也没学,好多东西不知道,加上一心想压缩代码,减少情况,所以写得不太好。请教了老师,首先是命名问题和代码紧凑性等的改进。还有可读性方面的改进,多写了一些注释。并且因为带头的比较好写,好操作,所以标准写法也不是很长,繁琐。 下面贴代码#include <stdio.h>#include <stdlib.h>#inc...原创 2018-09-20 11:50:51 · 3494 阅读 · 21 评论 -
数据结构课上笔记5
介绍了链表和基本操作用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此,链表中元素的逻辑次序和 物理次序不一定相同。 定义:typedef struct Lnode{ //声明结点的类型和指向结点的指针类型 ElemType da...原创 2018-09-25 10:04:16 · 3880 阅读 · 27 评论