- 博客(21)
- 收藏
- 关注
原创 模拟银行转账死锁问题及解决
文章摘要:死锁是多线程环境中多个线程互相持有对方所需资源而导致的僵局状态,需要同时满足互斥、持有并等待、不可剥夺和循环等待四个条件。通过转账系统示例展示了死锁场景,并提出了两种解决方案:1. 使用std::lock()函数同时获取多个锁,避免部分加锁;2. 采用单例模式封装资源管理器,实现线程安全并破坏循环等待条件。最后总结了死锁处理的四种策略:预防、避免、检测与解除、忽略。
2025-09-21 08:00:00
698
原创 时间戳函数
本文介绍了Linux系统中的时间处理函数,主要包括time()、gettimeofday()和clock_gettime()等函数,用于获取不同精度的时间信息。重点分析了clock_gettime()支持的多种时钟类型及其特点,如系统实时时间(CLOCK_REALTIME)和单调时间(CLOCK_MONOTONIC)。此外,还介绍了时间转换函数(localtime/gmtime)、格式化函数(strftime)以及进程时间函数(clock/times)。文中提供了C语言示例代码,展示了如何安全地获取和转换时
2025-09-18 19:58:04
996
原创 平衡二叉搜索树--红黑树
红黑树是一种高效的自平衡二叉查找树,通过五个核心规则(节点着色、根节点和叶子节点为黑、红节点不连续、路径黑高相同)保证平衡性。其关键操作(查找、插入、删除)的时间复杂度均为O(logn)。实现时采用颜色标记和旋转操作(左旋/右旋)来维护平衡,插入和删除操作需根据不同情况(如叔叔节点颜色、节点分布模式LL/LR/RR/RL)进行相应调整。红黑树在动态数据场景中表现优异,比AVL树更适合频繁更新的应用。文中详细展示了C++实现代码,包括节点结构、旋转函数以及插入删除的调整逻辑。
2025-07-09 19:01:14
593
原创 linux问题总结
文章摘要: 本文系统介绍了Linux系统编程的核心知识点,包括文件管理、进程线程、网络编程和Shell脚本等内容。在文件系统部分,详细说明了Linux目录结构、文件权限设置及常用操作命令。进程管理涵盖进程复制(fork)、僵死进程处理及进程间通信机制(管道、消息队列等)。线程章节重点讲解了线程同步方法(互斥锁、信号量)及线程安全实现。网络编程部分深入分析了TCP/IP协议的三次握手/四次挥手原理,对比了TCP与UDP差异,并介绍了I/O复用技术(select/poll/epoll)。此外还涉及静态/动态库的
2025-06-11 19:45:44
644
1
原创 平衡二叉搜索树——AVL树
AVL树是一种自平衡二叉搜索树,由Adelson-Velskii和Landis提出,通过动态调整树结构确保任意节点的左右子树高度差不超过1。本文详细介绍了AVL树的实现方法,包括结构体设计、基本函数(初始化、插入、查找、删除等)和工具函数(获取高度、计算平衡因子)。重点阐述了四种旋转操作(LL、RR、LR、RL)的实现原理及其在维护平衡中的应用。文章提供了完整的C语言代码实现,包含递归和非递归两种版本,涉及节点插入后的平衡调整策略和删除操作的特殊处理,确保树始终保持平衡状态,保证操作时间复杂度为O(log
2025-05-27 16:09:27
304
原创 二叉搜索数——BST
二叉搜索树(BST)是一种有序的二叉树结构,具有以下性质:对于任意节点,其左子树的所有节点值均小于该节点的值,右子树的所有节点值均大于该节点的值。BST的实现包括结构体设计、主要函数(如插入、查找、删除、销毁等)以及遍历操作。插入节点时,通过比较值的大小找到合适位置;查找操作从根节点开始,根据目标值决定进入左或右子树;删除操作分为三种情况:无子节点、一个子节点和两个子节点,分别采用不同的处理方式。BST的中序遍历结果是一个升序序列,但若树不平衡,操作效率可能降至O(n)。实际应用中常使用平衡BST(如AVL
2025-05-18 13:17:15
826
原创 二叉树构建与遍历全解析
本文介绍了二叉树的构建和遍历方法。首先,通过单个序列(如前序、中序、后序)构建二叉树时,需使用特殊符号(如#)作为终止符,并注意递归调用时的指针问题,可通过C++引用操作符或静态成员解决。其次,利用两个序列(如前中序、后中序)构建二叉树时,前序或后序序列的第一个元素为根节点,中序序列用于确定左右子树。接着,详细讲解了二叉树的前序、中序、后序遍历的递归和非递归实现,非递归方法借助栈实现。最后,介绍了基于广度优先的层序遍历及其变种(正S与倒S遍历),通过队列或双栈实现。
2025-05-09 12:43:37
1094
原创 高精度运算
是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个20000位的数的和。这时,就要用到高精度算法了。
2024-11-17 08:30:00
1011
原创 手撕排序算法--归并排序
若arr[begin1]<arr[begin2],将begin1的数据存在临时数组中,begin++;(相反则重复begin2)。设置两个区间的起始指针,将两个数区间内的数值进行比价,小的存在临时数组中,依次比较,直到一个区间走完,将未走完的区间拷贝上去。也叫归并算法,是讲已将有序的序列合并在一起的操作。选取中间节点,将其一分为二,然后依次重复上诉操作。归并排序:创建一个临时数组存储归并的数组数据;
2024-08-31 11:33:25
362
1
原创 数据结构-------顺序表
1.顺序表与数组的区别1.顺序表与数组的区别1.顺序表底层为数组,对数组进行封装,实现了常用的增删查改等接口,就实现了顺序表。1.2 缺点:1.给定空间为有限大小,无法开辟新空间。2.空间给小不够用,给大容易造成空间浪费。2.动态顺序表2.1动态顺序表(按需申请)3.动态顺序表的实现。3.1创建动态顺序表。
2024-07-18 20:07:41
355
原创 C语言:动态内存函数(molloc calloc realloc free)
malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址.在内存的动态存储区中分配num个长度为size的连续空间,函数返回一个指向分配起始地址的指针;空间利用完成后要进行释放,不然很占运行空间,并且要将指针为空,不然会出现很多的野指针,这对代码运行会产生影响。2.原有空间不够大,在堆区重新找一块合适的空间使用,这样函数返回一个新的地址。例如:需要开辟一块40个字节大小的整形类型空间;
2024-07-07 22:42:50
1056
1
原创 PTA:幸运彩票
先确定彩票个数,利用循环将每张彩票数值存进。的话则只需将彩票上的数字分别存储,比较。中,将彩票数字一分为二,分别。,进行判断,相等则输出。
2024-04-13 18:45:00
961
1
原创 C:打印数组中数据的几种方法
题目:将一组数组中的内容打印出来,例如数组arr中存在一组数据----要将这组数据打印出来。第一种:传统做法,利用循环,设置计数器依次访问没个数组下标。
2023-12-09 23:00:00
3343
原创 c语言应用:商人的营销手段
srand函数是C语言中的种子函数,它的功能是生成一个随机数,并将其作为接下来的随机数中使用的种子参数。在C语言中,srand函数主要通过使用指定参数来设置随机数生成器的种子,从而将生成的随机数设置为完全不同的序列。通过rand来实现,但rand是一个为随机数(每次生成的都相同的几组数)。为了避免重复,引入time函数来实现随机数生成,它的返回值是从00:00:00 ,1970到现在所持的秒数。要求:输出该价目表,和用户所需花费的钱(购物满100解锁猜数字游戏),满30~100打九五折。
2023-11-02 20:29:43
180
1
原创 C 语言:猜数字游戏
题目:任意产生一个0--100的数字,规定猜的次数。不同猜中次数对应的结果不同。说明:srand:void srand(unsigned int seed)time:以时间作为种子;time函数返回时间戳;
2023-10-26 23:48:06
132
1
原创 C语言:求一组数据中的奇偶个数
问题:给定一个数字(代表数据多少),并将这些数据奇偶分类并计算个数和。总结:在遇到多组数据输出时要使用循环,判断时要用到分支。2.输入数据具体数值(使用循环)3.对数据进行判断(使用分支)1.输入数据多少(整形)
2023-10-26 17:28:23
1477
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅