发布了文章2020-07-11
在平时的分析当中,经常会碰到PE结构的文件,虽然 010 Editor 等工具会提供一个模板,把各个部分都详细的标记出来,但是在调试的时候,经常会需要在 VS 等程序框中进行调试,所以,就需要对PE结构有一定的了解,才能够快速定位到自己想要的地方。
发布了文章2020-03-10
进制的本质就是查表,与各种的转换没有任何关系,并不是说计算八进制,就把它转为十进制计算后再转回八进制,这种思想本来就是错误的,进制的本质就是写表和查表,我们之所以对十进制的特别熟悉,就是因为我们把十进制相关的表记住了,并不是因为十进制就是进制的基础。
发布了文章2020-02-15
在c语言中,数组必须是静态的,也就是在定义的时候必须明确数组的大小,在根本上来说,这个是堆栈提升的原因,只有在数组的大小确定的时候,才能明确堆栈到底要提升多少,如果数组的大小是动态变化的,就极容易发生缓冲区溢出;而且c语言也不具备Java等语言中静态分...
发布了文章2020-02-15
中间的一小段没有意义的汇编语言是为了方便设置断点,为后面的调试做好铺垫,因为有时会碰到找不到断点位置的情况,使用这个方法,可以在找不到断点的时候向后执行一次,而不破坏我们想调试的程序当前的堆栈状态,这里对main函数和sum函数的效果是类似的,这里直接跟...
发布了文章2020-02-08
文章来源:[链接] 使用递归来实现的,逻辑比较简单,也不是太复杂的东西,直接上代码了 如果需要下载代码,请移步至文末 代码:Github 文章首发公众号和个人博客 公众号:无心的梦呓(wuxinmengyi) 博客:[链接]
发布了文章2020-02-08
文章来源:[链接] 二分查找在平时的生活中也挺常用的,比如说以前玩的猜数游戏,每次都取中间数,然后得知是大了,还是小了,这个例子也就是二分查找。 比如下面的这个例子,要查找有没有数值19,其中low和high是查找的区间的下标,mid是查找区域的中间值的下标。 二...
发布了文章2020-02-07
文章来源:[链接] Nginx程序架构图如下 后面就先按照这个图所展示出来的内容对Nginx的架构进行一次梳理,文中所涉及到的内容,主要都是针对Linux系统的。 最上面的Master进程是管理员直接控制的,也只有Master进行接受管理员信号,一个Master用户可以fork多个Worker...
发布了文章2020-02-06
前面两篇文章说了时间复杂度为O(n2)的冒泡排序、插入排序和选择排序;也说了时间复杂度为O(nlogn)的归并排序和快速排序;这次来说一下时间复杂度为O(n)的桶排序、计数排序和基数排序,由于它们的时间复杂度是线性的,所以它们也叫做线性排序(Linear sort),之所以...
发布了文章2020-02-05
文章来源:[链接] 上一篇文章里说了归并排序和快速排序,它们的代码实现是非常相似的,只要理解了其中的具体实现,还是比较容易写出代码的。 归并排序 代码如下,需要下载代码的请移步至文末 快速排序 代码如下,需要下载代码的请移步至文末 代码: 归并排序:GitHub...
发布了文章2020-02-05
上一篇文章说了时间复杂度为O(n2)的冒泡、插入和选择三个排序方式,它们只适合在数据规模比较小的时候,接下来要说的是两个时间复杂度为O(nlogn)的算法,归并排序和快速排序,它们比较适合在大规模数据的时候使用,相比于前面的三个算法就更加常用。
发布了文章2020-02-04
在上一篇文章中,我们说了时间复杂度为 O(n2)的几个排序算法,冒泡排序、插入排序、选择排序,在理解上和实现上都没有太难的地方,这里在实现的时候,没有再自己实现数组或链表,而是使用了c语言自带的数组进行实现的,代码中没有太难理解的地方,就直接上代码了
发布了文章2020-02-04
排序算法有很多种,甚至有很多都完全没有听过,我们最常见,也最经典的就是:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。
发布了文章2020-02-03
在上一篇文章里说了递归,这里就使用其中的上楼梯问题来进行代码实现,在上一篇文章里也说过了中间会有重复计算的情况,这里我们使用一维动态数组来进行存储,一维数组的索引值就与楼梯层数相同,可以更加清晰的理解其中的含义,代码如下
发布了文章2020-02-03
递归在平时的生活中也是非常常用的,当你排队的时候需要知道自己排在第几个位置,而前面的人又比较多,你不能自己数出来,就可以询问你前一个人他的位置,在他的位置基础上加一便是你的位置,那如果他也不知道他的位置呢,就可以用同样的方法,继续向前询问,直到第...
发布了文章2020-02-02
在上一篇文章里,说了队列的相关内容,其中除了这篇文章说的顺序队列、链式队列和循环队列三个,还提到了阻塞队列和并发队列,这两个因为能力原因,还没能实现,这个坑等以后再来补。
发布了文章2020-02-01
队列,顾名思义,就是排的一条队,比如在买票的时候排的一条队伍,先来的先买,后来的后买,不允许插队,也就是先进先出的方式,栈是后进先出的方式。
发布了文章2020-02-01
之前在链表那一节说了单链表、双向链表和循环链表,前面已经把单链表和双向链表用代码实现过了,当时没有实现循环链表是在实现的过程中有一点没有想明白,今天在实现栈的时候突然相通了,就把这两条给补上。
发布了文章2020-01-31
文章来源:[链接] 在上一篇文章中说过,栈在实现上分为顺序栈和链式栈两种。 顺序栈: 用数组实现的栈 链式栈: 用链表实现的栈 因为栈就是一种“功能受限”的顺序表,所以在实现的时候,在之前数组和链表的基础上进行修改即可达到效果。 顺序栈 在实现顺序栈的时候,...
发布了文章2020-01-30
栈,可以用一个很常见的事物来说明,比如我们放了一摞盘子,如果我们想取走下面的某一个盘子,就必须先将上面的盘子挨个移走才可以,跟小时候玩的汉诺塔益智游戏是一样的结构, 也就是后放上去的先拿出来,先放进去的后拿出来。
发布了文章2020-01-29
原文链接:[链接] 这次完成了双向链表的代码实现,同时也发现了一处单链表中同样存在的错误,如果有兴趣可以回去再研究一下,文章链接如下:[链接] 双向链表相对于单链表来说,复杂之处在于对数据的插入和删除操作时,如何处理指针的指向关系,这个时候画图来帮助理...