
数据结构
文章平均质量分 84
皓皓松
与坚持梦想者同行!
展开
-
【数据结构】单链表的基本操作
一、单链表基本概念单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。二、单链表的基础用法这里我们先讲一些简单的、基础的用法如初始化,销毁,插入元素,求链表长度,打印链表以及链表的销毁除此之外,链表还可以有查找元素,指定位置插入,指定位置删除等用法三、代码块各部分的单独代码块:结构体:typedef struct Node{ Da原创 2016-06-22 17:54:36 · 4843 阅读 · 1 评论 -
【数据结构】哈希表/散列表
本篇博文,旨在介绍哈希表的基本概念及其用法,实现了开放定址法和开链法的哈希表;介绍了减少哈希冲突的方法;最后介绍对哈希表进行了扩展,布隆过滤器哈希表的基本概念哈希表是一种存储结构,它通过key值可以直接访问该key值在内存中从存储位置;将关键值映射到表中的位置访问数据,这个映射函数叫做散列函数,存储数据的表叫做散列表;构造哈希表的几种方法1、直接定址法根据关键值直接原创 2017-02-24 14:09:11 · 1515 阅读 · 1 评论 -
【数据结构】位图BitMap
给40亿个不重复的无符号整数,没拍过序。给定一个无符号整数,如何可以高效的判断是否存在这些数据中。直接的想法是,我们将这些的无符号整数存储到内存中,然后用给定的数进行一一比较。我们分析一下,一个无符号整数是4个字节,40亿* 4个字节,10亿个字节大概就是4个G,40亿个无符号整数就是16G计算机内存一般没这么大,就算有这么大,也要分给操作系统什么的吧,直接存储整形不好实现;再说,原创 2017-02-24 21:21:48 · 3199 阅读 · 0 评论 -
【算法】排序算法(二)——插入排序
本篇博文旨在介绍排序算法中的插入排序;介绍了直接插入排序和希尔排序,并通过时间复杂度和空间复杂度进行了分析;最后用代码实现了直接插入排序和希尔排序插入排序基本思想//第一部分有序,从无序区间的第一个数,找到合适的位置插入到有序的数组中图解时间复杂度和空间复杂度插入排序的优缺点优点:元素少的时候,效率很高缺点:在元素多的时候,需要挪动狠多元素,并且在逆原创 2017-03-08 22:00:44 · 974 阅读 · 0 评论 -
【数据结构】图
本篇博文旨在介绍数据结构中的图;介绍了图以及图的有关概念;介绍了图的两种实现方式,并用代码进行了实现;介绍并实现了图的广度优先遍历和深度优先遍历;图图是数据结构中的一种非线性结构,由顶点以及顶点相连的边构成图包括有向图和无向图无向图中,当两个顶点存在连接关系时,不区分该连接是A到B点,还是B到A点有向图中,两个顶点存在连接关系时,要区分是A可以到B,还是B可以到原创 2017-03-19 17:52:34 · 1219 阅读 · 0 评论 -
【数据结构】朋友圈问题的解决——并查集
本篇博文旨在介绍一种数据结构——并查集;本文介绍了该数据结构的使用场景,并用代码进行了实现该数据结构朋友圈问题:1、已知,有n个人和m对好友关系(存于一个集合r中)2、如果两个人是直接的或者间接的好友(好友的好友的好友。。。),那么他们属于一个集合,就是一个朋友圈里的3、写出程序,求这n个人中一共有多少个朋友圈文字描述还不明白的童鞋,可以看下面这个例子例原创 2017-03-06 20:46:46 · 6237 阅读 · 1 评论 -
【算法】排序算法(三)——归并排序
本篇博文旨在介绍排序中的归并排序;介绍了归并排序的基本思想以及算法的执行步骤;并从时间复杂度和空间复杂度进行分析;最后用代码实现了归并排序归并排序基本思想归并排序的主要思想,是将两个有序的数组进行合并,从而得到有序的序列算法步骤1、将数组按二分法分成两个区间,然后继续将区间进行递归划分,直到区间只有一个数为止2、将相邻两个区间进行排序,使之合并成为有序的区间3、原创 2017-03-09 22:58:07 · 853 阅读 · 0 评论 -
【面试题】栈和队列的面试题
题目一:实现一个栈,要求其入栈,出栈,返回最小值的时间复杂度为O(1)这道题目,主要问题在于如何时查找最小元素的时间复杂度为O(1),这里我们先想到了用一个变量存取最小值在仅仅入栈时,我们可以通过该MinElem这个变量来查找最小值是完全没有问题的;但是,如果我们进行出栈,并且把该最小值出栈后,那最小值是不是就找不到了;下面是正确的解法:这里我们要用两个栈,第一原创 2017-02-20 11:21:25 · 2421 阅读 · 0 评论 -
【STL】空间配置器
本篇博文旨在介绍STL六大组件之一——空间配置器的概念;介绍了内存池的概念;介绍了空间配置器的优缺点;最后实现了一个简单的空间配置器原创 2017-04-01 21:46:17 · 1244 阅读 · 0 评论 -
【面试题】剑指Offer-13-在O(1)的情况下删除一个节点
题目概述删除一个节点的普通方法在无头的单链表中我们知道,删除一个节点,需要找到该Del节点的前面一个节点Pre,然后找到删除节点Del的下一个节点Next让Pre的指向下一个的指针指向Next即可当然,不要忘了处理只有一个节点的情况然而,该方法的时间复杂度为O(N)在O(1)的情况下删除一个节点由于函数需要传入头结点和删除的节点,我们可以将删除节点Del的下原创 2017-04-04 12:00:12 · 956 阅读 · 0 评论 -
【小项目】实现一个简单的对象池,用来管理空间的申请和释放
为什么需要对象池频繁的申请和释放空间会导致效率的下降同时也会引起内存碎片化,造成申请大块内存时申请不到的情况设计思想当想要申请N个内存块时,如果对象池的所有空间都被使用了,则想系统申请(N*2)的空间,同时将N扩大两倍释放空间时,用指针存储释放空间的地址如果对象池有释放的空间,则先利用释放的空间,从而实现重复的利用注意:每个对象池的所有内存块应该是一定的大小,即一个对象原创 2017-04-21 10:46:54 · 569 阅读 · 0 评论 -
【算法】排序算法(一)——选择排序
选择排序基本思想图解排序的时间复杂度和空间复杂度代码的实现堆排序基本思想图解排序的时间复杂度以及空间复杂度代码的实现原创 2017-03-06 22:15:55 · 781 阅读 · 0 评论 -
【数据结构】红黑树的实现
本篇博文主旨是介绍红黑树的概念及其性质,并用C++代码进行实现;红黑树的重难点是剖析插入、删除节点的旋转情况;最后再进行了红黑树和AVL树的对比,说明为什么红黑树优于AVL树红黑树的概念及其性质红黑树是一颗搜索二叉树,但不同之处是每个节点有颜色的标记;除此之外,还有下列特点:(1)每个节点的颜色为黑色或者红色,并且根节点为黑色(2)从根节点到每个叶子节点的路径上,黑色节原创 2017-02-22 22:15:11 · 875 阅读 · 0 评论 -
【数据结构】海量数据处理题
哈希表的博客链接:http://blog.youkuaiyun.com/qq_31828515/article/details/56682501位图的博客链接:http://blog.youkuaiyun.com/qq_31828515/article/details/56853478题目1:给一个超过100G大小的log file,log中存在着IP地址,设计算法找到出现此数最多的IP地址 1.原创 2017-02-25 22:33:21 · 898 阅读 · 0 评论 -
【数据结构】关于复杂链表的复制
复杂链表与单链表首先呢,得告诉大家【复杂链表】和【普通链表】的一些区别可是这个不怎么好描述不过呢,我请来了【四个小学生】,来帮助大家理解小时候的小A、小B、小C和小D我们有四个同学 A、B、C、D他们【高高兴兴】的排起了队他们依次站着,无所他想,每个人只记住后面那个人,那么队伍就不会分散小A、小B、小C和原创 2016-09-20 16:18:24 · 1517 阅读 · 1 评论 -
【数据结构】C语言实现单链表
用C语言实现基础单链表结构体首先,我们定义一个结构体Nodetypedef int DataType;typedef struct Node{ int data; struct Node* next;}Node,*PNode;Node这个结构体中,包含一个数据元素,和一个指向下一个节点的指针初始化链表void InitList(PNode* pHead){原创 2016-10-19 09:18:21 · 824 阅读 · 0 评论 -
【数据结构】用回溯法求解迷宫问题
今天呢,让我们来用栈求解一下数据结构中的著名问题---迷宫问题我们先“制造”一个迷宫,把它放在Maze.txt文件中Maze.txt1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 10 0 0 1 1 1 1 1 1 11 1 0 1 0 0 0 0 1 11 1 0 1 0 1 1 0 1 11 1 0 1 1 1 1 1 1 11 1 0 0原创 2016-11-30 11:09:07 · 6712 阅读 · 2 评论 -
【数据结构】栈的队列的实现
今天,再次实现一下数据结构中的栈和队列这次我们用的是C++实现栈和队列,用到了C++多态的一种特性:泛型编程--模板关于模板这个知识点,我们之前讲过,这次就不多说了Stack.h#pragma once#includeusing namespace std;#includetemplateclass Stack{public: Stack() :_p(NUL原创 2016-11-27 16:49:13 · 742 阅读 · 0 评论 -
【数据结构】用栈实现对后缀表达式的计算
首先提一句,我所用的IDE是VS2013。编译器不同,所支持的特性也就不同;现在的C++已经发展到C++11版本,因此VS2008基本就不支持C++11新的特性;我们用后缀表达式,利用数据结构中的栈,进行结果的计算如果是操作数,则压栈如果是操作符,则出栈两个元素,根据操作符进行计算之后再压栈#includeusing namespace std;#include"原创 2016-11-27 17:12:05 · 3788 阅读 · 1 评论 -
【数据结构】树和二叉树
树的一些概念(1)树是n(n>=0)个有限数据的元素集合,形状倒过来像一颗树。(2)节点:节点包含数据和指向孩子节点的指针(3)叶子节点:没有孩子的节点,也就是度为0的(4)节点的度:表示的是孩子节点的个数(5)父子节点:一个节点father指向另一个节点child,那么child节点为孩子节点,father为父亲节点(6)兄弟节点:拥有相同父亲的节点原创 2016-12-26 18:14:02 · 779 阅读 · 0 评论 -
【数据结构】二叉树的实现
上篇博客中,我们详细说明了树和二叉树的数据结构及其特征,本次,我们用C++来实现一下二叉树定义二叉树节点结构二叉树需要定义指向左孩子和右孩子节点的指针,还有存储的数据;我们在这把它的构造函数也写出来//定义一个二叉树节点templatestruct BinaryTreeNode{ T _data;//数据 BinaryTreeNode *_left;//左孩子 Bina原创 2016-12-27 12:12:40 · 2490 阅读 · 0 评论 -
【STL】map和set的基本用法
pair简介:pair是一个模板类,有两个模板参数,分别为 first 和 second;定义:template struct pair;模拟实现:templatestruct Pair{ typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; Pair() :first_原创 2017-02-17 11:49:27 · 2170 阅读 · 0 评论 -
【数据结构】二叉搜索树
概念及其性质二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除原创 2017-01-20 09:31:45 · 917 阅读 · 0 评论 -
【数据结构】B树/B+树
B树的概念和性质B树原创 2017-02-28 21:37:40 · 1244 阅读 · 0 评论 -
【数据结构】布隆过滤器——位图扩展
本篇博文,旨在介绍一种可以快速检索元素是否存在的数据结构 --- 布隆过滤器;本文从位图和布隆过滤器的对比,讨论了使用这两种数据结构的不同情况;并介绍了布隆过滤器的几种主要使用场景布隆过滤器的引入之前学习了位图,可以快速的判断一个整数是否存在于一个集合中然而,现实生活中我们用的很多是字符串,单用位图处理不了字符串,由此引来了位图布隆过滤器的思想学过了哈希表后我们知道字符原创 2017-02-28 15:19:16 · 1006 阅读 · 0 评论 -
【算法】排序算法(四)——交换排序
本篇博文旨在介绍排序算法中的交换排序;介绍了冒泡排序和快速排序的基本思想;介绍了冒泡排序和快速排序的几种实现方法;从时间复杂度和空间复杂度进行了分析;并用C++实现了冒泡排序和快速排序交换排序冒泡排序基本思想算法步骤时间复杂度和空间复杂度代码实现普通版本的冒泡排序实现优化版本的冒泡排序实现快速排序基本思想算法步骤实现快速排序的三种方法原创 2017-03-11 18:04:15 · 2900 阅读 · 1 评论