
数据结构与算法
文章平均质量分 83
x__016Meliorem
这个作者很懒,什么都没留下…
展开
-
单链表的基本操作(面试题)
单链表的基本操作(面试题)原创 2017-03-13 23:39:32 · 562 阅读 · 0 评论 -
剖析STL空间适配器
为什么要有空间配置器1、小块内存带来的内存碎片问题 单从分配的角度来看。由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。2、小块内存频繁申请释放带来的性能问题。 关于性能这个问题要是再深究起来还是比较复杂的,下面我来简单的说明一下。 开辟空间的时候,原创 2018-02-10 03:20:20 · 599 阅读 · 0 评论 -
STL容器 map 与 set 的用法
认识pair在介绍容器之前,我们先来介绍一下pair,pair是一种结构体模板类型,每个pair可以存储两个值,这两个值的类型可以是任何类型的。它定义在 #include< uitility >中。在set map中使用pair的原因是让他们可以底层封装公用同一棵红黑树。定义在 uitility文件中的pair 结构体模板部分代码。template<class _Ty1, class _Ty原创 2018-02-04 19:46:40 · 418 阅读 · 0 评论 -
排序之 归并排序
归并排序归并排序是一种基于分治法的一种排序方法。它将要排序的序列分成两个长度相等的子序列,为每一个子序列进行排序,然后再将子序列合并成一个有序的序列。比如对 10 4 6 3 8 2 5 7 这个数列排序代码:templateclass T>void _Merge(T* arr, T* tmp, int begin, int end){ int mid = ((原创 2018-02-03 01:51:46 · 289 阅读 · 0 评论 -
堆排序
堆排序堆排序是一种特殊的选择排序。 大的原则还是如果升序 选择待排序类中最大排序码的元素放在最后位置 再选次大的放在倒数第二位置上 。。。。。最后把最小的放在第一个位置上。堆排序是借助建堆和堆的向下调整算法进行选择的。堆排序是一种效率很高的排序方法,尤其是在大量数据排序方面。举例说明堆排序用法和逻辑:将数组 int arr[] = {10,13,19,12,15,16,14,17,11,18}原创 2018-02-02 21:33:34 · 373 阅读 · 0 评论 -
排序之-----插入排序于希尔排序
插入排序插入排序基本思想:每一步将一个元素的排序码按照大小,插入到前面已经排好序的元素之中的合适位置,直到最后一个元素也插入了他之前的有序序列。直接插入排序 将array[i] 插到已经有序的array[0] array[i] ….. array[i - 1]中 先保存array[i]一个个比较 找到了位置后 将其他数均向后移动一个位置。 最后插入保存好的元素。直接插入排序在对待原创 2018-02-02 18:18:16 · 339 阅读 · 0 评论 -
非比较排序之 计数排序与基数排序
非比较排序与插入、希尔、快速、归并、堆排序等等排序方式不同的是 以上这些排序算法都涉及到待排序列中元素值的比较。 然而也有不需要比较的排序算法。计数排序计数排序主要思想: 给定一组要排序的序列,找出这组序列中的最大值,然后开辟一个最大值加1大小的数组,将这个数组里面的元素全部置零,然后用这个数组下标统计出要排序的序列中各个元素出现的次数。等到统计完成的时候,排序就已经完成。原创 2018-02-02 01:40:46 · 306 阅读 · 0 评论 -
排序之快速排序
什么是快速排序快速排序是一种排序算法 它的思想是: 要对一组无序的的数值序列排序,首先找一个值作为KEY 值(中间值)。 将其余数值小于(大于)KEY值的值放在KEY值位置的左边 大于(小于)KEY值的值放在KEY值的右边。 然后把KEY值左右两边的无序序列按上述逻辑作为递归子问题处理 。 递归出口是递归子序列只有一个值或没有值的时候递归返回到上一层。上述思想的具体实现方法有三种原创 2018-02-01 22:58:46 · 563 阅读 · 0 评论 -
二叉树的基本操作及编程题总结(C++)
**二叉树编程题万变不离其宗在于对递归的理解和使用要弄懂用好递归 重要的在于一下几条:1.搞清楚函数递归调用栈帧的变化 特别是二叉递归时的栈帧变化2.搞清楚各个函数参数 传值和传引用 的函数参数在递归调用时值的变化。 本文中不加注明 所说的二叉树都是普通二叉树1.定义并构建一颗二叉树对于一颗普通二叉树的节点 至少要定义出他的值域 和指向其左右子树的左右指针域。 并定义出节点的构造函数 该函原创 2017-12-05 23:11:47 · 2493 阅读 · 0 评论 -
二叉搜索树的原理和实现
什么是二叉搜索树二叉搜索树是一种特殊的二叉树,它是被广泛运用的存储查找结构------完全平衡二叉树(AVLtree) 和红黑树的基础(RBtree)二叉搜索树的规则:二叉搜索树可以是一棵空树如果其节点的左子树不空 则其左子树上的所有节点的值小于根节点的值如果其节点的右子树不空 则其右子树上的所有节点的值小于根节点的值每个节点的左右子树都是二叉搜索树为什么要设计出这种规则的二叉搜索树呢?原创 2017-11-20 16:52:11 · 949 阅读 · 0 评论 -
字符串编程题题目解析(From leetcode)——1
原题目的地址:https://leetcode.com/tag/string/1. Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0’s and 1’s, and all the 0’s and all the 1’s in these subs原创 2017-10-25 10:06:50 · 1034 阅读 · 0 评论 -
堆--优先级队列--topK问题
堆是一个用途很广泛的数据结构,是实现topK问题、堆排序以及优先级队列等问题的必备工具。深刻理解堆这种数据结构,掌握实现堆的技能是学习数据结构非常重要和必备的一环。 堆的本质是: vector + 向上调整 和 向下调整 人们在想象中把它抽象为一棵每个父亲节点都比它两个子节点 大/小 的二叉树原创 2017-09-21 19:59:22 · 624 阅读 · 0 评论 -
线程池基础
为什么要有线程池没有线程池会出现的问题。 大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是原创 2018-04-08 19:38:47 · 422 阅读 · 0 评论