![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 87
hanjing_1995
Just do IT
展开
-
【数据结构】使用栈Stack解决迷宫问题
我们看下面这个迷宫----方阵(也可以是矩阵):650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/7E/E9/wKiom1cMngag6p87AAAffRONdMg639.png" title="HO6EL69H]PJ$@Y}5HYS_6Z4.png" alt="wKiom1cMngag6p87AAAffRONdMg639.png"原创 2016-05-30 17:18:25 · 1734 阅读 · 0 评论 -
【数据结构】处理哈希冲突的开链法(哈希桶)算法实现
实现哈希表时,我们常见的方法是线性探测、二次探测,这两个算法也很简单。若有兴趣,可以查看我的博客 http://10740184.blog.51cto.com/10730184/1771160。但是,这两个算法有一个共同点就是:空间利用率低。为什么这么说呢?线性探测、二次探测的高效性很大程度上要取决于它的载荷因子,载荷因子即:存放关键字个数/空间大小。通过查阅资料,我发现,使用素数做除数可以减少哈原创 2016-05-30 17:19:08 · 474 阅读 · 0 评论 -
【数据结构】位图BitMap、布隆过滤器的算法实现
我们先给出之前我看过的腾讯公司的一道笔试题,引出位图BitMap。给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。这个问题怎么解决呢?1)将40亿数据保存起来(保存在数组、链表、树中),再和该数判断是否相等。那我们思考一下需要多少内存:650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00原创 2016-05-30 17:19:16 · 1701 阅读 · 0 评论 -
【数据结构】两个队列实现一个栈
用两个栈实现一个队列,这个问题与“两个队列实现一个栈”原理非常的相似。只要你明白了”两个队列实现一个栈“的原理,相信聪明的你,就会明白这个问题只是它的变种,所有的异或就会迎刃而解的。这里大家可以参考我的博客http://10740184.blog.51cto.com/10730184/1763006 代码如下:#define _CRT_SECURE_NO_WARNINGS 1#includeu原创 2016-05-30 17:19:19 · 326 阅读 · 0 评论 -
【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
对于非比较排序算法,如计数排序、基数排序,大家如果感兴趣,可以查看博客http://10740184.blog.51cto.com/10730184/1782077。本文,我将介绍比较排序算法。直接插入排序:在序列中,假设升序排序1)从0处开始。1)若走到begin =3处,将begin处元素保存给tmp,比较tmp处的元素与begin--处元素大小关系,若begin处3)以此类推,依次走完序列。原创 2016-05-30 17:19:22 · 793 阅读 · 0 评论 -
【数据结构】大量数据(20万)的快速排序的递归与非递归算法、三数取中思想
快速排序的挖坑法与prev、cur法,我们在上一篇博客的第6个排序中讲的非常详细,http://10740184.blog.51cto.com/10730184/1774508【数据结构】常用排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序) 有兴趣的话,相信聪明的你,一看就会秒懂快速排序的思想。下面,我们将快速排序优化:1、三数取中来优化快速排序优化原因:快速排序原创 2016-05-30 17:19:28 · 2079 阅读 · 0 评论 -
【数据结构】非比较排序的算法实现(包括计数排序、计数排序)
对于比较排序,大家如果感兴趣,可以查看我的博客:http://10740184.blog.51cto.com/10730184/1774508计数排序思路:我们假设升序排序排序序列为2000,2001,3000,4000遍历序列,取出最小值min,最大值max,开辟一个空间为max—min的空间大小的数组,遍历数组a将排序序列a中的每个元素出现的次数放在数组count的每个a[i]-min处。就是原创 2016-05-30 17:19:34 · 265 阅读 · 0 评论 -
【数据结构】搜索二叉树的(递归与非递归)实现,包括:增Insert,删Remove,查Find
搜索二叉树,是二叉树一种特殊的结构。特点:(1)每个节点都有一个关键码,并且关键码不重复。(2)左子树上的每个节点的关键码都小于根节点的关键码。(3)右子树上的每个节点的关键码都大于根节点的关键码。(4)左右子树都是搜索二叉树。下面,为方便大家理解,我举例画一个搜索二叉树,如下:原创 2016-06-03 16:46:06 · 2510 阅读 · 0 评论 -
【数据结构】平衡搜索树之---B树的算法实现
#includeusing namespace std;#ifndef __BTREE_H__#define __BTREE_H__template//设为三阶B树(每个数组三个关键字)struct BNode{ BNode* _parent; size_t _size;//元素个数 K keys[M];//由于subs多了一个长度 BNode *subs[M+1];//为原创 2016-07-01 20:03:08 · 584 阅读 · 0 评论 -
【数据结构】哈希表的线性探测算法
构造哈希表常用的方法是:除留余数法--取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址。HashKey= Key % P。直接定址法--取关键字的某个线性函数为散列地址HashKey= Key 或 HashKey= A*Key + BA、B为常数。我在这里主要使用一下除留余数法Hash(key) =Key%P,(P这里是哈希表的长度)p最好是素数考虑降低哈希冲突的原因,我并没有在这上原创 2016-05-30 17:19:04 · 1958 阅读 · 0 评论 -
【数据结构】将一组数据升序排序(利用堆排序)
堆排序相对冒泡排序、选择排序效率很高,不再是O(n^2).假若将一个序列升序排序好,那么我们来考虑最大堆还是最小堆来排序。假若是最小堆的话,堆的顶端必定是堆中的最小值,这样貌似可以。但是,如果是它的(一边或)子树左子树的节点数据值大于(一边或)右子树的节点数据值,直接打印肯定是错误的,而且对于此时的堆我们也无法操控来调整好正确的顺序了。那我们换成最大堆来实现升序想,当我们把序列调整成为最大堆后,最原创 2016-05-30 17:18:59 · 1277 阅读 · 1 评论 -
【数据结构】找出N个数据中最大的前k个数据(利用堆排序)
我们举例,假若从10000万个数里选出前100个最大的数据。首先我们先分析:既然要选出前100个最大的数据,我们就建立一个大小为100的堆(建堆时就按找最大堆的规则建立,即每一个根节点都大于它的子女节点),然后再将后面的剩余数据若符合要求就插入堆中,不符合就直接丢弃该数据。那我们现在考虑:确定是该选择最大堆的数据结构还是最小堆的数据结构呢。分析一下:若选用最大堆的话,堆顶是堆的最大值,我们考虑既然原创 2016-05-30 17:18:55 · 11961 阅读 · 3 评论 -
【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
使用两个栈实现一个队列思路一:我们设定s1是入栈的,s2是出栈的。入队列,直接压到s1即可出队列,先把s1中的元素倒入到s2中,弹出s2中的栈顶元素;再把s2的剩余元素全部倒回s1中。650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/7E/E7/wKioL1cMpjajUzcyAABT0frZ3KM694.png" title="N原创 2016-05-30 17:18:28 · 9043 阅读 · 1 评论 -
【数据结构】对称矩阵及对称矩阵的压缩存储
对称矩阵:设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 如下面矩阵:650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center原创 2016-05-30 17:18:31 · 953 阅读 · 0 评论 -
【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
在矩阵中,有一类很重要的矩阵,就是-----稀疏矩阵。所谓的稀疏矩阵呢,就是指的是,在矩阵中,有效的数据个数远远小于无效的数据个数(并且这些数据排列顺序没有规律)。我们下面先举个稀疏矩阵的例子:650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/7E/F0/wKiom1cNoXqgYIYUAAAPLNUT7Mw525.png" tit原创 2016-05-30 17:18:34 · 979 阅读 · 0 评论 -
【数据结构】广义表的默认成员函数、深度、大小、打印
广义表的定义:广义表是非线性的结构,是n个元素的有限序列。650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/7F/19/wKiom1cTUC7RB4CcAAAw4q17T88241.png" title="QH9)KK58]{[O5`QBH`NW`7N.png " alt="wKiom1cTUC7RB4CcAAAw4q17T8824原创 2016-05-30 17:18:37 · 419 阅读 · 0 评论 -
【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、深度、四种遍历)
二叉树:树的每个节点最多有两个子节点。我们看下它的结构,有二叉链表结构与三叉链表结构,具体结果如我摘自《C++Primer》中的图。650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/7F/32/wKiom1cWG5WALqfAAABZJr6iA2I345.png" title="1)5$U{BD13Y4V%A9FL%%7RJ.png原创 2016-05-30 17:18:43 · 595 阅读 · 0 评论 -
【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。二叉树前序:访问根节点->左子树->右子树(1)递归写法:依次访问根节点、左子树、右子树,注意递归出口的结原创 2016-05-30 17:18:46 · 447 阅读 · 0 评论 -
【数据结构】堆的实现(包括:默认成员函数,插元素push,删元素pop,访问根节点top,判空,大小)
在数据结构里,堆是一类很重要的结构。堆结构是一组数组对象,我们可以把它当作是一颗完全二叉树。最大堆:堆里每一个父亲节点大于它的子女节点。最小堆:堆里每一个父亲节点小于它的子女节点。如图就是一个最大堆:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7F/59/wKioL1cbOTSjDiLRAAAZq4jMjWY012.png"原创 2016-05-30 17:18:49 · 3493 阅读 · 0 评论 -
【数据结构】优先级队列的实现(适配器模式)
代码按照适配器模式实现,若理解了堆的内部怎么实现的,那优先级的队列实现则是非常简单的了,堆的设计大家不明白的话,可以查看我的博客http://10740184.blog.51cto.com/10730184/1767076。建立PriorityQueue.hpp:#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;#inc原创 2016-05-30 17:18:52 · 315 阅读 · 0 评论 -
内存管理之内存池概述
转自这里在我们编写代码的过程中,不可避免的要和内存打交道,在申请释放不太频繁的情况下,通常让系统进行内存管理即可。但是,直接使用系统调用malloc/free、new/delete进行内存分配和释放,存在一定的弊端:1、调用malloc/new,系统根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,内存使用效率不高;2、调用free/de转载 2016-08-19 14:28:46 · 927 阅读 · 0 评论