位图是用一个btye位来表示一个数据是否存在,再通过哈希函数确定一个数据所在的位置,这样处理会使当仅需要判断一个数据在不在的时候大大的提高效率,缩小内存的使用,如一个数据为int型,而一个int型的数据构成的位图能表示32个数据的存在状态。代码实现如下:Bitmap.h:#include<vector> class BitMap
开链法(哈希桶)是解决哈希冲突的常用手法,结构如下: 数据结构的设计思路是这样的,定义一个K—V的链式节点(Node),以数组方式存储节点指针 实现代码如下:#include<vector> #include"HashTable.h" size_t
二次探测是避免哈希冲突的一种常见手段,思想是: 插入: 找到哈希位置(serch)->如果不冲突就插入,冲突就进行第一次探测 第1次探测: 哈希位置变为原有哈希位
堆排序是一种常见的排序算法,其时间复杂度为O(logN),重要思想为建堆取极值,根据需求进行排序,如下图: 值得思考的是,二次建堆的过程中,实际上是没有必要将所有元素都进行下调,只需要将根进行下调: 实现代码如下:template <class
堆对象的创建与实现的核心思想就是上调(adjustup)与下调(adjustdown)的算法思想,上调用于创建堆时,从第一个非叶子节点开始向根节点根据需求调整为大堆或者小堆 下调如图示: 当我们进行插入时,会影响堆的结构,这时我们用尾插,然后上调如图示:&nb
二叉树的线索化,这几天以来我很难掌握,今天终于想通了,哈哈,首先我们来看看二叉树线索化之后会变成什么样子,这里我们以图中的二叉树为例,图如下: 画的太糙,各位看官讲究着看吧- -。所谓二叉树的线索化,就是当一个节点的左右指针为空时,就让它的左右指针指向该节点的前驱或者后继(一般来说左指针指向前驱,右指针指
二叉树是一种常见的数据结构,这里我们需要要注意的是,二叉树的非递归的遍历。 先序遍历,中序遍历,后序遍历 这三种遍历,如果用非递归的方式实现,我们则需要借助栈这个结构,首先我们需要遍历所有左子树的左节点。进行压栈,完成压栈之后,根据不同的需求,判断是否该继续访
因为广义表是链式的嵌套结构,所以我们必须用递归来进行遍历,这里面递归的方式有很多种,可以循环套递归,也可以递归套递归,也可以递归套循环,根据我们不同的需求,可以吧这三种方法都运用在合适的地方,才能最优化的解决问题。
用两个栈模拟队列的思想就是“倒水思想”,这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下:#include<iostream> #include<string> #include<cassert> struct __TrueType//类型萃取 { boo
学习了模板,我们发现,c++中的众多数据结构,如栈与队列跟模板,只是方法上与线性表不同,其真正意义上的结构,也就是线性表,代码如下:template <typename T> class SeqList { private : int&nb
求最大公约数的设计与C语言实现
C语言实现二分查找思路
链表的基本操作,包括节点的创建,头插尾插,头删尾删,一次遍历寻找链表的中间节点,寻找链表的倒数第x个节点,删除无头链表的非尾节点,链表的逆置
实现线性表的基本操作与冒泡排序线性表,现则排序线性表以及测试代码
C语言实现C到C++的注释转换
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号