数据结构
ENSHADOWER
明天是复杂的漫游
展开
-
位图基本操作与实现
位图 一、位图的原理:在位图中采用比特位表示对应的元素存在或者不存在0:不存在 1:存在,例如一个int整数有32个比特位可以 表示0-31个整数。 图解: 二、位图的优点:使用位图最大的优点就是节省空间。(因为位图的处理方式是信息压缩) ...原创 2018-09-17 17:45:02 · 4789 阅读 · 1 评论 -
二叉搜索树
目录基础知识一、性质:(非空树时)二、基本操作:三、性能:四、应用:代码实现基础知识一、性质:(非空树时) 若它的左子树不为空,则左子树上所有节点的值都比根小 若它的右子树不为空,则右子树上所有节点的值都比根大 它的左右子树也分别为二叉搜索树二、基本操作:1、查找:若根节点不为空: 如果根节点key ==...原创 2019-04-02 21:46:13 · 205 阅读 · 0 评论 -
排序算法之三种基础排序算法(冒泡、选择、直接插入)
目录冒泡排序选择排序直接插入排序注:以下排序均默认为升序排序。冒泡排序一、基本思想: 从前往后,依次比较相邻的两个数,把较大的数放到后面;一次循环后,可以在当前最末尾位置得到一个当次循环的最大值。时间复杂度:O(n²) 空间复杂度:O(1) 排序稳定程度 :稳定 缺点:传统的冒泡排序中每一趟排序只能找到一个最大值或最小值,效率低。二、...原创 2019-02-20 14:58:10 · 341 阅读 · 0 评论 -
排序算法之希尔排序
1959年Shell发明,是简单插入排序的改进版。它与插入排序的不同之处在于:它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序一、基本思想: 把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。那么到最后的时候,插入的序列是一个大致有...原创 2019-02-21 14:44:42 · 206 阅读 · 0 评论 -
排序算法之归并排序
归并排序 归并排序(MergeSort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 分治法,也可以称为分治策略:是将一个大规模的问题(原问题)划分成n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 分治模式在每一层递...原创 2018-09-27 15:34:15 · 212 阅读 · 0 评论 -
数据结构之单链表常见面试题
逆序打印单链表 逆序打印单链表有两种方法,分别是递归和非递归。-----------------------------//递归实现逆序打印-----------------------------------void PrintTailToHead(pList *pplist){ if (*pplist == NULL) //空链表 return; ...原创 2018-10-02 14:42:51 · 517 阅读 · 0 评论 -
单链表的基本操作及实现详解
链表是最基本的线性数据结构之一,单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 一、单链表的概述 1.单链表的分类 单链表的最大特点是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能。 单链表分为两种:无头单链表和有头单链表。 ...原创 2018-10-01 18:21:05 · 2742 阅读 · 0 评论 -
排序算法之快速排序的非递归实现
在之前的博客中提到过快速排序的三种实现方式,不过都是通过递归来实现,今天我们将会利用栈来实现快速排序。-----------------------------------Stack.h-------------------------------------------//栈的实现#pragma once#include<assert.h>#include<s...原创 2018-10-01 16:17:28 · 464 阅读 · 0 评论 -
排序算法之快速排序
快速排序算法的基本思想 1.先从待排序元素数列中取出一个数作为基准值(一般取区间最后一个元素)。 2.将待排序集合分割成两子序列,使左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值。(这样基准值的左边的没有大于key的,右边没有小于基准值的,只需对左右区间排序即可) 3.再对左右区间重复第二步,直到各区间只有一个数。快...原创 2018-09-25 10:56:17 · 388 阅读 · 0 评论 -
哈希表详解及应对哈希冲突(闭、开散列)
哈希搜索结构 顺序搜索以及二叉搜索树中,元素存储位置和元素各关键码之间没有对应的关系,因此在查找一个元素的时候,必须要经过关键码的多次比较。所以这样的搜索效率取决于搜索过程中元素的比较次数。 而我们理想的搜索方法就是不用经过任何比较,一次直接从表中得到要搜索的元素。如果能够构造一种结构,让所要查找的关键码与它的存储位置有一定的关系,那么可以根据这种关系找到其位置...原创 2018-09-13 16:35:17 · 829 阅读 · 0 评论 -
数据结构:栈与队列
栈的原则是后进先出,即插入与删除元素均在栈顶进行。 (获取栈顶元素:s.top())队列的原则是先进先出,即插入数据在队尾进行,删除数据在队头进行。 (获取队头元素:q.front()) 用两个栈实现一个队列 思路:用两个栈,一个栈用来进队,一个栈用来出队,当数据进入队列的时候,我们将其压入一个栈,当数据出队的时候,我们将保存在栈内的数据pop出来,将其按照出栈的顺序压入另...原创 2019-08-22 17:30:47 · 437 阅读 · 0 评论