- 博客(20)
- 收藏
- 关注
原创 按字典序排列字符串
呜呼!!!!!!好久没有刷编程题了,以致于今天看到一个按字典序排列的问题顿时无从下手,查阅资料后获得思路,对于最基本冒泡排序进行改进:其中交换部分改为交换字符串,并自定义比较字符串比较大小的函数。这也深化了这样一种观念,所有的排序无非就是两个关键部分:1:排序算法,2:排序规则。
2024-06-13 12:15:08
314
1
原创 双向循环链表,C语言实现
排序算法用基础的冒泡排序,基础操作是链表结点交换,这里我使用四个指针变量,简化了编程中可能的复杂逻辑思考, 这四个变量存储两个带交换结点的前一个和后一个结点,交换即使使得这两个结点的前一个和后一个交换。这里注意特殊情况是,待交换结点相邻。通过简化可使得程序精简,这里为了便于理解不做简化。head指针指向虚拟头节点,tail指向虚拟尾结点,这两个结点用于标识头尾。next指针指向后一个结点,prev指向前一个结点。今天某家公司笔试题,遇到了一个双向循环链表。定义双向循环链表的结构如下。
2023-12-13 21:10:00
574
原创 reactor编程模型+EPOLL服务器程序
今天学了下reactor编程模型,并用C语言在Linux上写了一个基于reactor事件驱动的服务器。在文末测试了两台客户机连接的情景,和预期结果一样。
2023-12-10 17:16:23
957
原创 飞机大战小游戏项目
部分界面显示文末附可执行程序。这是一个飞机大战小游戏项目。说起这个项目,还要从我大二时候说起,距今已经五年了。"现在再来看这个项目,感触很深。我是自动化专业的,当时没有系统学过计算机专业知识,只是有一门C语言的课,和老师提供的一个在控制台打印字符的函数,使用这两个基础知识,加上当时的热情,手攒(cuan,二声)了一个小游戏。虽然现在看来这些代码有很多不规范的地方。但是我还是能想起那时的喜悦。这个项目运行在windows 32位环境下,作者使用S2019可以正常编译运行该程序。
2023-12-08 13:38:13
463
原创 网络IO与select,poll,epoll
网络 IO,会涉及到两个阶段。阶段1:涉及到用户空间调用 IO 的进程或者线程,阶段2:涉及到内核空间的内核系统。比如发生 IO 操作 read 时,它会经历两个阶段:等待数据准备就绪,将数据从内核拷贝到进程或者线程中。
2023-12-08 11:50:50
959
原创 掘金币编程问题随笔
/首先我尝试了暴力解法,即每次要么选择当前位置的金币,更改深度,要么维持当前深度,继续前进。针对时间复杂度高的问题,采用了记忆化搜索,使用dp数组记录状态,避免重复访问。一个玩家从某一村庄出发,开始挖金币。已知,玩家只能向右或者向下走,不能向左走或者向右走。此外,还有一个数组,存储每个金币的深度。然后,我将暴力解法变成了循环实现。将n^2的空间复杂度 变成了 2*n。今天遇到了一个问题,因为好久没刷题了,导致不那么熟悉。例:a = [ 7 , 8 , 2 , 4 , 6],则玩家最多能获得3枚金币。
2023-11-30 22:22:19
555
转载 一个简单的webserver,详细讲解和代码实现
服务器 和 浏览器进行通信,传输层使用tcp协议,应用层,使用HTTP协议,浏览器。http模块: http.h http.c。向服务器发送http请求,服务器接受请求后,对请求内容进行解析,明确浏览器目的。1 需求分析:做个什么东西,实现什么功能,达到什么效果,解决什么问题。4 详细设计:设计每个模块的功能细节(文件,库,函数,数据类型,类)2 概要设计:技术选型,采用什么框架,主要的技术路线,大体结构。主模块启动服务器模块,服务器模块主要负责接受请求开线程。
2023-11-27 12:10:39
687
原创 力扣#23. 合并 K 个升序链表
这是two-ways-merge的一般情况,考虑使用一个小顶堆维护排序当前集合最小的元素所在节点的地址,实现上,涉及到自定义存储结构和比较规则,由于弹出最小元素挂到新链表后,需要找到链表的下一个节点,所以需要存储节点所在的链表下标。
2023-11-01 19:20:20
77
原创 海贼OJ#838. 2020年数据结构41题
首先啊,题目中距离D实际上可以变成以下的最大值问题:然后最小化D, 即变成:即需要能减少某两点之间的差值,才能使得这个表达式有新的最小值出现,那么只需要把a b c 三个数中最小值所在的队列中的元素弹出即可,然后使用新的队首元素重新计算上式,当某个队列为空时,结束循环。
2023-10-29 12:42:54
173
原创 海贼#236. 递归实现组合型枚举
定义一个递归函数sel(int least , int pos , int n , int m),代表从n个数中选择m个,pos表示当前位置可以用的最小数字是least,结束条件是pos == m,这样亦可保证字典序输出。
2023-10-28 16:39:29
89
原创 海贼#235. 递归实现指数型枚举
设计递归函数 p(int least , int pos , int n) ,代表pos位置可以用的最小值是least,可以用的最大值是n, 这样 程序如下:,递归终止条件是 可以用的最小值超过可以用的最大值。
2023-10-28 16:11:13
110
原创 打印二叉树(1)
突然想着怎么打印一颗二叉树,本来想用控制台输出,但是直觉告诉我那太麻烦了,于是我使用了easyx图形库。下面这段程序,首先随机生成一棵节点数为nums的二叉树,然后使用easyx图形库展示出来,开发工具VS2022。
2023-10-10 11:12:30
159
原创 打印圣诞树
然后,确定递归基,当前层数来到n层时,递归结束,打印树根部分。为了避免重复递归调用,当递归函数发现某一层操作之前已经做过,即这部分的树已经画过,就直接返回。接下来递归的画左树和右树。X的范围 [ 0, n*3+n], Y的范围 [ 0, n*6-1]今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。首先,准备一块字符数组,初始化为空格。使用递归的思路解决。除去树根的部分,圣诞树可以看作由基本部分。每个基本部分的左下角和右下角又是又上述基本组成。这里画了10层,牛牛应该开心了。
2023-09-24 21:02:22
367
原创 并查集与C++实现(一)
并查集是一种在集合间快速进行查找元素和合并集合的数据结构。使用若干个图结构来表示若干个集合,每个图表示一个集合,每个集合中都有一个代表元素,当集合进行合并和查找元素操作时,均使用此代表元素。合并两个集合,就是把一个集合的代表元素连接到另一个集合的代表元素,这里贪心地将集合较小的连接到较大的集合。查找两个元素是否在一个集合中,就是不断地查找它两所在集合的代表元素是否相等,如果是,就在,否则不在。在查找过程中,可以对图的结构进行调整使得图调整后更加扁平,以改善下一次查找的时间复杂度。
2023-09-21 18:43:36
130
原创 桶排序和C++实现
然后遍历待排序集合(这里选择数组为存储结构),每次得到一个元素按照其第一位(从右向左)的数值(0,1,2,3,4,5,6,7,8,9)将其扔进对应#(0,1,2,3,4,5,6,7,8,9)号桶里的队列里,遍历一次结束时,然后从0号桶开始,依次将每个桶里的数据放回到原待排集合里(直接覆盖),由于队列先进先出的性质,对于某个队列里最低位相同的那些数据,出队后不仅其顺序是非降序的,而且当前位相同的那些数据排序后仍然保持相对不变的次序。第i次循环时,按照第1位数值入桶,进行同样的操作。循环结束时,排序完成。
2023-09-20 13:48:59
86
原创 堆数据结构和C++实现
完全二叉树的一种存储方式是使用向量存储,这使得对于任意一个父节点和其左右孩子的访问变得容易,如果向量的下标从0开始,对于i位置的父节点,其左孩子下标为 2*i + 1 ,右孩子下标为 2*i +2 ,对于任意子节点,其父节点下标为(i-1)/2,当然,下标不能大于等于一个数,这个数就是二叉树节点的数目N。主函数中,初始化了一个容量为10的堆,然后企图将-1到-15共15个整数插入到堆中,最后企图获取堆中最大值,然后删除该最大值,这两个操作也分别进行15次。
2023-09-17 20:40:06
123
原创 快速排序算法和C++实现
使用两个指针left和right,分别指向待排序列首元素前一个位置和尾元素后一个位置,使用另一个指针i指向待排序列首元素,比较当前指针的值是否小于x,是则交换left+1和i的元素,这样#1部分扩充一个元素,i++;如果大于x,则交换right-1和i的元素,这样#3部分扩充一个元素。该算法维持了一个不变量,每次进入循环前,left以及左边部分是比x小的部分,right以及右边部分是大于x的部分,而left+1到righ-1t则是处于一种混沌的状态,大于小于等于都有可能,初始化时i指向了left+1位置;
2023-09-17 15:19:45
89
原创 给定一个序列,求该序列按顺序入栈时,所有合法的出栈序列
考虑使用回溯模拟这一操作过程,思路是,使用一个指针指向当前序列字符,准备一个栈,用来模拟入栈,准备一个队列,用来接收出栈元素,当指针指向字符末尾,也就是n时,说明所有字符都已经入栈完成,这是回溯结束,回溯结束时,栈和队列都有可能非空,栈非空时,将栈内元素弹出到队列末尾,然后依次出队得到出栈序列。note:对于指针当前指向的字符,有两种可能的操作:1,将其入栈;2,不入栈,此时弹出栈顶元素到队列,此时完成出栈操作。给定序列Si ,0
2023-09-16 14:02:28
535
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅