- 博客(89)
- 资源 (3)
- 收藏
- 关注
原创 数据结构8:栈和队列实战详解
栈(Stack)和队列(Queue)是两种基本的数据结构,它们在计算机科学中有着广泛的应用。下面是它们的主要功能、应用范围以及C语言的简单实现代码。
2024-07-08 16:50:28
220
原创 数据结构7: 循环链表(约瑟夫环)的建立及C语言实现
循环链表和动态链表唯一不同在于它的首尾连接,这也注定了在使用循环链表时,附带的最多的操作就是遍历链表。在遍历的过程中,尤其要注意循环链表虽然首尾相连,但并不表示该链表没有第一个节点和最后一个结点。所以,不要随意改变头指针的指向。
2024-07-08 16:46:06
308
原创 数据结构5:静态链表的基本操作及c语言实现
逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成的链表称为静态链表。静态链表和动态链表的区别:静态链表限制了数据元素存放的位置范围;动态链表是整个内存空间。
2024-06-20 15:10:00
761
2
原创 数据结构4:单链表的基本操作及c语言实现
链式存储的数据元素在物理结构没有限制,当内存空间中没有足够大的连续的内存空间供顺序表使用时,可能使用链表能解决问题。(链表每次申请的都是单个数据元素的存储空间,可以利用上一些内存碎片)链表中结点之间采用指针进行链接,当对链表中的数据元素实行插入或者删除操作时,只需要改变指针的指向,无需像顺序表那样移动插入或删除位置的后续元素,简单快捷。链表和顺序表相比,不足之处在于,当做遍历操作时,由于链表中结点的物理位置不相邻,使得计算机查找起来相比较顺序表,速度要慢。
2024-06-20 14:52:03
954
原创 数据结构3:线性表及顺序表存储结构(c语言实现)
线性表是数据结构中最简单的数据存储结构,可以理解为“线性的表”。线性,是说数据在逻辑结构上具有线性关系。将具有线性关系的数据存储到计算机中所使用的存储结构称为线性表。线性关系指的是数据一个挨着一个,总体呈线性分布。就好比“老鹰捉小鸡”游戏中,小鸡们全都手拉着手,它们之间的关系就可以称为线性关系。换句话说,线性表中的数据在逻辑结构上相互挨着(手牵手),中间没有空隙。每个数据元素,在它的前面可以找到唯一一个数据和它挨着,后面也只有一个数据和它挨着。
2024-06-20 14:39:44
661
原创 如何处理缓存失效、缓存穿透、缓存并发等问题
比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。出现场景:指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。出现场景:当网站并发访问高,一个缓存如果失效,可能出现多个进程同时查询DB,同时设置缓存的情况,如果并发确实很大,这也可能造成DB压力过大,还有缓存频繁更新的问题。
2024-05-30 16:04:39
300
原创 Visual studio 2022代码出现绿色波浪线
2:【配置属性】-->【C/C++】-->【常规】-->【警告等级-关闭所有警告(/W0)】和【SDL检查-->否(/sdl-)】1:【工具】-->【文本编辑器】-->【C/C++】-->【禁用Code Analysis波浪线设置为true】1:在工程项目右击打开【属性页】
2024-03-22 22:12:27
1978
原创 Wireshark网络封包分析工具介绍+过滤器表达式语法
wireshark的过滤项是“协议“+”.“+”协议字段”的模式。比如ip.addr == 192.168.1.1,这条表达式中ip.addr是过滤项、==是过滤关系,192.168.1.1是过滤值(整条表达示的意思是找出所有ip协议中源或目标ip、等于、192.168.1.1的数据包)冒号前的英文是协议字段的名称;显示过滤器作用在wireshark捕获数据包之后,依据显示过滤器表达式,对捕捉到的数据包依据协议或包的内容进行过滤,从已捕获的所有数据包中显示出符合条件的数据包,隐藏不符合条件的数据包。
2023-02-17 21:30:27
1367
原创 Qt项目实战笔记--从零开始搭建库存管理系统(六)使用QSqlTableModel实现数据的增删改查
Qt项目实战笔记--从零开始搭建库存管理系统(五)使用QSqlTableModel实现数据的增删改查
2023-02-03 22:14:06
1918
原创 Linux下c语言多线程编程
两条线程看谁先抢到这个锁,也是竞争在抢锁,如果是th1先抢到,那锁就是th1的了,拿到锁的线程就很自私,接下来锁里面的代码就是th1自己一个人的,th2就不能来读这段代码了,th2没抢到锁的话它自己是不会去自己加个锁的,th2只能靠边站了,等th1先走完了锁里的代码,然后解锁了,再轮th2,加锁可以保证两条线程不会去抢着读数据,导致结果出错。CPU就立刻去执行剩下的线程二,直到执行结束。锁初始化函数有两个参数,第一个参数就是我们定义的锁,第二个参数是互斥锁的属性,写NULL就可以了,代表默认的快速互斥锁。
2023-01-31 14:32:52
727
原创 剖析Linux操作系统01:基本概述
3.1.1 进程管理3.1.2 内存管理3.1.3 文件管理3.1.4 信号处理3.1.5 进程间通信3.1.6 网络通信。
2023-01-31 13:53:30
143
原创 一篇20000个字精通Linux套接字编程
我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分。网络数据流的顺序:先发出低地址的数据,后发出高地址的数据。TCP/IP协议规定,网络数据流应采用大端字节序(低地址高字节)。如果本地主机是小端字节序的,则需要考虑网络字节序和主机字节序的转换问题。为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。// 本地字节序转网络字节序(IP)// 本地字节序转网络字节序(Port)
2023-01-28 19:21:02
263
原创 ovs原理与实践
相比于其它虚拟交换机/网桥(例如docker0和普通的linux bridge),ovs有着更加丰富的功能和生态,目前在openstack和kubernetes容器网络(ovn-kubernetes、kube-ovn)都能看到它的身影。本文仅仅简单介绍了ovs的基本原理和单机使用,后续会更新ovs跨主机隧道通信和ovn/ovs等内容,敬请期待。
2023-01-14 22:24:47
2958
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人