
数据结构
文章平均质量分 55
梦奕
在路上.......
展开
-
【数据结构】位图
一、基本概念 在存储数据之时,如果按照其原数据类型存储数据,如果要存取大量数据之时,有可能会由于数据元素个数较多且类型较大,不能一次性存储,而采用位图,将极大的解决这个问题。 位图是利用数组,将数组下标与元素一一对应,将元素所在的这个比特位的状态改为存在,则可以表明这个元素的状态即可。 主要表示为如下: 二、代码实现#include<iostream>using ...原创 2018-05-09 21:37:30 · 284 阅读 · 0 评论 -
【数据结构】哈希开散列
原创 2018-05-08 17:58:37 · 279 阅读 · 0 评论 -
哈希闭散列实现
在上一篇文章中,我们已经对哈希的基础有了一个大概的认识,但是对其实现还没有做具体的解释,在这篇文章中,我们将对这一部分做出一个详细的解释。 有关哈希基础, 请参考上篇https://blog.youkuaiyun.com/aaronlanni/article/details/79701843 一、实现静态的哈希表 下面,将给出静态实现://静态#define MAX_SIZE 10t...原创 2018-05-08 17:21:56 · 308 阅读 · 0 评论 -
【数据结构】排序算法之计数排序与基数排序
一、计数排序 很好理解,就是对应每个数我们统计每个数字出现的次数,然后用一个直接定址的哈希表来存放数据,在通过遍历这个哈希表,进而就可以排好序了 如下所示: 代码实现如下所示:void CountSort(int *array, int size){ assert(array || size < 0); int minData = array[0]; ...原创 2018-04-26 23:03:21 · 498 阅读 · 1 评论 -
【数据结构】排序算法之归并排序
基本思想:将待排序的元素序列分成两个等长的子序列,再将子序列划分子序列,直到子序列中只有一个元素就不用在对子序列继续进行划分,将划分的每个区块,进行排序,然后再将其归并到一个序列中,直到将所有的子序列归并完成之后,则这个序列就完成了排序。 1、基本思想如下所示: 经过上面的划分,从而可以看出经过划分与归并,使得元素就有序。 但是要使得两个区间的元素能归并到一个区间中,如果只是将一个元素搬...原创 2018-04-25 22:42:34 · 240 阅读 · 0 评论 -
【数据结构】之交换排序
一、冒泡排序 第1趟:依次比较相邻两个数据元素(i = 0,1,2,…, n-2),若array[i]>array[i+1],则交换两个元素,否则不交换,这样数值最大的数据元素将被防止在a[n-1]中; 第2趟:数据个数减1,即数据元素个数为n-1,操作方式和1类似,排完之后数据序列中的次大元素保存在array[n-2]中; 当n-1趟结束时,排序结束。 实现代码如下所示:...原创 2018-04-23 19:39:59 · 853 阅读 · 0 评论 -
算法分析神奇之时间复杂度、空间复杂度、稳定性
算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。原创 2018-04-18 22:00:17 · 591 阅读 · 0 评论 -
【数据结构】排序算法之选择排序
一、选择排序——最差的排序算法 在选择排序中,假定我们需要升序,因此在每次排序中,需要找到最大的元素,将其放在最后,在每一次的循环中,都是将最大的元素放在最后,因此对于数据较多的数组,循环的次数将与数组中元素的个数一致,因此,在对于这种数组进行排序时,将十分的浪费时间。 有关选择排序的思路,如下所示: (一)方式一,默认数组中最后一个元素最大,如下图所示: 代码如下所示:void ...原创 2018-04-17 22:29:30 · 642 阅读 · 0 评论 -
【数据结构】排序算法之插入排序
一、排序概念 1、概念 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。 2、排序分类 3、各种算法的性...原创 2018-04-16 21:55:14 · 1128 阅读 · 0 评论 -
【数据结构】并查集
一、基本概念 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。在一些有N个元素的集合应用问题中,通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。 1、概原创 2018-04-11 22:11:31 · 379 阅读 · 0 评论 -
哈希
在前面我们已经学到很多在一个结构中查找一个元素,不同的结构的方法不同且实现时的时间复杂度与空间复杂度都有不同,但是但部分的查找都是经过比较,从而找出自己要查找的主要元素。由此我们就想,有没有一种方法不通过比较,从而快速的找到需要的数据,因此,在这里我们就提出了哈希查找,利用存储位置并按照此位置进行存放元素,从而极大的实现了我们的查找效率。下面我们将对哈希查找展开来讲。 目前我们了解到的查找主要有以原创 2018-03-26 21:25:38 · 1458 阅读 · 1 评论 -
【数据结构】数据结构之AVL树
一、AVL树的来源 AVL树是一种搜索树,但在搜索效率上,容易形成单支树的情形,因此在查找元素相当于在顺序表中搜索元素,效率低下。原创 2018-03-16 21:36:01 · 1388 阅读 · 5 评论 -
使用两个队列实现一个栈,使用两个栈实现一个队列
一、栈与队列的特点 (一)栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。不含任何元素的栈称为空 栈,栈又称为后进先出的线性表。 栈的特点:后进先出(LIFO) (二)队列 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作 的特殊线性表。进行插入操作的一端称为队尾,通常称为入队列;进行删除操作的原创 2018-03-10 00:14:18 · 621 阅读 · 0 评论 -
二叉树面试题之三
对于二叉树的其他操作,参考前面两篇文章http://blog.youkuaiyun.com/aaronlanni/article/details/78698559 http://blog.youkuaiyun.com/aaronlanni/article/details/79317946 今天,在介绍一下二叉树中一些其他的内容,详情请看下面 一、判断一个结点是否在二叉树中 在此处,判断一个结点是否在二叉树中,利用结...原创 2018-02-12 21:43:27 · 291 阅读 · 0 评论 -
二叉树的面试题之判断树
在前面,已经介绍过了,有关二叉树中的一些基本操作,如果大家对这些还不是十分熟悉,可以参考上一篇文章,有关二叉树的遍历方式:http://blog.youkuaiyun.com/aaronlanni/article/details/78698559 今天,主要介绍一些二叉树中,常见的一些操作: 一、判断一棵树是否是完全二叉树 完全二叉树:如果一棵具有N个结点的二叉树的结构与满二叉树的前N个结点的结构相同,...原创 2018-02-12 17:30:20 · 1164 阅读 · 0 评论 -
查找一个字符串中第一个只出现两次的字符
问题描述 查找一个字符串中第一个只出现两次的字符。例如:“abcdefabcdefabc”中第一个只出现两次的为“d”,要求时间复杂度为O(1),空间复杂度为O(1) 解决思路 1、建立一个Hash表,用来存储每一个字符出现的次数,即一个字符的大小:256(无符号类型) 2、对Hash表中的每一个的字符进行初始化 3、存储数组中每个字符出现的次数,将其保存在Hash表中 4、从数组的起原创 2018-02-02 14:49:31 · 1726 阅读 · 0 评论 -
将“talk is cheap show me the code”中的空格替换为“&&&”
将“talk is cheap show me the code”中的空格替换为“&&&” 思路: (1)先将字符串中空格的个数计算出来 (2)重新计算数组中的大小 (3)遇到空格,则替换,不是空格,则直接搬移即可 (4)直到原字符串中的所有元素都被替换完全 具体代码如下所示#includeusing namespace std;#include#include//将“原创 2018-02-01 19:56:30 · 515 阅读 · 0 评论 -
实现一个栈,要求实现出栈,入栈,返回最小值的操作,时间复杂度为O(1)
题目:实现一个栈,要求实现出栈,入栈,返回最小值的操作,时间复杂度为O(1) 解法:利用两个栈,一个普通栈s,一个最小值栈min, 入栈:将元素压入到s中,比较s中与min中栈顶元素的大小,如果小,则压入到min中,如果栈中为空,则将栈中s的元素也压入到min中 出栈:空栈—–>直接退出 非空栈—–>如果s中与min中的元素大小一致,则两者均删除,否则,删除s中的即可。 获取最小值:在m原创 2018-01-30 20:23:22 · 1073 阅读 · 1 评论 -
数据结构-----二叉搜索树
一、基本概念 1、二叉搜索树概念 二叉搜索树:又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 (1)若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 (2)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 (3)它的左右子树也分别为二叉搜索树 2、形式 二、操作 (一)插入 1、若二叉树为空——>直接插入 2、不为空 (1)找插入结点的位原创 2018-01-27 15:39:55 · 261 阅读 · 0 评论 -
数据结构-----Huffman树
一、基本概念 1、哈夫曼树(Huffman tree),又名最优树,指给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。 2、路径与路径长度 在一棵树中,从一个结点往下可以达到的孩原创 2018-01-24 18:06:52 · 424 阅读 · 0 评论 -
数据结构-----堆的应用
上次内容中,我们对堆有了一个大概的认识,现在,我们就来看看堆中有哪些应用吧!!! 一、优先级队列 概念:优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。 解释:优先级队列是对堆的一次封装,利用堆的性质,封装出来一个与堆类似的东西,从而达到自己的目的。 下面,直接来上代码,此处的优先级队列,依赖前面的堆的基础实现,有需要的,可以先看堆的实现有关堆的创建与原创 2018-01-24 16:26:27 · 277 阅读 · 0 评论 -
数据结构之-----堆(1)C++实现
一、概念 数据以数组的形式存储。 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki = K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称这个堆为最小堆(或最大堆)。 二、形式 最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,位于堆顶结点的关键码最小。 最大堆:原创 2018-01-23 22:56:12 · 742 阅读 · 0 评论 -
二叉树面试题之二叉树的遍历方式
一、基本概念 1、二叉树的概念 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的二叉树组成(即一个根节点最多只有两个孩子结点)。 2、二叉树的特点 (1)每个结点最多有两棵子树,即二叉树不存在度大于2的结点(分支数最大不超过2) (2)二叉树的子树有左右之分,其子树的次序不能颠倒 3、完全二叉树与满二叉树 (1)满二叉树:在一棵二叉树中原创 2017-12-02 21:41:56 · 3594 阅读 · 0 评论