- 博客(22)
- 收藏
- 关注
原创 C++智能指针详解
auto_ptrauto_ptr的实现机制就是保证堆内存的所有权唯一,一块堆内存只允许一个智能指针进行管理,当有新智能指针指向该内存块,就回收旧智能指针的所有权,这样实现的结果就是在拷贝构造或赋值的过程中,可能会导致旧智能指针的提前失效,要避免将其放入容器中,算法对容器进行操作时,很难避免STL内部对容器进行复制传递操作,易导致容器内部的一些元素被置空。
2023-12-18 23:06:32
73
原创 libevent事件循环库
libevent支持`select`(支持跨平台、性能开销大、可监听fd数量不能超过FD_SETSIZE)、`poll`(类似select,但无FD_SETSIZE的限制)、`epoll`(windows不支持、支持LT水平触发、ET边沿触发模式、性能快)、`iocp`(linux不支持、内部维护有线程池处理)等多种网络模型,还支持有其他网络模型
2023-04-24 16:31:27
425
原创 二叉查找树
二叉查找树(二叉搜索树)二叉查找树要么是一棵空树,要么满足:对于任意结点,若它的左子树不为空,则左子树上所有结点的权值均小于该结点的权值,若它的右子树不为空,则右子树上的所有结点的权值均大于该结点的权值,在二叉查找树中,任意结点的左子树和右子树都是二叉查找树,一般而言,二叉查找树上的结点的权值都是唯一的若中序遍历二叉查找树会得到一个从小到大的有序序列二叉查找树的插入和查找的效率相对较高,最坏情况(二叉查找树退化成链表,从根结点依次往左递减或往右递增)下时间复杂度为O(n),期望的时间复杂度为O(log
2021-07-22 12:44:16
236
原创 二叉树及遍历方法、哈夫曼编码
代码总结二叉树结点的子树个数为结点的度,度为0即没有孩子结点的结点称为叶子节点,规定根结点为树的第一层,节点的最大层数就是树的深度,在树上,从一个结点出发可以访问到其余的结点,并且一个结点到另一个结点的路径有且仅有一条二叉树的第 i 层最多有 2^(i-1) 个结点深度为 k 的二叉树最多有 2^k - 1 个结点记一颗二叉树结点数为 n ,度为 0,1,2的结点分别为 n0,n1,n2,则 n=n0+n1+n2,可知一颗二叉树有 n-1条边,度为0,1,2的结点分别可以衍生出0,1,2条边,.
2021-07-21 20:02:12
707
1
原创 线性结构(顺序表、链表、栈和队列)
代码总结顺序表可以随机访问,但删除和插入操作需要移动大量数据顺序表初始化、扩容、插入、查找、删除、遍历的操作#include <stdio.h>#include <stdlib.h>#define ERROR 0#define OK 1typedef struct Vector { int size; int length; int *data;} Vector;void init(Vector *vector,int size.
2021-07-21 19:53:04
102
原创 排序算法思路整理
排序算法思路整理个人理解,主要是给自己看的,文字较为通俗,见谅是否稳定:是否会改变相同元素的相对顺序冒泡排序(稳定)思路 :以升序为例,从第一个元素开始,与下一个元素做比较,如果前一个元素大于后一个元素,则进行交换,否则直接++,每次大的元素做交换往后移,则第一趟遍历下来,最大的元素,已经到了最后,重复操作,n个元素需要 n-1 趟的遍历就会完全有序。void Bubblesort(int *arr,int len){ int tmp=0; for(int i=0;i<le
2020-10-02 22:32:52
331
原创 BF,KMP
BF,KMPBF和KMP算法都是针对于字符串的操作,是用于字符串匹配的,从主串中查找有无子串的存在,若匹配成功,返回主串中子串首元素的下标,匹配失败返回-1BF算法时间复杂度 :O(mn)BF算法属于一种暴力破解的算法,穷举所有可能来进行匹配,在其算法过程中存在回溯,这很影响算法效率,因此实际运用情况很少,更多选择其他算法,如KMPBF算法是通过循环,从主串的第一个元素开始,与子串的第一个元素进行匹配,若匹配成功,则让主串的第二个元素与子串的第二个元素进行匹配,依次类推匹配,若匹配失败,则让主串的
2020-10-01 23:14:55
101
原创 进程间通讯(IPC)——消息队列
消息:可以简单理解为类型+数据消息类型需大于等于1,0代表着不区分消息类型,也可以认为是任何类型struct mess{ long int type;//>=1 ...//存储的数据}消息队列在同一类型上的消息传递符合先进先出的规定,对于整个消息队列而言,类优先级队列引用头文件#include <sys/msg.h>消息队列的使用:创建:int msgget( ket_t )key , int flag);返回值为内核对象的标识符,即所创建的消息队列的标识符,
2020-08-17 22:36:07
150
原创 静态库与共享库简单介绍
库文件:预先编译好的方法的集合,简单说是指某些功能代码的集合(库文件中不允许包含main函数)静态库:指在链接阶段直接将库中的内容直接合并到最终的可执行文件中静态库是功能代码编译完成后中间文件的集合,静态库所生成的可执行文件并不依赖于库文件所执行静态库的生成命令:1.先编译生成.o文件gcc -c *.c2.生成库命令ar crv libXXXX.a *.o (XXXX代表库名)(c 创建 r 把方法放入库中 v 显示详细过程<可不加>)共
2020-07-25 22:54:27
212
原创 简单实现一个通用内存池
简述通用内存池:开辟内存系统会从用户态切换到内核态再开辟内存,所以频繁的开辟,释放内存会给我们带来外碎片和效率降低的问题,故而基于此提出了内存池的概念,在真正使用内存之前,先申请开辟一个很大的内存块作为备用(内存池),然后当需要使用时,再从该大内存块(内存池)中分配一块内存来使用,当这块内存用完后再还给内存池,如果使用时内存池的内存块不够就再重新申请一块大的内存块,这在一定程度上很大的解决了外碎片...
2019-12-18 23:45:23
415
原创 基于数字处理的部分总结
关于数字处理,例如计算位数,以及输出每位的数字,首先即是学会 “丢弃高位” 和 “丢弃低位”。例:给出一个正整数1,求出它是几位数 2,顺序输出各位数字 3,逆序输出各位数字c语言中,整数除以整数的结果必然为整数,如15/10=1,31/5=6 ,因此若是给定的正整数为n,我们可以用n/10来丢弃个位,直至当n==0时,丢弃了几次个位,do while循环了几次,n...
2019-04-14 19:13:21
219
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人