数据结构
文章平均质量分 89
sandmm112
这个作者很懒,什么都没留下…
展开
-
顺序表的相关操作
线性表是具有n个相同数据类型元素的有限序列,除了第一个元素无直接前驱,最后一个元素无直接后继外,其余元素均有唯一的前驱和后继。元素之间具有一对一的关系。如图所示: 线性表在计算机中的存储结构分为两种,一种是顺序存储,一种是链式存储。顺序存储的线性表也被称为顺序表。它是指,顺序表中的所有元素存放在一块地址连续的空间中,相邻元素间的物理地址连续,以达到其在逻辑结构上相邻的...原创 2018-03-11 14:05:02 · 2762 阅读 · 0 评论 -
数据结构------基于线性探测解决哈希冲突的哈希表
刹车原创 2018-05-21 11:51:16 · 4644 阅读 · 1 评论 -
数据结构------基于哈希桶解决哈希冲突的哈希表
在原创 2018-05-21 22:24:46 · 844 阅读 · 1 评论 -
数据结构------布隆过滤器的基本操作
下文中用到位图的相关知识和代码见博客:位图的基本操作 布隆过滤器主要用于在一个字符串集合中查找某个字符串是否存在。要在集合中查找,首先要将该字符串集合储存起来。那么该如何存储呢? 如果用链表,树等结构进行存储,当集合中的元素越来越多时,所占的空间就越来越大。查找的效率也会越来越低。如果用哈希表来存储,首先要根据字符串哈希函数计算字符串对应的数值...原创 2018-05-26 11:15:54 · 1912 阅读 · 0 评论 -
数据结构------位图的基本操作
在之前的哈希表中,如果要在表中存放一个整数,此时就要申请一个整型的内存来存放它,一个整型数据在32位或64位平台下都占4个字节。如果现在需要存储的数据非常多,比如说40亿个不重复的数据,就需要160亿个字节来存储,1GB的内存表示的是10亿个字节,此时就需要16GB的内存来存放这些数据,而我们普通的电脑内存一般都是4G的内存,这显然是存放不下的。我们知道,内存中的最小单位是比特位。...原创 2018-05-23 16:13:41 · 1937 阅读 · 0 评论 -
七大排序算法(1)------冒泡,选择,插入排序
本文中将介绍七大排序算法中的三种排序:冒泡排序,选择排序,插入排序。剩余的排序算法将在接下来的文章中一一介绍。 介于排序分为升序和降序两种,所以,这里将比较规则以回调函数的方式传入排序算法中,这样,在具体实现时,就可以根据不同的需求传递不同的函数指针进而达到不同的排序效果。 升序比较规则定义如下: 降序比较规则定义如下:1. 冒泡排序 ...原创 2018-05-31 09:55:46 · 410 阅读 · 0 评论 -
七大排序算法(2)------堆排序
在本文中使用到的升序,降序,交换函数的代码实现见:这篇博客 有关堆的相关概念和知识点见:原创 2018-05-31 11:53:38 · 320 阅读 · 0 评论 -
七大排序算法(3)------希尔排序
在本文中使用到的升序,降序,交换函数的代码以及插入排序的思想见:这篇博客 在上述博客中的插入排序中有介绍了插入排序的两个特点:(1)当待排序序列的有序性比较高时,排序的效率比较高;(2)当待排序序列的元素个数较少时,排序的效率比较高。 本文中介绍的希尔排序就是利用插入排序的两个特点来实现的。希尔排序 例如,待排序序列为:10 30 20 6...原创 2018-05-31 17:07:32 · 1775 阅读 · 0 评论 -
七大排序算法(4)------归并排序(递归和非递归)
在本文中使用到的升序,降序,交换函数的代码实现见:这篇博客 在单链表的基本操作中,有一个操作为合并两个有序的单链表使合并后的链表仍然有序。本文中归并排序与这个思想类似。不断使两两有序的序列进行合并。归并排序(递归实现) 例如,有一待排序序列:20 10 9 8 11 10 7 6。 排序过程如上图所示,(1)首先将待排序序...原创 2018-05-31 18:04:26 · 2201 阅读 · 0 评论 -
七大排序算法(5)------快速排序(递归和非递归)
在本文中使用到的升序,降序,交换函数的代码见:这篇博客快速排序(递归实现) 快速排序的基本思想是在待排序序列中找到一个基准值(一般取待排序序列的最后一个元素),然后将该基准值放置在一个合适的位置,使得在基准值之前的元素都小于等于基准值,基准值之后的元素都大于等于基准值。 然后再对基准值之前的序列使用上述方法进行排序寻找基准值位置,对基准值之...原创 2018-05-31 20:37:09 · 2705 阅读 · 0 评论 -
数据结构------二叉树的面试题
在数据结构------二叉树的基本操作(递归实现)一文中,介绍了二叉树的结构定义以及一些基本操作,本文将继续介绍一些有关二叉树的面试题。1. 非递归实现二叉树的先序遍历 二叉树的非递归先序遍历要通过一个栈来实现。 先序的遍历的访问顺序为先根节点,再左孩子,最后右孩子。所以,根据栈后进先出的特点,应先入栈右孩子,再入栈左孩子。(1)根节点入栈(2)取栈顶元...原创 2018-05-06 20:50:17 · 463 阅读 · 0 评论 -
数据结构------搜索二叉树的相关操作(递归和非递归版本)
搜索二叉树的概念 搜索二叉树满足下面两个要求:(1)它是一棵二叉树(2)该二叉树中,任意一棵树的根节点值大于它左子树中的所有结点的值,小于右子树中的所有结点的值 因此对于搜索二叉树的中序遍历来说,它是按由小到大依次递增的顺序排列的。搜索二叉树的相关操作 在本文中将介绍搜索二叉树的以下操作:(1)初始化搜索二叉树(2)在搜索二叉树中插入指定元素(递归实现)(...原创 2018-05-13 09:29:54 · 510 阅读 · 0 评论 -
数据结构------堆的相关操作
堆的概念 堆实际上还是一棵二叉树,不过它还满足下列两点要求:(1)堆是一棵完全二叉树。(关于完全二叉树的定义见:数据结构------二叉树的面试题)(2)堆中元素满足:对任一棵树来说,它的根节点的值比它的左,右孩子都大或都小(注意:左右孩子之间没有明确的大小关系)。 根节点的值比它的左,右孩子元素都大的堆称为大(根)堆。 根节点的值比它的左,右孩子元素都小...原创 2018-05-12 19:06:58 · 354 阅读 · 0 评论 -
单链表的基本操作
线性表有两种存储方式,一种是顺序表,在顺序表的基本操作中,有说过,顺序表是存放在一片连续的内存空间中,以物理位置的相邻来表示逻辑位置的相邻。当数据量过多时,对内存空间的利用率就比较低。 而线性表的另外一种表示就是链表,它没有占据一整片连续的内存,而是分散在一个个零散的区域中,以指针的形式将各个节点连接起来,以表示线性表逻辑上的相邻顺序。这样做可以提高对内存空间的利用率。...原创 2018-03-21 14:43:33 · 1132 阅读 · 1 评论 -
单链表的常见笔试题(1)
在之前的“单链表基本操作”博客中,介绍了一些关于单链表的增删查改等基本操作。在本文中,对单链表的操作升级,列举一些常见的有关单链表的常见笔试题。 注意:该单链表还是无头结点,单向,无环的。有关链表的信息与“单链表基本操作中”相同。1. 逆序打印单链表 链表正常的输出顺序是从头开始输出,如果逆序的话,最后输出的是头结点,先输出的是最后一个节点,此过程可以通...原创 2018-04-01 11:17:03 · 840 阅读 · 0 评论 -
双向,带头节点,带环链表的基本操作
前面已经介绍过了不带头节点,不带环的双向链表,以下将介绍带头节点,带环的双向链表的基本操作。 不带头结点时,用一个头指针代表整个链表。带头节点,则用头结点来表示整个链表。此时,头结点的数据域是没有意义的,对其任意赋值即可。如下图: 当链表是单向时,只有一个next指针指向下一个节点。而双向时,除有next指向下一个节点外,还有一个prev指针指向前一个结...原创 2018-04-08 22:07:33 · 521 阅读 · 0 评论 -
顺序栈/链式栈
栈是是一种限定性的线性表,它将线性表的插入和删除限定为仅在表的一端进行。将表中允许插入和删除的一端成为栈顶。所以栈顶的位置是不断动态变化的。它具有“后进先出”的特点。因为栈是由线性表实现的,所以,栈有两种存储结构:顺序存储和链式存储。对应的栈成为顺序栈和链式栈。下面,分别来介绍这两种栈的相关操作。一,顺序栈 它与顺序表类似,即用一组地址连续的空间存放栈中的元素。之前的...原创 2018-04-09 00:30:44 · 11424 阅读 · 0 评论 -
单链表的常见笔试题(2)
本文中接着列举一些常见的有关单链表的笔试题。1. 判断单链表是否带环 如果一个链表带环,则该链表的尾节点的next必不指向空,而是指向在他之前的某一节点,类似这样的: 那么该如何判断呢?方法一: 首先将头结点的地址存放在一个顺序表中。从头开始遍历链表,比较每个节点的next域是否在顺序表中出现,如果出现了,说明该链表带环,如果没有出现,将该...原创 2018-04-01 17:12:10 · 441 阅读 · 0 评论 -
顺序队列/链式队列
队列是另一种限定性的线性表,他只允许在表的一端插入元素,而在表的另一端删除元素,具有“先进先出”的特点。在队列中,允许插入的一端称为队尾,允许删除的一端称为队首。 与线性表相似,队列也有两种存储结构:顺序队列和链式队列。一,顺序队列 顺序队列使用顺序表来实现的,即队列中的元素均存放在一片连续的内存空间中。通过该片内存的地址对队列中元素进行访问。之前是用数...原创 2018-04-09 15:49:55 · 2206 阅读 · 0 评论 -
栈和队列常见笔试题
以下有关栈的知识请见这篇博客:https://blog.csdn.net/sandmm112/article/details/79860236 以下有关队列的知识请见这篇博客:https://blog.csdn.net/sandmm112/article/details/79860257 前面我们介绍过了栈和队列的两种实现方法以及一些基本操作。下面利用之...原创 2018-04-16 14:53:02 · 4092 阅读 · 0 评论 -
数据结构-------二叉树的基本操作(递归实现)
首先介绍二叉树的概念。 不同于链表等线性表,树是一种非线性表。除了根节点没有前驱外,其余节点都有唯一的一个双亲结点和多个或0个孩子节点。其中,对每个节点来说,最多有两个孩子节点的称为二叉树。二叉树的几种形式如下图: 对于二叉树的任一结点,都可以表示为以上的任一一种形式。所以,一个二叉树是由无数个子树组成。每棵子树都可以表示为上图中的任一一种形式。因此,在...原创 2018-05-03 00:32:32 · 6476 阅读 · 1 评论 -
迷宫问题求解
问题一:在迷宫中找到出口(只需找到一个即可) 给定一张迷宫地图和一个迷宫入口,然后进入迷宫探索找到一个出口。问题分析:1. 首先要有一张迷宫地图,地图由两部分组成: (1)一是迷宫中各处的位置坐标, (2)二是迷宫各位置处的状态信息,即该处是墙还是路 所以,该迷宫地图可由一个二维数组来表示。数组的横纵坐标表示迷宫各处的位置坐标,数组元素表示各位置处的状态信息...原创 2018-04-21 01:32:52 · 34061 阅读 · 3 评论 -
数据结构------海量数据处理
1. 给定一个大小超过100G的文件,其中存在IP地址,找到其中出现次数最多的IP地址。 要查找IP地址,首先要将100G文件加载到内存以哈希表的形式将其储存起来。其中哈希表中的数组元素一个键值对构成。各IP地址(4字节)作为Key值,IP地址出现的次数作为Value值。在对哈希表进行遍历查找出现次数最多的IP地址。 但是一般的内存不可能有100G,无法将文件中的所有I...原创 2018-06-01 17:18:37 · 306 阅读 · 0 评论