自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 UDP/TCP协议全解

同时,UDP是通过UDP首部中设置目的端口号来寻找目标主机,然后对目的端口的所有主机进行数据传输(TCP也是通过目的端口寻找目标主机,但找到一众目标主机后只能与其中之一进行连接),所以可以通过端口号一次性找到多台目标主机(如下图,主机A要向目的网络的所有端口为711的主机发送消息)此时数据相加的结果,与取反以后的检验和相加,应该正好为全1(数据为0的地方,检验和肯定为1;如果缓冲区域大小为3000字节,那么滑动窗口大小为3000字节,当被占满以后处理了2000字节,此时的滑动窗口大小为2000字节。

2025-06-01 23:29:57 1144

原创 Linux基本指令/下

你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆(对应外壳程序统称)转达你的意思给⼩花,⽽我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使⽤的bash(一个具体的外壳程序,bash是其中之一)。该目录保存的是各个用户的显示器输出文件,0代表的是第一位连接上服务器的用户的输出文件,1代表第二位;,在对某个文件进行完某一个操作以后,会把操作完的文件递交到管道后所跟的操作,然后进行一步一步的操作,最后输出最后所有操作结束以后的内容。

2025-05-31 23:19:33 2035

原创 Linux基本指令/上

一些常见的快捷键:alt + enter 全屏切换ctrl + shift + c 复制ctrl + shift + v 黏贴ctrl + c 终止操作(出现异常情况时,可以不断使用该快捷键让其停止下来)一些常用的功能代码:pwd 打印所处的路径clear 清屏whoami 打印用户名。

2025-05-28 16:16:44 967

原创 Linux环境搭建

Linux不同版本技术向版本:内核版本商业向版本:ubuntu、kail、centos/redhat等……内核版本名称所传递出的信息,假设有下面centos操作系统的版本号3:主版本号 对应centos710:次版本号,如果是偶数代表的是稳定版本,如果是奇数代表的是测试版本(release、debug的区别)0:修订次数,代表版本发布后,bug出现后的修订次数957.21.3:补丁编号,指的是版本推出以后为了优化所打的补丁。

2025-05-28 15:11:12 649

原创 mySQL复习(中)

视图类似于把我们查询出来的结果保存下来,并把结果创建出一张新表格式:SELECT ……BEGINEND $$DELIMITER;存储过程指的是将某一段select过程存储下来,而不是数据库要通过硬件存储什么内容;存储过程我们可以视作是创建一个函数,函数体是对数据库进行增删改查CREATE PROCEDURE get_clients(): 将一个select过程存储起来,封装成一个名为 get_clients() 的函数(函数可以有参数)BEGIN END :两个关键字之间的内容为函数体。

2025-05-26 11:15:41 938

原创 排序复习/下(C语言版)

3.cur从找大变成找小,大的cur往后走prev不动(由于每次肯定cur先走,所以prev的限制是比较容易的),找到小的让prev先++,然后进行位置交换,此时就类似于把大于key的值翻滚往后移动。2.left、right位置的值已经交换过数对,right不断找小一直没找到,与left相遇后由于前一次left、right(新一次找小开始的位置)的交换,当前left所指向的值依旧小于key值。4.需要创建一个temp数组进行排序(例如2个数的区间,小的先放进temp,再放大的,自然排序完成了。

2025-05-19 23:57:44 1127

原创 排序复习/上(C语言版)

排序思想:以上图为例,先把end下标后面一个元素(假设为tmp)保存下来,然后依次比较end下标元素和tmp大小,如果不合适就把从end往后覆盖1位,直到tmp到了合适的位置,把保存下来的值覆盖原来end+1下标元素(这样end+1下标元素才不会在数组中重复两次)最后一次排序(gap == 1),每个数都跳得很慢,但基本上都不怎么需要动了,都可以break掉。最坏情况下第一趟预排序的消耗:逆序,(1+2)* n / 3 = n (每组的当中元素向前移动1位,后一个元素向前移动2位,总共有n/3组)

2025-05-19 23:18:15 1052

原创 二叉树复习(C语言版)

前序:根 左子树 右子树(先访问根结点,再访问左子树,再访问右子树)中序:左子树 根 右子树(先访问左子树,再访问根节点,再访问右子树)后序:左子树 右子树 根(先访问左子树,再访问右子树,再访问根节点)需要进行遍历的二叉树如上图所示。前序遍历就是把一整棵树看成是根节点+左子树+右子树,然后再把左子树的根节点看作是根节点+左子树+右子树(这也是为什么用递归来解决三种二叉树遍历),直到左右子树都为NULL时,往上返回。中序遍历、后序遍历就是访问的顺序更改了,依旧是有异曲同工之妙的。

2025-05-14 13:34:04 822

原创 leetcode二叉树相关题目复习(C语言版)

判断根节点、左节点与右节点的值是否相等,因为正向判断(即判断三值相等返回true)比较麻烦(不能根节点满足条件直接返回true,还需进行左右子树的判断),因此可以通过正难则反的思想,判断哪些情况不是单值二叉树。判断对称的办法:和判断相同类似,唯一的区别在于递归调用时,左子树和右子树进行比较,右子树和左子树进行比较(这边的左右子树指的是a、b子树的根节点后面所连接的左右子树)当左右子树的根节点相等时,可以通过判断以改根节点为子树的与subRoot是否相等,来判断在整棵树中是否存在subRoot一样的树。

2025-05-14 13:09:41 871

原创 堆复习(C语言版)

1.堆---数据结构---C++stl库中的priority_queue2.堆排序3.topK问题4.堆排序、topK的时间复杂度问题。

2025-05-12 22:53:48 1180

原创 栈和队列复习(C语言版)

所以非常重要!!!

2025-05-12 22:04:41 596

原创 二叉树遍历(C语言版)

左子树可以通过root->left = Create(s, i)得到,右子树可以通过root->right = Create(s, i)得到,创建完整棵树(子树)以后,返回root(整棵树/整棵子树的根节点);由于递归的特性,这边得到的不是单一左节点or右节点,而是一整个子树。此处需要注意的是,在主函数传参时,要传下标的地址,不然递归时会出现下标没有被保存下来的情况。把每个结点看作是子树的根节点,以根左右的顺序创建一整棵二叉树。前序遍历创建树,中序遍历把创建出来的二叉树的结点打印出来。

2025-04-27 21:02:29 294

原创 leetcode背包问题拓展(C++)

选str[i]:假设str[i]的0个数为a,1个数为b,那么 dp[i][j][k] = dp[i-1][j-a][k-b](分析如下图所示),这边要的是字符串个数,所以还需要在整个式子后面 + 1。综上所述,dp[i][j][k] = dp[i-1][j-group[i]][max(0,k-profit[i])]不选str[i]:0、1 的个数都没变,dp[i][j][k] = dp[i-1][j][k]不选i,员工数、利润都没变,dp[i][j][k] = dp[i-1][j][k]

2025-03-31 01:26:54 1002

原创 leetcode完全背包问题(C++)

完全背包问题是基于01背包问题的变形,所以请务必先学习完01背包问题,再来学习完全背包问题01背包问题与01背包最大的不同点,就在于完全背包问题中的物品可以选择无限多个,把无限多种情况浓缩成一种即能迎刃而解了。

2025-03-29 14:06:21 1134

原创 leetcode01背包问题(C++)

背包问题是什么?假设你有一个背包,挑选一些物品放入背包中,提问最大能挑出来的价值是多少物品、背包都有其属性,例如重量、大小还有价值……0-1背包问题:每个物品限制只有1个完全背包问题:每个物品有无穷多个背包有不必装满、必须装满2种情况撞石头,2和2撞没了,4和2撞只剩下2的一块,返回碰完以后最优解的石头重量图1:假设的运行过程,最后一块石头的大小是abcde组成的一个式子,和目标和那道题有相通点。

2025-03-29 02:47:58 852

原创 leetcode双指针(C++)

画图、数组划分(分割线)、固定数思维、逆向思维、(链表)环判断思想、快慢指针、抽屉原理、函数封装、左右指针向内夹逼、 单调性、排序双指针只是一种思想,可以把数组下标视为指针(1、2题),甚至可以把某一个数字作为指针(3题)C++特殊用法:在函数中,return {X,Y} 就相当于返回了一个有2个元素的数组,return { } 就相当于返回了一个空数组,return{X,Y,Z}就相当于返回了一个有3个元素的数组。

2025-03-17 10:41:26 942

原创 mySQL复习(上)

【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!_哔哩哔哩_bilibili课程所需资料:链接:https://pan.baidu.com/s/1xDsDWFLiRITYTT6HoFb7Tw提取码:s5iz关系型(RDBMS)和非关系型(NoSQL)前者是我们接下来会学习的,后者即没有表或者关系(例如在关系型中,每个产品都会有个价格;然而在非关系型中,产品与价格是拆分来来的)。本课程使用的是mySQL,安装略(安装教程视频里有)。

2025-02-27 21:34:44 1032 1

原创 计算机网络第二章(物理层)课程复习

本文是对计算机网络课程的系统性复习,参考了课堂PPT、计算机网络(第7版,谢希仁编著)、王道考研B站公开课以及考研指导复习书。下图是物理层的学习内容,在第一章复习时就已经讲解完毕了,本文将会略过(下图也说明了,操作是在物理层进行的)。

2024-12-13 15:56:11 1134

原创 计算机网络第一章课程复习

本文是对计算机网络课程的系统性复习,参考了课堂PPT、计算机网络(第7版,谢希仁编著)、王道考研B站公开课以及考研指导复习书。

2024-12-10 17:47:03 854

原创 存储体系结构以及局部性原理基础

60个人住在度假村,30个人关系比较好,房间连在一块的(顺序表内存中的体现),另外30个人关系差,房间都没有安排在一块(链表内存中的体现)。此时有辆可以承载20人大巴车(缓存),那么对于30个关系好的,只要给其中的第一个打个电话,说车到了,那么第一个人就能去找旁边的那个人一起去坐车。像是笔者在做ppt时,如果没有及时保存到硬盘中,电脑突然关机了,那么ppt所做的内容重新开机以后就不见了。这是因为,没有保存到硬盘以前,ppt的内容只存储在内存中;(这说明一定要及时保存文件!相反的,如果没有访问到,叫。

2024-10-19 17:17:18 309

原创 复杂度分析复习(C语言版)

int main()//语句1int x = 10;i < n;++i)++x;//语句2return 0;在上文中,笔者已经提到:问题规模的大小会影响时间复杂度。而C语言自带的clock函数就是为了搞清楚代码语句之间的用时(例如上述代码,clock函数用来计算从语句1到语句2所花费的时间)。打印出来的结果如下所示大O符号:是用于描述函数渐近行为的数学符号。(本质:计算时间复杂度属于哪个量级)用常数1取代运行时间中所有的加法常数在修改后的运行次数函数中,只保留最高阶数。

2024-10-07 20:55:07 781

原创 leetcode第189题:轮转数组(C语言版)

用 n 表示数组的长度,我们遍历原数组,将原数组下标为 i 的元素放至新数组下标为 (i+k)modn 的位置,最后将新数组拷贝至原数组即可。时间复杂度:需要用k次循环,里面套一层N-1次循环,最后循环k*(N-1)次;最坏结果中,k值为N-1,此时时间复杂度为O(N^2)。保存数组最后一个元素,然后数组全体元素后移一位,把保存的最后一个元素存放到数组的第一个位置,重复这一操作,直到执行完了k次。空间复杂度:未使用新开辟的空间,空间复杂度为O(1)。空间复杂度:未使用新开辟的空间,空间复杂度为O(1)。

2024-10-06 18:00:00 277 2

原创 leetcode面试题17.04:消失的数字(C语言版)

通过异或操作符号,相同的值为0,不相同的值为1;因为有 a^a = 0 已经 0^a = a 这两条性质,第一次遍历循环把数组全部的元素异或,第二次遍历循环再把numSize大小的元素异或,那么就可以找到只出现了一次的数字,即为消失的数字。时间复杂度分析:两次循环,结果为O(N)。时间复杂度分析:冒泡排序的时间复杂度为O(N^2),qsort排序时间复杂度为O(N*logN)。因此该思路可行,同时没有溢出风险,是最优解。先排序,再依次查找,如果下一个值不等于前一个+1,那么下一个值就是消失数字。

2024-10-05 21:38:14 526

原创 上海市高等学校信息技术水平考试 C程序设计(2021A场)全解

在顺序查找法中,如果要从n个学生中找到某个特定的学生信息,最坏的情况是这个学生是最后一个被比较的,这时需要比较n次。但是,如果学生是均匀分布的,那么平均来说,你会在列表的中间找到这个学生,也就是大约n/2次比较。k = i -- 含义:k = i = i - 1。2e-1 为 1.0^(-1)*2。

2024-09-21 22:21:06 545 1

原创 鹏哥C语言复习——函数栈帧的创建和销毁

在vs2013中,是其他函数调用了main函数。main函数是由 __tmainCRTStartup 调用,__tmainCRTStartup 是由 mainCRTStartup 调用的。(即如下图所示)因此,内存的栈区中应该先是在高地址处为 __tmainCRTStartup 和 mainCRTStartup 开辟空间;然后再调用到main函数,为其在较低地址处开辟空间;最后在main函数中调用其他函数,在低地址处为他们开辟空间。

2024-09-21 08:06:42 1819

原创 上海市高等学校信息技术水平考试 C程序设计(2020D场)全解

因此以B选项为例,由于B选项数组的每一行只有4列,1234四个字符就已经占满了,无处存放 '\0',因此出现了1234abcd的打印结果。在编程语言中,标识符是用户编程时使用的名字,变量、常量、函数、语句块都有名字。a为2,进入switch的default(类似于 else-if 语句中的 else),最后a的结果5。A选项 1 + 6 = 7,C选项 1 + 5 =6,因此结果为C。函数传参时,传的如果是数组名,那么传输的就是数组首元素地址。p指针初始化时,被赋予的是数组名,即数组的首元素地址。

2024-09-14 10:06:49 1135

原创 上海市高等学校信息技术水平考试 C程序设计(2020C场)全解

因此B选项中,就是把 p指针 所指向的存放a的空间数据赋值给了 q指针 所指向的存放b的空间数据。然后又打开了q包装盒,把复制完的数据A覆盖掉了q包装盒原本存放的数据B,因此此时的 b 变成了10。初始化时,p指针指向了存放a的空间,q指针指向了存放b的空间;而C选项中,只是把q包装盒里的数据B换成了数据A,此处是交换、交换、交换!C选项的操作,实际上就是把 q 指针从指向存放B的空间变为了指向存放A的空间,并没有修改a、b的数据。本题中,a为3,a==1的结果为0(假),因此最后的输出结果为D。

2024-09-05 17:49:30 1676

原创 上海市高等学校信息技术水平考试 C程序设计(2020B场)全解

答:对于整型数组,其元素都是整型,即使数组本身可以看作是一个指向整型的指针(例如arr[0]可以看作指针指向数组第一个元素),但因为想要通过函数来改变实参(scanf是库函数中的一员),那么就需要传整型数据的地址(&arr[0])。结构化编程提倡的是通过循环、条件判断等结构化的流程控制来管理程序的流程,这有助于保持程序的清晰和条理,也便于其他开发人员阅读和理解。而对于字符串数组来说,其元素都是指向字符的指针(例如 'a',实际上是指向a的指针),所以不需要再加上取地址操作了。因此B选项正确,C选项错误。

2024-09-03 17:28:12 1594

原创 leetcode第142题:环形链表 ||(C语言+引申问题全解)

slow一次走一步,fast一次走两步;相遇时搞个meet,再搞一个head,head和meet一起走,每次走一步;head、meet相遇处,即为结果。思路解释:当相遇时,slow走的路程:L+N;当相遇时,fast走的路程L+x*C+N。(x指fast走过的圈数,x>0)这时,可能有爱发问的读者有了疑惑:slow在1圈以内就能和fast相遇吗?答:of course。首先,slow和fast肯定能够相遇;若slow和fast相距M,那么随着两指针移动,M不断变小,直到变为0相遇。

2024-09-02 17:18:51 584

原创 leetcode第141题:环形链表(C语言+引申问题全解)

此处的。

2024-08-17 19:42:46 605 2

原创 单链表leetcode刷题/下(C语言版)

举个例子,链表A的1号结点与链表B的1号结点到最后一个结点一 一比较,找到相等的就直接返回;先定义两个指针,同时指向链表的首元结点,然后让fast指针向前先走k个结点。可以通过判断链表A和链表B的尾元结点是否相等,因为只要相交,极端情况下,两个链表的尾元结点都相等。被忽略的结点是属于长链表的,如果短链表的某个结点与长链表的被忽略的结点是相交的,那么短链表应该是更加长的那个,因此是矛盾的。然而,我们却可以先找到链表的中间结点,然后把中间结点的右边结点反转,然后比较首元结点和反转过后的第一个结点。

2024-08-15 17:02:03 1245

原创 双向链表复习(C语言版)

上述代码中,出现了大量函数,都有一个规律:即除了初始化函数外,传输的都是一级指针。这就是接口一致性。在项目的实际开发过程中,一会传个一级指针,一会传个二级指针,会增加代码的出错率,所以为了降低这个问题的出现概率,接口一致性一定是越高越好的。(当然,迫不得已的时候还是可以不管这个问题的。毕竟代码和我,有一个能跑就行)下班啦,下班啦!总算写完啦!

2024-08-14 21:46:55 1391

原创 单链表leetcode刷题/中(C语言版)

同时,因为存放数据小的链表和存放数据大的链表已经链接在一起了,所以只需要返回数据小的链表的首元结点,即可满足题目要求。通过尾插的办法,让原链表和复制结点组成的链表分开,将复制结点组成的链表变成一个新链表,返回新链表的首元结点,题目解决。创建一个新链表,比较两个原链表的结点val值大小,小的尾插到新链表中,然后比较当前结点val小的链表中的下一个结点和当前结点val大的链表的同一结点。遍历完原链表以后,让大的新链表的尾元结点的next置为NULL,然后将小的链表和大的链表链接起来。

2024-08-13 17:13:41 727

原创 单链表leetcode刷题/上(C语言版)

具体思路如下图所示。

2024-08-12 10:21:26 868

原创 单链表复习 (C语言版)

在函数当中,实际上pcur能直接看成pphead解引用了一次,即可以把所有的pcur看成是(*pphead),这就像是定义宏一样;这就像是传入了一个一级指针 int *a,然后在函数了假设变量int b = *a ,然后通过b的改变来改变传入进来的*a一样。而我们会在函数里使用到pcur = *pphead有两个原因,其一就是为了代码的可读性,其二就是为了让pphead指针一直指向首元结点。

2024-06-08 09:02:51 1015

原创 鹏哥C语言复习——const和static

这影响了变量的生命周期,生命周期变长,和程序的生命周期一样。在C89中,数组长度是不允许使用变量的,当我们将一个由const修饰的变量来表示数组长度,依旧会报错:应输入常量表达式。解引用p指针,修改其值,最后p指向的n变量地址里存放的值改变了,也就完成了改变n的值的效果。const 放在*的左边,限制的是*p,意思是不能通过p来改变p指向的对象的内容,但是p指针本身是可以被改变,它可以指向其他对象的地址。const 放在*的右边,限制的是p,意思是不能改变p本身的值,但是p指向的内容是可以通过p来改变的。

2024-06-03 14:48:38 670

原创 leetcode第2题:两数相加(C语言)

而新链表不断创建以后,用于创建链表的指针也后移了,因此我们。

2024-05-29 23:48:27 872

原创 鹏哥C语言复习——调试

当我们发现程序中存在问题的时候,那下一步就是找到问题并修复问题。这个找问题的过程叫做调试,英文叫debug(消灭bug)的意思。如果是无断点的调试,直接按F10即可从主函数开始调试。

2024-05-28 23:06:24 1264

原创 鹏哥C语言复习——程序的编译、链接和预处理

C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理阶段处理的。1 __FILE__ //进行编译的源文件2 __LINE__ //文件当前的行号3 __DATE__ //文件被编译的日期4 __TIME__ //文件被编译的时间5 __STDC__ //如果编译器遵循ANSI C(C语言标准),其值为1,否则未定义1是为了找到文件所在位置,2是指使用__LINE__语句的行号,不是所有编译器都遵循ANSI C(例如vscode2022)经过预处理以后,预定义符号已经替换成当前数据了。

2024-05-27 08:20:46 1153

原创 鹏哥C语言复习——文件

在这种情况下,由于第一行文本不足9(10 - 1)个字符,那么在这种情况下,只会读取第一行的5个字符(hello)以及换行(\n),然后第二行字符串直接跳过(不会跨行),存入'\0',如下图所示;而对于txt文件,是在硬盘里创建的,会永久保存在计算机中(注:先打开文件,再点击鼠标右键来创建txt文件,在编译器中即能可视化)fread函数与fwrite函数几乎是如出一辙的,因此如果存在一个文件,其中以二进制形式存放了5个元素(1,2,3,4,5),那么当我们要读取时,代码实现如下所示。

2024-05-27 08:19:15 755

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除