- 博客(17)
- 收藏
- 关注
原创 linux高并发线程池实现
4)设置互斥锁属性,在上个版本中没有设置相应的属性,而在这个版本中将互斥锁的属性设置为PTHREAD_MUTEX_ERRORCHECK也就是检错锁,如果线程在不首先解除互斥锁的情况下尝试重新锁定该互斥锁,则返回错误,如果线程尝试解除的互斥锁已经由其他线程锁定,则返回错误,如果尝试解除的互斥锁未锁定,则返回错误,如果同一个线程请求同一个锁,则返回EDEADLK否则与这个PTHREAD_MUTEX_TIMED_NP属性动作相同保证了不会出现简单的死锁情况。给出部分函数,如果有需要源码,留言。......
2022-07-30 14:09:24
385
原创 linux线程同步(互斥锁,线程条件变量)高速缓存实现
图像上的生产者就是多个客户端的连入对服务器的请求,服务器将客户端的请求放入数据缓存,由于有多个客户端的请求,而请求是放在同一个数据缓存,如果多个客户端同时操作的是数据缓存的同一块内存,那么会导致一个请求被另一个请求覆盖存在资源竞争的关系,那么互斥锁将很好的解决这种问题,因为互斥锁可以协调线程同步,消费者的工作是对客户端请求的处理,同样也存在资源竞争的关系,那么互斥锁也将很好的解决这种问题。互斥锁的属性在创建锁的时候指定,当资源被某线程锁住的时候,其它的线程在试图加锁时表现将不同。......
2022-07-24 12:28:44
395
原创 两种高效的查找算法
目录:1:并行搜索2:二分查找二分查找的实现是建立在有序的数组之上的,只有有序的数组才能准确找到要查找元素在数组中的位置,所以在测试二分查找的正确性时要用有序的数组,并行搜索我们这做的是查找一个元素在数组中出现的次数,所以不用是一个有序的数组,这两种算法都很高效接下来就为大家介绍这两种算法。1:并行搜索,什么是并行顾名思义就是两个程序函数同时执行,在以往的算法中我们编写的函数在主函数中都是一个函数执行结束接着执行另外一个函数,而并行是在主函数中两个函数同时执行,那么怎么实现并行呢?这里就要引
2021-11-16 20:58:41
2307
原创 力扣 无重复字符的最长子串 c++
题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。在解答这个题目之前我还是先说一下我在写这道题时候的思路和想法,其实这道题也不怎么难我阅读题目不久以后就已经想到了解决方案,那我是怎么想的呢?对于我这种头脑简单的来说肯定想到的是暴力解决毕竟现在接触的算法不多能想到的也有限,那我是怎么解决的呢?因为要找最长无重复字串所以要做的是先把第一个字符保存起来...
2021-10-28 16:43:13
410
原创 力扣 寻找两个正序数组的中位数 C++
题目:给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。题目说明:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2关于这个题目我先给出自己的解法,因为现在我自己的段位不高很难想到什么高效的算法来解决这道题但是自己的解法也能解决这道题,只不过自己的解法比较暴力所以耗时也比较浪费空间,我也不甘堕落学习了别人高效的代码在下面也会给大家分享我对...
2021-10-26 19:34:57
3510
原创 力扣 两数相加
题目:给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。对题目的解释:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807在写这个题的时候其时自己也写了一种算法这种算法对于我这种没有接触过进位思想的人来说其实已经是最优解了,但是在最后提交代码的时候还是没有通过好像再通过三次测试就可以通过代码测试,但是为什...
2021-10-21 23:30:16
154
原创 二叉搜索树 的实现
什么是二叉搜索树?二叉搜索树有什么特性?二叉搜索树是怎样实现的?(1)二叉搜索树 又称二叉查找树、二叉排序树,顾名思义二叉搜索树的查找效率非常的高,而且二叉搜索树要满足二叉树的结构特性故每个根节点最多只有两个叶子节点。这的二叉搜索树和前面学的堆的结构也是相似的。...
2021-09-23 12:45:00
345
原创 栈实现企业级应用
1:栈实现迷宫求解 2:栈实现表达式求解1:迷宫求解迷宫求解的具体需求就是:小人从迷宫的入口进入,遍历地图从而找到出口从出口走出地图从而走出迷宫。迷宫求解的实现:在这将用到一种算法名叫回溯算法,而我们将用现在学的数据结构栈实现回溯算法。回溯算法:对一个包括有很多个结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的 算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续 搜索该节点外的其他尚未搜索的分支;如果发现该结点无法再搜索.
2021-09-15 15:20:43
123
原创 堆 数据结构的实现
什么是堆?堆有什么特性?堆是怎样实现的?1:堆不同于链表队列,因为链表队列是一种线性结构而堆是一种树状结构,堆有最大堆和最小堆两种。2:只有以下几种情况才符合最大堆的特性(1)每个父节点最多可以有两个子节点(2)根节点的值是所有堆节点中值的最大者,且每个父节点的值要比他子节点的值大(3)除了根节点没有兄弟节点,最后一个节点的左子节点可以没有兄弟节点,其他节点必须有兄弟节点如图:下图就不是最大堆:3:堆树状结构的实现我们可以将堆中节点的值保存在数组中,这样就可以..
2021-09-09 13:39:10
217
原创 队列的三个企业级应用
用队列实现五个企业级应用,分别为循环队列,任务队列,优先队列,以及一个队列的应用案例(高并发服务器中队列的应用)。1:循环队列(1)循环队列和一般队列的实现有所不同,循环队列可以实现队列中的元素出对以后继续向队列中插入元素,而一般队列进行元素出队以后就不能实现元素的继续入队只能重启程序才能进行元素的入队。(2)循环队列实现的具体思路:怎样才能实现循环队列?实现循环队列我们只需要让指向队尾的back在进行元素入队时当入队到最后一个元素又能指向对头(因为每进行一次元素的入队back就往后移动一个位置
2021-09-07 08:49:42
230
原创 队列 数据结构的实现
队列 实现的具体思路有两种:1:第一种队列数据结构的实现,相信学过顺序表的同学对队列数据结构的实现也很容易理解,因为第一种实现方法和顺序表实现方法具体思路差不多,都是运用了数组的思想方法来实现的,但是不同的是队列的元素插入不能在随意位置插入,因为队列遵循的是(先进先出的原则)。队列效果图的实现:(1)跟据上图队列实现的效果图我们因该想到先定义一个结构体,结构体中的成员有指向对头的成员(front)指向对尾的成员(end)保存元素的数组(queue),跟据以上分析我们不难得到一个结构体。代
2021-08-16 22:08:15
487
原创 双向链表的实现
具体分析:双向链表和单链表形式差不多都是链式结构,但是双向链表可以正向访问链表也可以逆向访问链表,所以定义的双向链表结构体和单链表结构体相似,只不过双向链表结构体中多了一个指针域,该指针域用来保存上一个节点的地址。双向链表效果图:1:有了双向链表的基本概念双向链表的定义就不怎么难了//创建一个双向链表typedef struct twoWayLinkList { int date; struct twoWayLinkList* next; //指向下一个节点 struct tw
2021-08-07 19:53:32
208
原创 循环链表的实现
循环链表的引入:有 10 个老年朋友按编号顺序 1,2,。。。,10 顺时针方向围成一圈。从 1 号开 始顺时针方向 1,2,。。。,9 报数,凡报数 9 者出列(显然,第一个出圈为 编号 9 者)。 最后一个出圈者的编号是多少?第 5 个出圈者编号是多少?为了解决以上问题特地使用循环链表。1:循环链表和单链表不同循环链表首尾相连,而单链表有头有尾,所以循环链表只是在单链表的基础上把单链表的头和尾相连起来(前提:在了解单链表的基础上才能对循环链表进行操作)。2:首先先定义一个结构体来表示一个
2021-08-07 13:12:53
649
原创 单链表的实现
对链表的理解:单链表由头节点,尾节点和中间的多个节点组成,每个节点由两中数据组成,一个为数据区域另一个为指针区域,数据区域用来保存存入的数据,指针区域用来保存下一个节点的地址,从而将多个节点连接成完整的链条(一环扣一环),头节点的数据区域不用存入数据,将最后一个节点的指针区域定义为空(NULL),以此作为最后一个节点。1 图示为:2 链表的初始化在实现将元素插入链表的前提下先将链表初始化才能实现链表元素的插入//初始化链表bool initLinkList(linkList*&a
2021-08-04 21:39:21
459
原创 c语言实现(推箱子游戏)
项目实现的具体方案:先安装VS2019,后安装画图工具Easyx,安装以后就可以将推箱子中的(人物,墙壁,箱子目的地,箱子)的图片加载到程序中显示出来。游戏的实现是通过程序读取键盘中输入的字母,后控制加载到程序中的人物图片的移动实现小人的移动,通过人物图片和地板图片交换位置实现人物的行走,如果人物前面是箱子图片,箱子图片前面是地板图片,则人物图片和箱子图片一起移动,直到箱子图片前面是箱子目的地图片则箱子图片将箱子目的地替换,从而实现将箱子推到箱子目的地上。这就是实现游戏的思路,程序中还有各种细节在下面进
2021-07-26 12:51:06
2130
原创 用顺序表模拟简单web服务器实现用户超时处理
具体实现方案:1:当有新的请求连接到服务器时,经过服务器频率限制模块判断,貌似恶意连接,则使用顺序表来保存此连接的超时数据,超时值用时间戳来表示时间戳是指格林威治时间1970年01月01日00分00秒(相当于北京时间1970年01月01日08时00分00秒)时至现在的总秒数,其结构体定义如下:struct Timeout { int fd; //每一次连接的整数编号 time_t timeout;//用超时时间戳来表示};2:自己设计一个顺序表 以下是自己对顺序表的浅薄认识(1)..
2021-07-20 21:48:50
196
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人