
数据结构
文章平均质量分 71
懒嘤嘤ly
嘴角扬起 用力呼吸
展开
-
【数据结构】排序算法之堆排序
什么是堆?如果下面这张图看不懂的话,那就戳这个什么是堆 那我们今天主要来看怎么利用堆的性质来进行堆排序初始数组: int arr[]={2,5,4,9,3,6,8,7};^_^以下介绍升序排序的步骤第一步:用数组元素创建堆【代码实现】 #include<iostream>using namespace std;#include<a...原创 2018-08-19 16:30:08 · 251 阅读 · 0 评论 -
【每日一题】输入一个链表,从尾到头打印链表的每一个节点
【在线oj实现】【递归实现】 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };class Solution { public: vector<int>...原创 2018-06-04 22:31:39 · 190 阅读 · 0 评论 -
排序算法之非比较排序【计数排序和基数排序】
------------------------------------------------------- 计数排序---------------------------------------------------------------简而言之就是统计元素出现的个数,并将其放在相应的桶中,这是一种牺牲时间换空间的做法,但是在某种意义上还是特别快的【图解】【性能分析】时间复杂度:设数据有N...原创 2018-05-03 23:15:10 · 262 阅读 · 0 评论 -
【数据结构】排序算法之归并排序
【算法思想】归并排序是利用归并的思想实现的排序方法,该算法采用“分而治之”的思想将问题分成一些小的问题然后递归实现,最后合而为之。【图解】【代码实现】----->递归实现void Merge(int* arr, const int left, const int mid, const int right, int *temp){ int i = left;//检测指针 int j = ...原创 2018-05-03 19:02:54 · 224 阅读 · 0 评论 -
并查集disjoin set
在一些应用问题中,需要将n个不同的元素划分为一组不相交的集合,开始时,每个元素自成一个单元素集合,然后按一定规律将归于同一组元素的集合合并。在此过程中要反复用到查询某个元素属于哪个集合的运算。适合于描述这类问题的抽象数据类型的数据结构称之为并查集(union_find set)并查集需要两种数据类型的参数:集合类型和集合元素的类型,在许多情况下,可以用整数作为集合名。如果集合中有n个元素,可以用0...原创 2018-04-18 22:15:21 · 423 阅读 · 0 评论 -
排序算法之快速排序以及优化
顾名思义,就是一种速度特别快的快速排序也叫分区排序,是目前应用最广泛的排序算法,人如其名,就是很快,而且快速排序算法在空间上只使用一个小的辅助栈,其内部循环也很小,另外快排很容易实现,消耗的资源也很小。【基本思想】(1)任取待排序元素序列中的某个元素(例如取第一个元素)作为基准(2)按照该元素的排序码大小,将整个元素序列划分为左右两个子序列;左侧序列中所有元素的排序码都小于基准值,右侧...原创 2018-04-14 23:48:16 · 361 阅读 · 2 评论 -
三种插入排序算法解析
【前言】我们常见的排序主要分为两类,一类是内部排序,一类是外部排序1.内部排序:数据元素放在内存中的排序2.外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求能在内外村之间移动数据的排序首先我们先来了解一下如何判断一个排序算法的性能好坏?依据是什么?一般而言有三个依据:稳定性、时间复杂度和空间复杂度1.稳定性如果在元素序列中有两个元素A[i]和A[j],他们的排序码K[i]==k[j],...原创 2018-04-14 18:18:45 · 1573 阅读 · 1 评论 -
AVL树的插入以及四种旋转解析
什么是AVL树呢?(概念)一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:1、它的左右子树都是AVL树2、左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1)3、如果一棵二叉搜索树是高度平衡的,它就是AVL树。4、时间复杂度:如果它有n个结点,其高度可保持在O(lgn),平均搜索时间复杂度O(lg(n))首先,创建AVL树template<class K, clas...原创 2018-03-15 20:24:48 · 365 阅读 · 0 评论 -
堆排序的比较器实现
一、堆定义最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,位于堆顶结点的关键码最小;最大堆:任一结点的关键码均大于等于它的左右孩子的关键码,位于堆顶结点的关键码最大。 堆存储在下标为0开始计数的数组中,因此在堆中给定下标为i的结点时:1、如果i=0,结点i是根节点,没有双亲节点;否则结点i的双亲结点为结点(i-1)/22、如果2*i+1>n-1,则结点i无左孩子原创 2018-01-30 14:36:16 · 251 阅读 · 0 评论 -
判断二叉搜索树是否是完全二叉树
二叉树的简单函数实现http://blog.youkuaiyun.com/dove1202ly/article/details/79133089 在前面也提到过什么是满二叉树什么是完全二叉树,在这再重复一遍 1.满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层 2.完全二叉树:如果一棵具有N个节点的二叉树的结构与满二叉树的前N个结点的结构相同,即就称为完全二叉原创 2018-01-23 20:22:16 · 2007 阅读 · 0 评论 -
二叉树的简单操作(c++实现)
什么是二叉树? 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成 二叉树的特点 1.每个结点最多有两棵子树,即二叉树不存在度大于2的结点(分支最大不超过2) 2.二叉树的子树有左右之分,其子树的次序不能颠倒 下面来介绍两种特殊的二叉树: 1.满二叉树:在一原创 2018-01-22 20:12:50 · 922 阅读 · 0 评论 -
二叉树的定义与基本操作
一、二叉树的定义把满足以下两个条件的树形结构叫做二叉树(1)每个节点的度都步大于2;(2)每个节点的孩子节点次序不能任意颠倒。所以,一个二叉树的每个节点只能含有0、1或者2个孩子,而且每个孩子有左右之分,位于左边的交左孩子,位于右边的叫右孩子。二、二叉树的基本操作#include#includeusing namespace std;//孩子表示法tem原创 2017-12-02 15:40:22 · 11532 阅读 · 0 评论 -
栈的应用之后缀表达式
#include #includeusing namespace std;enum Type{ _SYMBOL, //操作符 _NUM, //操作数 ADD, SUB, MUL, DIV,};struct Cell{ Type _type; //每个传进来的单元的类型 int _value; //操作数 };int Cou原创 2017-11-26 23:39:29 · 310 阅读 · 0 评论