
数据结构
文章平均质量分 51
ValDC_Morning
路漫漫其修远兮,吾将上下而求索
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
堆实现及常见面试题
一、堆的概念:关键码的集合按完全二叉树的顺序存储方式存储在一维数组中,并满足:对于所有节点它的父节点关键码都大于子节点(或都小于它的子节点),这样的堆称为最大堆(或最小堆)。二、堆相关的问题1.简单实现一个堆 堆的建立、放入数据、删除数据、判断是否为堆2.TopK问题,求数组中最大的K个元素3.堆排序(实质是一个选择排序),一个数组的升序、降序 三、下面例子中,博主是以建最大堆的方式实现原创 2017-05-27 09:37:50 · 1547 阅读 · 0 评论 -
二叉搜索树
今天分享关于二叉搜索树的实现。 二叉搜索树BinarySearchTree或者SearchBinaryTree,是一种特殊的二叉树,这个树的所有节点满足对于所有的根节点它的左孩子比它小,右孩子比它大。主要实现了它的插入(递归和非递归方法),查找(查找一个节点是否在BSTree中),删除(递归和非递归方法)代码如下://二叉搜索树 根节点小于左右节点,左节点小于右节点 二叉树的建立,有递归方法和原创 2017-09-05 12:29:43 · 274 阅读 · 0 评论 -
选择排序和堆排序
今天Val要和大家分享关于选择排序和堆排序的基本思想和实现代码的算法~以升序为例 1.选择排序:在数组中选出最大(小)的数放在数组的末(首)端,缩小范围再进行选择,这个我在之前的博客里有分享过,http://blog.youkuaiyun.com/valdc_morning/article/details/54290413 当然还有更高效率的选择排序,每次选出最大的放在数组尾端,最小的放在数组首端,这是在一原创 2017-07-02 12:50:04 · 508 阅读 · 0 评论 -
冒泡排序与快排算法
Hello,同志们,今天分享有关冒泡排序和快排的算法思想以及代码实现。一、冒泡排序1、冒泡排序是什么? 冒泡排序是一种相对稳定的排序算法,时间复杂度0(N*N ), 冒泡排序就是通过两两比较,(以升序为例),从开头比较,一个数与它后面的比较,如果比后面的小,不动,如果比后面的数大,把它俩交换,这样一次排序后最大的数就在最大下标处,每比完一轮,缩小比较范围,N个数比较,总的比较次数为N...原创 2017-08-03 13:34:29 · 10019 阅读 · 0 评论 -
插入排序和希尔排序
今天分享有关排序的实现^V^ 1.首先,排序按类来分有插入排序、选择排序、交换排序和归并排序,而插入排序又分为直接插入排序和希尔(shell)排序;选择排序类又分为选择排序和堆排序,交换排序分为冒泡排序和快速排序,今天主要分享插入排序和希尔排序。 2.插入排序概念 插入排序:对一个数组中的数,比较大小,假设它是升序排列,认为它的第一个数是有序的,拿它的第二个数来和第一个数相比,若比第一个数大,原创 2017-07-01 18:15:22 · 429 阅读 · 0 评论 -
迷宫及其最短路
一、 代码实现迷宫迷宫的路径可以用两种方法来求解: 1.回溯法(利用栈)来求解迷宫路径; 2.递归方法(利用递归函数自己创建的栈帧)来求解路径; 回溯法求解迷宫基本思想: 首先来讲一下回溯法求解迷宫,创建一个栈,用来存储走过的路径(注意栈顶元素是走过的路,所以要标记,避免走重复的路径 ),将入口压入栈中,先判断入口的四个方向是否有通路,如果下一个路径是通的,则把这个点的坐标压入栈原创 2017-05-09 23:48:09 · 832 阅读 · 0 评论 -
两个栈实现一个队列&两个队列实现一个栈
Hello,今天Val来给大家分享关于利用栈实现队列和利用队列来实现一个栈。准备知识1、栈 特点: 栈顶插入数据,栈顶删除数据 LIFO(last in first out)后进先出 2、队列 特点: 队列队头删除数据,队尾插入数据 FIFO(first in first out)先进先出一、那么如何利用两个栈实现一个队列? 我们知道不管是在队列中插入数据,还是删除数原创 2017-08-16 10:46:50 · 794 阅读 · 1 评论 -
位图 bitset
Hello,今天Val来分享关于位图的模拟实现。 位图c++中有源码,c++::bitset,它的主要接口有 operator[],set(),reset()、test()等等。 本篇博客主要模拟实现位图的set(),reset(),test()函数.位图主要是用来标记一个整型的存在与否,如果存在相应的位设置为1,不存在设置为1,它的处理对象为整型,这也是它的局限性,位图标记一个整型是否存在,节原创 2017-08-06 23:48:40 · 428 阅读 · 0 评论 -
由前序遍历和中序遍历重建二叉树
由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)今天Val来分享如何利用一个前序遍历和中序遍历来重建二叉树,及代码的实现。 首先我们知道二叉树前序遍历顺序是:遇到一个节点先访问它的根节点再是左节点后访问右节点。 中序:先访问左节点再访问根节点后访问右节点。 如图: 下面以图中二叉树为例子讲解:由前序遍历结果我们可以知道每次遍历的根节原创 2017-07-29 12:57:56 · 914 阅读 · 0 评论 -
实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
Hello,大家好,今天Val来给大家分享,关于如何实现一个栈,让它的push、pop、返回最小值min的时间复杂度为O(1)。基本算法思想1.实现主要内容: 创建一个MyStack类,类中用两个栈实现这个算法,一个栈里面放的是所有的数据,另一个辅助栈存放最小值,每次栈1插入一个数据,这个数据与栈2的栈顶相比较,如果这个数据小于或者栈2的栈顶,那就把这个数放入栈2,栈2的栈顶永远是当前所有数据原创 2017-08-13 20:17:23 · 1908 阅读 · 0 评论 -
二叉树干货----真的很重要
一:相关概念 二叉树是最基本的树形结构,遍历二叉树就是通过特定的顺序遍历二叉树的每一个节点。 二叉树遍历方法,前序遍历,中序遍历,后序遍历,层序遍历,前三种遍历又有递归遍历方法和非递归遍历方法。 二:代码实现 1.创建树template<class T>struct BinaryTreeNode//树的节点信息{ BinaryTreeNode<T>* _left; Bin原创 2017-05-24 20:32:31 · 770 阅读 · 0 评论 -
归并排序
本篇博客,Val来给大家分享关于归并排序的相关内容。归并排序是什么? 归并排序 将已经有序的子序列合并,得到完全有序的序列 如何得到有序序列?先让它的每个子序列有序,再使子序列段有序。时间复杂度:0(nlogn) 空间复杂度:0(n)归并排序是一种较为稳定的排序算法,相等的元素顺序不会发生改变(或者交换) 速度次于快排。归并排序比较如图: 它是将工作划分,细化 将区间一分为二,使左原创 2017-08-03 21:39:03 · 402 阅读 · 0 评论 -
求二叉搜索树的第K个节点
本博客主要内容:如何求一个二叉树的第K个节点给定一个二叉树,找出其中第K大的节点。 分析:二叉树的结构:对于每一个节点,它左孩子的key值比它小,右边的key值比它大。搜索二叉树的中序遍历恰好是有序的,所以我们只要按照中序遍历,去找第K个节点就可以了; 中序遍历,左右根 设置查找节点(返回节点)创建新的节点Node* aim 1、如果这个搜索二叉树是空的或者给的K为0,那么直接返回NULL原创 2017-09-22 11:54:50 · 1109 阅读 · 2 评论