
数据结构
文章平均质量分 81
修炼成妖kkk
咸鱼一条
展开
-
栈的基础功能实现(c语言版)
栈的基础功能实现(c语言版)数据结构中的栈结构是一种顺序结构,类似于手枪子弹膛的结构。先进入的数据压入栈底,后进入的数据在栈顶,出数据时,先进入的数据后出,后进入的数据先出。栈由于只能在栈顶放入数据,出数据时也在栈顶出数据,所以用链表不是很方便,时间复杂度较高,反之用顺序表就有很大的优势。以下我们用一个顺序表来实现一个栈结构。定义一个栈的结构体#include<stdio.h>#in...原创 2018-04-22 21:41:10 · 294 阅读 · 0 评论 -
海量数据问题集合
海量数据问题集合在今天这个大数据时代,基本每一个公司都要面临处理大数据的问题,例如天猫的双十一节点击量,腾讯的上亿用户等,那么处理大数据问题就显得尤为重要。这一篇博客将选取几个较为经典的问题详解大数据问题,其中涉及的知识点有搜索树,哈希,堆,位图与布隆过滤器等。这里只讲解思路以及解决方式,不会具体造轮子。1.给一个超过100G 大 小的log file, log中存着IP地址, 设...原创 2018-05-18 11:24:43 · 264 阅读 · 0 评论 -
二叉搜索树
二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树以下皆用下面这棵树作为蓝本二叉搜索树是数据结构中的重要搜索结构,相比顺序结构来说复杂度较低,当需要在海量数据中寻找数据时很有优势。相比哈希等结构来说没有哈希因为需要避免哈希冲...原创 2018-05-06 20:17:58 · 163 阅读 · 0 评论 -
堆(数据结构)的基本操作
堆(数据结构)的基本操作堆是数据结构的一种,表现形式经常是数组来表示,我们经常将其看作完全二叉树,第一层是第一个数据,第二层是第二个和第三个数据以此类推。堆的好处是当数据很多时方便查找,一个大堆的堆顶一定是最大值,堆顶冒掉后只需要log n复杂度就可以选出第二大的数据,当数据有上亿时很方便查找。以下为堆的实现代码。typedef int HeapDateType;typedef struct ...原创 2018-04-29 18:47:00 · 200 阅读 · 0 评论 -
哈希(一)闭散列法
哈希(一)闭散列法哈希概念在二叉树搜索中,我们总是要对数据进行排序然后在根据排序结果进行查找。然而对于某些场景来说,总是要进行多次比较才可以搜索到数据,这样复杂度较高,较为复杂。于是我们想出了一种新的方法根据关键码进行映射查找类似于我们去书店借书时,店长有一个小本本记录当天借书与还书的情况来搜素数据。于是我们将这种关键码映射的方法称作哈希结构。理想的搜索方式为我们进行一次搜索便可以找到...原创 2018-05-15 16:11:21 · 1967 阅读 · 1 评论 -
哈希(二)哈希桶
哈希(二)哈希桶概念哈希桶又被称作开链法,开散列法。相比于闭散列法哈希桶更为灵活直观,存数据时不会浪费空间,开散列法存数据时由于避免哈希冲突,总会有百分之三十的空间浪费,当存储空间很大时将会造成大量的浪费。同时开散列法造成哈希冲突时不便于查找数据。所以我们有了哈希结构中的哈希桶。哈希桶与开散列法一样的是需要开一段数组用于映射,不过不一样的是哈希桶的数组存的是指针所以哈希桶是一段指针数组...原创 2018-05-15 19:10:35 · 2220 阅读 · 0 评论 -
常见排序算法剖析与比较
常见排序算法刨析与比较在这个大数据时代,我们经常需要面对海量数据处理,其中少不了对于排序算法的优化,本篇文章将归纳部分常见排序算法的算法原理,利用图文解析算法,并且通过时间复杂度,空间复杂度以及稳定性等各方面对于常见排序算法进行简单刨析与比较。常见排序算法分类首先常见的排序我们根据排序的方式可以分为三大类交换排序,插入排序,选择排序。 交换排序故名思意就是找到数据将其进行交换,从...原创 2018-05-26 16:44:13 · 379 阅读 · 0 评论 -
时间复杂度与空间复杂度
时间复杂度与空间复杂度时间复杂度与空间复杂度是我们在学习计算机时很重要的概念,可是很多同学对于时间复杂度与空间复杂度的重要性和概念不是很清晰,这篇博文将剖析时间复杂度与空间复杂度的应用。 首先我们为什么要在敲代码的时候注重时间复杂度与空间复杂度呢,举个例子,我们要处理上亿数量的文件,同样可以达到效果的两种算法一种我们只需要遍历一遍所有文件,有一种我们需要遍历文件数量的平方次,同样的一个功能人...原创 2018-05-27 22:40:51 · 725 阅读 · 1 评论 -
位图和布隆过滤器
位图和布隆过滤器当我们对于搜索结构有一定的认识后,我们知道了当我们需要搜索一个数据时,可以二分查找,当让这是较为原始的查找方式,进一步我们掌握了二叉树,学会了利用搜索树查找,可是当数据量为100亿时,我们不可能通过排序然后搜索树查找,进一步我们学会了除了排序的另一种方式映射,从而掌握了哈希查找,可是当数据为100亿时,可能所有的整数都出现了一遍,这意味着我们要开42亿9千万个int空间来存储,...原创 2018-05-17 22:20:20 · 215 阅读 · 0 评论 -
位图和布隆过滤器
位图和布隆过滤器当我们对于搜索结构有一定的认识后,我们知道了当我们需要搜索一个数据时,可以二分查找,当让这是较为原始的查找方式,进一步我们掌握了二叉树,学会了利用搜索树查找,可是当数据量为100亿时,我们不可能通过排序然后搜索树查找,进一步我们学会了除了排序的另一种方式映射,从而掌握了哈希查找,可是当数据为100亿时,可能所有的整数都出现了一遍,这意味着我们要开42亿9千万个int空间来存储,...原创 2018-05-17 22:20:27 · 208 阅读 · 0 评论 -
队列的基本操作(c语言版)
队列的基本操作(c语言版)队列是数据结构中一种顺序结构,故名思意可以理解为我们日常站队等,先进入队列的数据排在前头,所以先出队列,后进入队列的数据后出队列。而且队列是只能从队尾进入,队头离开,由于出数据只能从队头出,所以选用链表来实现队列更加方便。、这里将会实现队列的增删以及初始化等基础接口。先定义一个队列的结构体typedef int DataType;typedef struct Queu...原创 2018-04-23 21:13:42 · 689 阅读 · 0 评论 -
链表经典题目合集(c语言版)
链表经典题目合集(c语言版)链表作为数据结构中较为热门的类型,一直是各大公司笔试面试常考类型,同时链表也有很多经典题目,可以帮助初学者更好的理解链表。1.从尾到头打印链表先遍历链表,遍历的同时将链表的值头插进一个新的链表,在打印新的链表即可。void SLitsPrintTailToHead(SListNode* pHead){ SListNode* _new, *ptr; _new = N...原创 2018-04-23 21:59:18 · 19521 阅读 · 2 评论 -
栈与队列经典问题合集(c语言版)
栈与队列经典问题合集(c语言版)栈与队列作为数据结构中顺序类型的热门类型,近年来一直是各大公司笔试面试的常考题目类型,本次合集收录了较为常见的栈与队列问题,偏基础。1.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)。我们定义栈的结构体时除了栈存储的数据data外可以额外存储一个min,这个数据代表当前栈的最小数据,当插入数据时我们将当前栈顶的min...原创 2018-04-24 18:08:43 · 1616 阅读 · 0 评论 -
二叉树基础操作
二叉树基础操作本篇博客涉及二叉树的概念,分类以及基本操作等部分。二叉树的概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于2的结点二叉树的子树有左右之分,其子树的次序不能颠满二叉树&完全二叉树满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树, 并且所有叶子节...原创 2018-04-16 17:34:26 · 191 阅读 · 0 评论 -
顺序表(c语言版)
顺序表本次博客我们将介绍数据结构基础。数据结构大致分为顺序结构,树形结构与图。本次所要介绍的顺序表属于顺序结构。顺序表底层为数组,相对于其他顺序结构优点在于查找方便,可是当我们进行删除操作时较为复杂。利用顺序表我们可以完成通讯录等小型项目。顺序表:用一段地址连续的存储单元依次存储数据元素的线性结构地址连续的空间,一般情况下采用数组,但数组有静态数组和动态数组,所以顺序表分为:静态顺序表和动态顺序。...原创 2018-04-21 00:56:33 · 329 阅读 · 0 评论 -
链表基本操作(c语言版)
单链表基础操作(c语言版)链表是顺序结构的一种,一个链表节点中包含下一个节点的指针,当前链表的值,根据分类,链表可以分为单链表与双链表,双链表中还存在一个指向前一个节点的指针。带头链表与不带头链表,头节点为哨兵卫不存数据仅作为标记用。带环与不带环。根据排列组合一共有八种链表。我们这里为了演示方便将选用单向不带头不带环的链表。首先我们定义节点的结构体typedef int DataType;//链表...原创 2018-04-21 10:26:54 · 192 阅读 · 0 评论 -
双链表(c语言版)
双链表的基本操作双链表相对于单链表来说,每一个节点还存了一个指向上一个节点的指针,提升了便捷性,例如某些情境下我们需要找到当前节点的上一个节点等问题,双链表对于单链表有很大的优势。双链表尾节点的prev指针指向头节点,故双链表的头节点为哨兵卫,不存数据,仅作为标记作用。当单链表为空时,仅存在一个头节点,next指针与prev指针均指向自己。故双链表不可能为空。以下将给出双链表的实现代码。typed...原创 2018-04-21 11:16:14 · 155 阅读 · 0 评论 -
搜索结构之K模型与KV模型
搜索结构之K模型与KV模型搜索结构在日常的应用中,我们经常需要在海量数据中进行搜索某一数据。根据目前掌握的方法我们可以选择树形结构类似搜索树,平衡树,红黑树等搜索结构。以及哈希这种映射结构。两类结构各有优劣在这里不进行比较,详情请看以前博客。K与YV模型搜索结构中同时也分为不同的应用场景,比如单体映射,关键码即为需要搜索到的值,还有双映射,在关键码位置还储存一个数据。第一种...原创 2018-05-17 10:13:18 · 2287 阅读 · 0 评论 -
基于BOOST的小型搜索引擎
搞这个项目的初衷是因为在查boost文档的时候很不方便,每一次都要因为没有搜索引擎搞好久,所以这一次就打算自己写一个基于boost库的搜索引擎,期望达到的目标是当用户输入关键字的时候,可以将相关的文档的标题,url以及摘要按照相关度罗列出来。项目一共分为三个模块,分别为数据解析模块,索引模块以及搜索模块。数据解析首先我们需要对存在于主机上的boost文档进行数据解析,很明显我们只需要html...原创 2019-03-11 19:07:54 · 618 阅读 · 0 评论