![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
点点滴滴25
菜鸡
展开
-
平衡二叉树详解 图文教程(AVL) 数据结构:(概念篇+完整代码 001)
一、理解这个是一个微信公众号写的,我觉得写的通俗易懂。1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。3、它的左右子树也分别可以充当为二叉查找树。例如:例如,我现在想要查找数值为1...原创 2020-01-27 15:00:10 · 523 阅读 · 1 评论 -
数据结构:(代码篇:004)二叉搜索树 BST(二叉查找树)的基本操作
1.基本概念二叉搜索树:是二叉树是真子集,要求:根节点大于或等于左子树的节点值,小于右子树的节点值。他的中序遍历是有序的。基本操作有:查找、插入、删除、建树。查找和插入以及建树都很简单,和二叉树的差不多。删除略微复杂。2.存储结构struct node{ int data; node* lchild; node* rchild;};...原创 2020-01-24 16:16:08 · 278 阅读 · 0 评论 -
数据结构:(代码篇:003)树的存储结构和基本操作
1. 概念子节点个数不限且没有顺序。2.树的遍历只有两种:先根遍历和层序遍历先根遍历就是先访问根节点,再访问子节点。层序遍历跟二叉树的层次遍历类似。3.树的存储结构二叉树的存储结构有静态和动态,但是树的子节点可以不限,如果用指针的话,不方便,所以这里我用静态,也就是数组存下标,但是子树的个数可能不同,所以我用vector容器来存下标。...原创 2020-01-23 14:59:35 · 366 阅读 · 0 评论 -
数据结构:(代码篇 002) 给定后序和中序遍历,重建这棵树
目录1.理论依据:具体情况下:一般情况下:2.代码1.理论依据:具体情况下:已知后序遍历:post1、post2、……、postN,中序遍历:in1、in2、……、inN。由先序遍历的性质可知:preN是当前二叉树根节点的值,然后,在中序遍历中遍历一遍,找到根节点(记为k),k左侧的就是左子树,k右侧的就是右子树。左子树的长...原创 2020-01-21 21:39:35 · 222 阅读 · 0 评论 -
数据结构:(代码篇 001) 给定先序和中序遍历,重建这棵树
目录1.理论依据:具体情况下:一般情况下:2.代码1.理论依据:具体情况下:已知先序遍历:pre1、pre2、pre3、pre4、……、preN,中序遍历:in1、in2、……、inN。由先序遍历的性质可知:pre1是当前二叉树根节点的值,然后,在中序遍历中遍历一遍,找到根节点(记为k),k左侧的就是左子树,k右侧的就是右子树。左子树的长度:n...原创 2020-01-21 21:21:45 · 331 阅读 · 0 评论 -
数据结构:(代码篇 000)二叉树的存储结构和基本操作
目录一.静态存储结构1.节点的生成:2.查找&修改3. 插入4.创建二叉树5.四种遍历5.1 先序遍历5.2 中序遍历5.3 后序遍历5.4 层次遍历6.完整的代码二.动态存储结构1.新生成一个节点2.查找&修改3.插入4.生成树5.四种遍历6.完整的代码:一.静态存储结构用数组来存二...原创 2020-01-21 19:27:56 · 640 阅读 · 1 评论 -
数据结构:(概念篇 000) 树与二叉树专题(一) 常见的概念
目录树:(树的定义是递归定义)相关概念:二叉树的递归定义:二叉树与度为2的树的区别:二种特殊的二叉树:相关概念:树:(树的定义是递归定义)1.树可以为空树,即没有节点。2.树的每一个节点也可以是一棵树。相关概念:1.度:当前节点的子树棵数 , 树的度(也叫树的宽度):树中节点最大的度2.叶子节点:度为0的节点。3.满足连通、且边数等于节点数...原创 2020-01-20 21:22:19 · 269 阅读 · 0 评论 -
数据结构 归并排序(Merge Sort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结:简介:归并排序是典型的递归思想的应用,将一个序列分为两个子序列,叫做二路归并,是一种稳定的排序算法,时间复杂度为:O(nlogn)算法描述:把长度为n的输入序列分成两个长度为n/2的子序列; 对这两个子序列分别采用归并排序; 将两个排序好的子序列合并成一个最终的排序序列。代码实现:#include&l...原创 2019-03-03 18:01:36 · 7409 阅读 · 2 评论 -
数据结构 快速排序(Quick Sort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结:简介:快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。不稳定,时间复杂度和空间复杂度都是O(N*logN)。算法描述:该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数...原创 2019-03-03 18:14:59 · 7404 阅读 · 0 评论 -
数据结构 堆排序(Heap Sort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结:简介:堆排序是利用堆这种数据结构所设计的排序算法,是一种近似于完全二叉树。分为大顶堆和小顶堆。时间复杂度为:o(nlog2(n)),不稳定。算法描述:知识储备:一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1...原创 2019-03-03 22:38:56 · 5915 阅读 · 0 评论 -
数据结构 计数排序(Counting Sort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结:简介:计数排序是一种非比较类排序算法,稳定的算法,时间、空间复杂度为o(n+k)算法描述:找出待排序的数组中最大和最小的元素; 统计数组中每个值为i的元素出现的次数,存入数组C的第i项; 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加); 反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放...原创 2019-03-03 22:47:24 · 7093 阅读 · 0 评论 -
ACM 题解 分类
本文章转自:http://blog.csdn.net/liujiuxiaoshitou/article/details/7 OJ是Online Judge系统的简称,用来在线检测程序源代码的正确性。著名的OJ有RQNOJ、URAL等。国内著名的题库有北京大学题库、浙江大学题库等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。简介: Online Judge...转载 2019-03-20 16:35:21 · 829 阅读 · 0 评论 -
数据结构 希尔排序(ShellSort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结一下:简介:1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。算法描述:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:选择一个增量序列t1,t2,…,tk,其中ti>...原创 2019-03-03 17:47:35 · 6954 阅读 · 0 评论 -
数据结构 插入排序(InsertionSort Sort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结:简介:是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。时间复杂度为o(n^2),是一种稳定的排序算法,比较类排序算法算法描述:从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序...原创 2019-03-03 17:04:45 · 5468 阅读 · 1 评论 -
哈弗曼编码 用优先队列解决
#include<iostream>#include<stdio.h>#include<algorithm>#include<queue>#include<string.h>using namespace std;typedef struct Node{ char c; Node *self,*lchild,...原创 2018-08-05 10:16:20 · 234 阅读 · 0 评论 -
C++ qsort函数 详解 快速排序
qsort排序 是快速排序,时间复杂度是nlog2(n)用起来挺方便的。控制排序方向的cmp函数,默认是从小到大,return返回语句:若为1,则按照参数列表,第一个参数排在第二个参数之后,若为-1,则相反,若为0,二数相等,无所谓。 /* C++ qsort函数 练习3:对结构体排序 anthor:nice1998 time:2018.8....原创 2018-08-05 15:36:55 · 3454 阅读 · 3 评论 -
二叉排序树的基本操作
不注意细节,找错找了半天。 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;typedef struct node{ int d; node *lchild,*rc...原创 2018-08-06 09:04:14 · 184 阅读 · 0 评论 -
1223: 数组排序
1223: 数组排序时间限制: 1 Sec 内存限制: 32 MB提交: 101 解决: 54您该题的状态:已完成[提交][状态][讨论版]题目描述输入一个数组的值,求出各个值从小到大排序后的次序。输入输入有多组数据。每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。输出各输入的值按从小到大排列的次序(...原创 2018-08-06 09:50:14 · 140 阅读 · 0 评论 -
1792: 括号配对问题
1792: 括号配对问题时间限制: 3 Sec 内存限制: 64 MB提交: 185 解决: 84您该题的状态:已完成[提交][状态][讨论版]题目描述现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串)...原创 2018-08-06 11:26:39 · 116 阅读 · 0 评论 -
字典树初识
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,...原创 2018-08-06 17:16:31 · 108 阅读 · 0 评论 -
1330: 出栈序列统计 卡特兰数
出栈顺序(卡特兰数)题目描述:按照1,2,...,n-1,n的顺序入栈,问可以得到多少种出栈序列。如n=3时有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1共5种出栈序列。解题思路:设f(n)为n个数时的方案数。可知 f(0)=1; f(1)=1; f(2)=2; f(3)=5;当n=4时 :F1 F2 F3 F41 2 3 4...原创 2018-08-06 20:52:45 · 656 阅读 · 0 评论 -
set学习小记
set属于STL里的关联式容器,满足集合的互异性,会自动排序,默认从小到大,如果set的元素是结构体,排序,需对()重载 #include<iostream>#include<set>#include<algorithm>#include<string>using namespace std;int main(){ s...原创 2018-08-11 17:34:33 · 222 阅读 · 0 评论 -
线性表及其实现 数据结构学习
课程是跟着MOOC 数据结构 陈越、何钦铭二位老师学的,这遍两个目的:1.复习,2.找找不同大学教学水平的差距 问题引入:一元多项式的表示及运算如何表示?(1)最容易想到的办法(顺序存储方式):用结构体数组存储多项式的每一项的系数及指数。 但是这种结构有弊端,如下图:很显然,我们要用一个空间为2001的数组仅仅存了3个有用的数据,其他项全为零,造...原创 2019-01-21 19:27:11 · 279 阅读 · 0 评论 -
栈的实现 顺序存储和链式存储
栈是一种特殊的线性结构,只能对其一段进行操作,有两种存储方式:顺序和链式。都不难(不用担心)1.顺序存储:#include<iostream>using namespace std;#include<stdio.h>#define ok 1#define error 0#define overflew -1#define maxsiz...原创 2019-01-21 20:23:24 · 1050 阅读 · 0 评论 -
表达式求值
中缀表达式:日常生活中我们见到的表达式前缀表达式:运算符位于两个操作数之前后缀表达式:运算符位于两个操作数之后中缀表达式转化为后缀表达式:例如,将中缀表达式“1+((2+3)×4)-5”转换为后缀表达式的过程如下:扫描到的元素 s2(栈底->栈顶) s1 (栈底->栈顶) 说明 1 1 空 数字,直接入栈 + ...原创 2019-01-21 20:59:04 · 243 阅读 · 0 评论 -
数据结构 基数排序(Radix Sort) 详解 附C++代码实现:
目录简介:图解:C++代码实现:总结:简介:基数排序的发明可以追溯到1887年赫尔曼何乐礼在打孔卡片制表机上的贡献。基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。按低位优先级排序或按高位优先级排序取决于自己兴趣,下面的代码按低位优先。算法简述:1.取得数组中最大的数的位数max_bit2.分散:将数组的所有数按...原创 2019-03-03 16:24:19 · 7007 阅读 · 1 评论 -
数据结构 冒泡排序(BubbleSort) 详解 附C++代码实现:
目录冒泡简介:算法描述:代码实现:总结一下:冒泡简介:如果你是小白,我告诉你,冒泡很简单。冒泡是比较类排序算法,时间复杂度最好、最坏、平均都是o(n^2),通过一次次比较找到一个最大或最小的数,确定该数在数组中的位置,就相当于一个筛子,一次捞出一个最值。算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从...原创 2019-03-03 16:43:15 · 6090 阅读 · 1 评论 -
数据结构 选择排序(SelectionSort) 详解 附C++代码实现:
目录简介:算法描述:代码实现:总结:简介:选择排序稳定,时间复杂度为:o(n^2),是比较类算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述:将数列分为有序区和无序区。初始状态:无序区为R[1.....原创 2019-03-03 16:55:32 · 6974 阅读 · 0 评论 -
哈希表基本操作
哈希表是不用通过比较数值的查找方法,相当便利,建立了数值与存储地址的联系,但是everything都不可能那么完美,它存在冲突,解决冲突的方法:线性探测、那个平方(就是1的平方,-1的平方,2的平方,-2的平方.....)还有一个随机数法,但我觉的前两种更靠谱,上代码了! #include<iostream>#include<stdio.h>#include...原创 2018-08-04 20:06:54 · 1343 阅读 · 0 评论