- 博客(30)
- 收藏
- 关注
原创 【C++】初识C++(一)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度 的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语 言。为了表达该语言与C语言的渊源关系,命名为C++。
2024-06-29 21:18:53
1158
1
原创 【Linux】初识操作系统
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。但是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。这里有三个身份,校长,老师,学生,校长想要学生的信息,让老师去收集,在这里校长就是决策者,老师就是执行者。
2024-06-27 16:18:53
532
原创 【Linux】gdb调试器
在Linux当中gcc/g++默认生成的可执行程序是release版本的,是不可被调试的。1)「list/l n」:显示从第n行开始的源代码,每次显示10行,若n未给出则默认从上次的位置往下显示.。5)「print/p 表达式」:打印表达式的值,通过表达式可以修改变量的值。6)「display 变量」:将变量加入常显示(每次停下来都显示它的值)。7)「display &变量」:将变量的地址加入常显示。4)「delete/d 编号」:删除指定编号的断点。4)「print/p &变量」:打印变量的地址。
2024-06-26 16:45:39
904
原创 【Linux】makefile与进度条小程序
对于依赖关系而言,: 左边为目标文件,: 右边为依赖文件依赖方法前需要有一个 tab ,为固定格式: 右边可以有多个依赖文件 ,: 右边通常被称为依赖文件列表对于 : 右边,目标文件对应的依赖文件列表可以为空 (例如 clean)makefile 默认执行第一组的依赖关系和依赖方法,对于第一组可以直接使用 make 执行,后面则需要 make + 目标文件。
2024-06-25 21:20:25
581
原创 【Linux】Linux编译器(gcc,g++)与动静态链接库
首先清楚一点,我们写的代码里面经常会用库函数,这些调用接口的方式是我们写的,但是这些库函数的底层实现不是我们写的,而这中间就有一个调用库的过程。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
2024-06-24 19:40:59
1076
原创 【Linux】Linux基础开发工具(yum)
yum工具在每次安装指定软件包的时候,都会检测源服务器上的软件包信息,为了便捷不用每次都去搜索软件包信息,因此使用 yum makecache将软件包信息缓存到本地,使用 yum clean all 清理老旧的缓存信息。因为yum是从服务器上下载RPM包,所以在下载时必须联网,可以通过ping指令判断当前云服务器是否联网。yum会自动卸载该软件,这时候敲“y”确认卸载,当出现“complete”字样时,说明卸载完成。就是因为有了该文件里面的下载链接,系统才会知道软件在哪里下载,系统只会承认此文件名。
2024-06-23 13:18:47
732
原创 【Linux】权限的概念
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。什么是shell: 从技术角度,Shell的最简单定义是:命令行解释器(command Interpreter)主要包含:对于shell的理解:对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作shell 对于Linux,有相同的作
2024-06-21 13:06:58
1174
2
原创 【Linux】基础指令(三)
安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail。系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
2024-06-19 15:08:10
1153
原创 【Linux】基础指令(二)
所以,输入重定向就是改变原先从键盘上读取数据的方式,改为从其他文件中读取数据,其实这里使用 cat test.txt 和 cat < test.txt 的效果是一样的,但是还是有些区别:第一个是通过命令行参数获得文件名,第二个是通过重定向获得文件名。cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。less 工具是对文件或其它输出进行分页显示的工具,应该说是linux查看文件内容的工具,功能强大。
2024-06-18 19:33:49
699
原创 【Linux】基础指令(一)
tab:自动补全,当指令忘记时,例如 mkdir,只输入了 mk,这时快速按两次 tab 就会列出和 mk 相关的指令,并保留输入。ctrl + x 为退出,ctrl + x 后会提示是否保存,y(保存),n(不保存),c(取消),然后按下回车 enter 退出。Linux的目录结构整体是一个多叉树,他的叶子结点一定是空目录或者非目录文件,路上节点一定是一个非空目录。对于目录,该命令列出该目录下的所有子目录与文件。Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
2024-06-14 11:11:05
1181
原创 【数据结构】排序(冒泡排序,快速排序)
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。中间的 key 值不用管,当前 key 值已经到了正确的位置。3.停止之后,left 开始走,如果 left 指向的元素小于key 指向的元素,则left++ ,如果指向元素大于key 指向的元素,则停止。
2024-05-15 22:02:53
925
原创 【数据结构】排序(选择排序,堆排序)
当begin 和maxi 的位置重合,那么begin 和mini 在交换的时候,就把最小值换到了 begin(maxi) 处,最大值被换走了。在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素。每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完。若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换。4. 稳定性:不稳定。
2024-05-15 12:56:25
314
原创 【数据结构】排序(直接插入排序,希尔排序)
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排 序算法是稳定的;直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
2024-05-15 00:04:47
954
原创 【数据结构】二叉树相关题目(2)
思路:每一层函数栈帧中都包括,如果 root 等于空,返回 false,如果调用相同的树为真,返回 true。每一层往下判断是否为相同的树。思路:先求出树的结点个数,开好数组之后进行后序遍历即可。思路:先求出树的结点个数,开好数组之后进行中序遍历即可。思路:先求出树的结点个数,开好数组之后进行前序遍历即可。思路:用求树深度的方式判断。
2024-05-04 19:22:46
230
原创 【数据结构】二叉树相关题目
时每一层函数的栈帧中存在这样的条件:p 为空,q 也为空,返回 true;p 或者 q 只有一个为空,返回 false;p 和 q 的 val 不等,返回 false;否则 p 和 q 的 val 是相等的才递归。两边同时遍历,边遍历边进行比较,完成遍历后返回真,否则为假。使用后序遍历的思想,先遍历,后调整。一棵树对称就是 它的左右子树呈。把左右看成两个独立的树。
2024-05-02 20:04:15
316
2
原创 【数据结构】二叉树的实现
而第二种情况是队列不为空,但在访问队头节点时访问到了 NULL,这时我们需要再次进行循环,若队列不为空,就进入循环逐个查找并删除队头的节点,若发现不为空的节点,说明节点间有 NULL 相隔,即该二叉树不是完全二叉树,返回false。设二叉树的根节点所在层数为 1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第 2 层上的节点,接着是第三层的节点,以此类推。若节点不为空,但节点的值不是我们要查找的值,就查找节点的左子树,如果查找的结果不为空,就返回该节点。
2024-05-02 18:25:40
40
2
原创 【数据结构】二叉树的结构与堆
堆删除的实质是删除堆顶元素,如果我们直接删除堆顶的元素,再将数据挪动,就会破坏堆的结构,所以这种方法并不可取;在这里选择的调整方法是:将根节点与它的孩子中的较小值交换,然后再将交换后的节点作为父节点继续与它的子节点交换,直到该节点小于它的子节点,或者成为叶节点。插入时从尾部插入,而是否为堆取决于子节点和父节点的关系,若为小堆则子节点要比父节点要大,否则就需要交换子节点和父节点,大堆则相反。换句话说,将根节点最大的堆叫做最大堆或大堆,根节点最小的堆叫做最小堆或小堆。,相反根节点始终大于子节点则称为。
2024-05-01 22:16:03
19
1
原创 【数据结构】二叉树概念与结构
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
2024-04-30 15:09:32
497
1
原创 【数据结构】堆的复杂度,堆排序和TOP-K问题
堆通常是一个可以被看作一个完全二叉树,满二叉树也可以看做一个完全二叉树,所以我们可以用满二叉树来证明。调整次数用N来表示,从倒数第二层开始调整(叶子节点不用调整)
2024-04-22 18:38:49
404
1
原创 【数据结构】栈与队列相关题目
队列大小是固定的,空间可以重复利用,当放置完最后一个数据后rear需要回到头部。,把有数据的队列的元素出到空队列直到只剩一个元素。再出栈剩下的那个数据,此时出栈数据就是栈顶数据。栈是先入后出,队列是先入先出,我们可以创建两个栈PushST,PopST,用来入队列和出队列。如果PopST中没数据则把PushST中数据导入到PopST,若有数据直接出栈。此题思路和栈很契合,遇到左括号压栈,遇到右括号就取栈顶元素匹配。因为队列是先进先出,栈是先进后出,所以我们可以创建两个队列,直接把数据放到PushST里。
2024-04-13 17:11:27
343
原创 【数据结构】队列的链表实现
这里注意,当队列里只有一个数据时,仅释放phead后ptail会变成野指针,所以这里多加一个判断,当队伍里只有一个数据时,phead和ptail都置空。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)因为队列是队尾入数据,队头出数据,在考虑到数组的头删效率比较低后,我们选择用链表来实现队列。因为单链表在尾插时比较麻烦,所以可以记录下队列的头和尾,以便尾插。入队列:进行插入操作的一端称为队尾。
2024-04-09 14:24:07
539
原创 【数据结构】顺序栈
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。
2024-03-28 13:38:18
362
1
原创 【数据结构】链表相关题目(2)
思路是先在原链表每个节点后面复制一个相同的节点,这样复制节点的random就是原节点random-->next,再断开复制节点即可。还是先用快慢指针,找到相遇点,存储下此点的下一个点作为。大体思路为先用快慢指针找。走,当两指针相遇时,就是环的。,找到相遇点后用一个指针从。,后用链表相交的方法即可。,然后让此点指向空作为。
2024-03-26 13:33:17
403
原创 【数据结构】 双向链表
在我们学习单链表的过程中,发现单链表有个,在单链表尾插时,需要找到尾节点。在单链表尾删时需要找到尾节点前一个节点。这里的时间复杂度都为O(N),而带头双向循环链表就完美的解决了这个问题。与单链表不同,双向链表多了一个prev指向了前面一个节点,最后尾也不指向NULL,而是指向了哨兵位。所以哨兵位的prev就直接能找到尾节点,简单且快速。
2024-03-14 17:27:01
931
1
原创 【数据结构】单链表相关题目
Q1:slow 和 fast一定会相遇么?A1一定会相遇,fast会先进环,假设slow进环时,slow和fast之间的距离是N,slow进环后,fast开始追击,slow每走1步,fast每走2步,他们之间距离每次会缩小1。追击过程中他们的距离变化:当fast每次走两步以上slow 和 fast能不能相遇?不一定,slow进环后,fast开始追击,slow每走1步,fast每走3步,他们之间距离每次会缩小2。
2024-03-06 17:23:27
711
1
原创 【数据结构】顺序表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。
2024-02-21 21:35:51
533
原创 【数据结构】空间复杂度
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用额外存储空间大小的量度。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因 此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。
2024-02-19 23:35:20
266
1
原创 【数据结构】时间复杂度
一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法 的时间复杂度。通过0对自身依次异或,将两个单独的数的异或后的结果找出,再通过结果将两个值分离开来,找到异或后结果的二进制序列,找出为1的位数(如果为1,则说明两个单独数在这个位不相同,可凭此将两个数分离),找到位数后,将按其他数的这个位数是否为1,还是为0分离,这就形成了两组数,在分别自身异或,最后剩下的就是单独数。
2024-02-19 02:29:37
1099
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人