C++
摩尔の
主要方向C/C++后台开发,目前正在向软件驱动开发转型。
什么都懂一点,又什么都不懂。
展开
-
基于布隆过滤器的跨平台USB存储设备管控方案
U盘作为移动存储设备之一,是我们日常生活中接触最多和最常用的存储介质。正因如此,针对U盘内容的管理也因为使用场景的多样和复杂性,变得难以实现。我们的设计思路是先通过某些手段对U盘进行病毒,并在查杀完成后对U盘进行认证。在后续使用过程检测认证U盘是否被篡改以保证U盘的安全性。原创 2024-02-10 16:13:01 · 909 阅读 · 0 评论 -
C++实现简单内存池
内存池是什么?内存池(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池如何实现?若申请的内存块相对较小......原创 2021-12-01 15:36:29 · 915 阅读 · 0 评论 -
数据结构——队列
1.队列是什么?队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。2.示例队列的简单实现template <typename T>class Queue { private: struct Node { struct list_head list; T data; }; list_head h.原创 2021-09-01 16:39:40 · 61 阅读 · 0 评论 -
数据结构——栈
1.栈是什么?栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在尾部进行插入和删除操作的结构。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。2.示例栈使用的双向链表结构// From Linuxstruct list_head{ struct list_head *next, *prev;};// 初始化结构体#define list_hea.原创 2021-09-01 11:42:27 · 69 阅读 · 0 评论 -
排序算法——桶排序
1.基数是什么?桶排序(radix sort)属于“分配式排序”(distribution sort),顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。2.描述桶排序算法的原理如下:遍历序列,取出权重因子的最大长度(若为字符串,则radix=字符串最大长度)。按照权重因子的优先级进行排序。将步骤2中排序的数组放入原数组。权重因子+1,重复步骤2-3,直到权.原创 2021-08-31 15:59:47 · 221 阅读 · 0 评论 -
排序算法——基数排序
1.基数排序是什么?基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。2.描述基数算法的原理如下:遍历序列,取出权重因子的最大长度(若为字符串,则radix=字符串最大长度)。按照权重因子的优先级进行排序。将步骤2中排序的数组放入原数组。权重因子+1,重复步骤2-3,直到权重因子使用完毕。3.示例/* * 用于取得整数最大值的位数 */.原创 2021-08-31 09:42:55 · 130 阅读 · 0 评论 -
排序算法——计数排序
1.基数排序是什么?计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)。2.描述基数排序算法的原理如下:找出待排序的数组中最大和最小的元素。统计数组中每个值为i的元素出现的次数,存入数组count的第.原创 2021-08-27 18:56:45 · 179 阅读 · 0 评论 -
排序算法——堆排序
1.堆排序是什么?堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。2.描述堆排序算法的原理如下:将堆的末端子节点作调整,使得子节点永远小于(大于)父节点。将堆顶元素A[0]与最后一个元素A[n-1]交换,此时得到新的堆区(A1,A2,……An-1)和新的有序区(An),且满足A[1,2…n-1]<=A[n]。对堆区重复进行步骤1-2。3.示例/* * 堆排序 .原创 2021-08-27 18:24:51 · 53 阅读 · 0 评论 -
排序算法——快速排序
1.快速排序是什么?快速排序(Quicksort)是对冒泡排序算法的一种改进。2.描述快速排序算法的原理如下:首先设定一个分界值,通过该分界值将数组分成左右两部分。将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。分别对左右两侧,重复步骤1-2。3.示例template <typename T>inline void quickSortRecursive(T.原创 2021-08-27 17:18:25 · 78 阅读 · 0 评论 -
排序算法——归并排序
1.归并排序是什么?归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。2.描述归并排序算法的原理如下:把长度为n的输入序列分成两个长度为n/2的子序列;;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。3.示例递归版// 归并排序template.原创 2021-08-27 14:40:56 · 268 阅读 · 0 评论 -
排序算法——希尔排序
1.希尔排序是什么?希尔排序(Shell’s Sort)是插入排序的一种,第一个突破O(n2)的排序算法,是直接插入排序算法的一种更高效的改进版本。2.描述希尔排序算法的原理如下:将数列按某个增量seq分成若干组(初次取序列的一半为增量,以后每次减半,直到增量为1);A[0],A[seq],D[2*seq],……A[1],A[seq+1],D[2*seq+1],………… A[d-1],A[2*seq-1,D[3*seq-1],……对步骤一中的全部分组进行插入排序;增量.原创 2021-08-27 11:22:11 · 135 阅读 · 0 评论 -
排序算法——插入排序
1.插入排序是什么?插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。2.描述插入排序算法的原理如下:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素A,在已经排序的元素序列S中从后向前扫描;若元素S[i.原创 2021-08-26 18:32:22 · 297 阅读 · 0 评论 -
排序算法——选择排序
1.选择排序是什么?选择排序是一种简单直观的排序算法。它的工作原理:首先在序列中找到最小(大)元素,存放到排序序列的起始位置,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。2.描述选择排序算法的原理如下:初始状态:无序区为R[1…n],有序区为空;第i回排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1…i-1]和R(i…n)。该回排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换.原创 2021-08-26 18:18:53 · 119 阅读 · 0 评论 -
排序算法——冒泡排序
1.冒泡排序是什么?冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,依次比较两个相邻元素,如果顺序错误则进行交换。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列)。2.描述冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复.原创 2021-08-26 18:04:52 · 180 阅读 · 0 评论