vim、gcc/g++、make/Makefile、yum、gdb

vim、gcc/g++、make/Makefile、yum、gdb

  • 一、Linux编辑器vim
    • 1、简介
    • 2、三种模式的概念
      • (1)正常/普通/命令模式(Normal mode)
      • (2)插入模式(Insert mode)
      • (3)末行/底行模式(last line mode)
    • 3、三种模式的切换
    • 4、正常/命令模式命令集
      • (1)插入模式
      • (2)移动光标
      • (3)删除文字
      • (4)复制
      • (5)替换
      • (6)撤销与还原
      • (7)更改
      • (8)显示与跳转至文件内容指定行
    • 5、vim末行模式命令集
      • (1)注意
      • (2)列出行号
      • (3)跳转至文件内容指定行
      • (4)查找字符
      • (5)保存文件
      • (6)离开vim
  • 二、Linux系统下的C/C++编译器gcc/g++
    • 1、注意
    • 2、编译器编译代码的过程
    • 3、 gcc使用格式
    • 4、选项
    • 5、预处理
      • (1)功能
      • (2)示例
    • 6、编译
      • (1)功能
      • (2)示例
    • 7、汇编
      • (1)功能
      • (2)示例
    • 8、链接
      • (1)功能
      • (2)示例
      • (3)注意
    • 9、函数库
      • (1)概念
      • (2)静态库
      • (3)动态库
  • 三、Linux项目自动化构建工具make/Makefile
    • 1、概念
    • 2、示例
    • 3、依赖关系
    • 4、依赖方法
    • 5、伪目标
    • 6、原理
    • 7、项目清理
  • 四、Linux 软件包管理器yum
    • 1、软件包
    • 2、查看软件包
      • (1)命令
      • (2)功能
      • (3)示例
    • 3、安装软件包
      • (1)命令
      • (2)说明
      • (3)注意
      • (4)示例
    • 4、卸载软件
      • (1)命令
      • (2)示例
  • 五、Linux调试器gdb
    • 1、说明
    • 2、使用格式
    • 3、调试命令
    • 4、示例

一、Linux编辑器vim

1、简介

  • vim有很多种模式,但此处只介绍3种,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。
  • 要查看所有的模式可以打开vim,在底行模式中直接输入 :help vim-modes。

2、三种模式的概念

(1)正常/普通/命令模式(Normal mode)

进入vim后的默认模式,可以控制屏幕光标的移动、将字符、字或行删除,移动复制某区段内容以及粘贴,切换为Insert mode 或者 last line mode。

(2)插入模式(Insert mode)

只有在Insert mode下,才可以做文字内容的输入。该模式是vim中用的最频繁的编辑模式。

(3)末行/底行模式(last line mode)

进行文件的保存与退出、文件替换、查找字符串、列出行号等操作。

3、三种模式的切换

在这里插入图片描述

4、正常/命令模式命令集

(1)插入模式

  • 【i】:从光标当前位置开始插入内容。
  • 【a】:从光标所在位置的下一个位置开始插入内容。
  • 【o】:插入新的一行,从行首开始输入文字。

(2)移动光标

  • vim可以直接用键盘上的上下左右键来移动光标,但正规的vim是用小写英文字母【h】、【j】、【k】、【l】,分别使光标左、下、上、右移一格。
  • 【$】:移动到光标所在行内容的尾部。
  • 【^】:移动到光标所在行内容的头部。
  • 【w】:光标移动到下个单词/字的头部。
  • 【e】:光标移动到下个单词/字的尾部。
  • 【b】:光标移动到上个单词/字的头部。
  • 【#l】:光标每次向后移动#个位置。
  • 【gg】:光标移动到文件内容的头部。
  • 【G】:光标移动到文件内容的尾部,即移动到文件内容的最后一行。
  • 【ctrl】+【b】:屏幕显示内容往后移动一页。
  • 【ctrl】+【f】:屏幕显示内容往前移动一页。
  • 【ctrl】+【u】:屏幕显示内容往后移动半页。
  • 【ctrl】+【d】:屏幕显示内容往前移动半页。

(3)删除文字

  • 【x】:每按一次,删除光标所在位置的一个字符。
  • 【#x】:删除光标所在位置后面(包括光标所在字符)的#个字符。
  • 【X】:大写的x,每按一次,删除光标所在位置前面的一个字符。
  • 【#X】:删除光标所在位置前面的#个字符,不包括光标所在位置的字符。
  • 【dd】:删除光标所在行。
  • 【#dd】:从光标所在行开始,删除#行,包括光标所在行。

(4)复制

  • 【yw】:将从光标所在位置到单词/字尾的字符复制到缓冲区中。
  • 【#yw】:复制#个单词/字到缓冲区中。
  • 【yy】:复制光标所在行内容到缓冲区中。
  • 【#yy】:复制光标所在行以及后面# - 1行的内容,总共#行的内容到缓冲区中。
  • 【p】:将缓冲区内的字符贴到光标所在位置处。
  • 注意:所有与y有关的复制命令都必须与p配合才能完成复制与粘贴功能。

(5)替换

  • 【r】:替换光标所在处的字符。
  • 【R】:替换光标所到之处的字符,直到按下【ESC】键为止。

(6)撤销与还原

  • 【u】:撤销。
  • 【ctrl + r】:还原。

(7)更改

  • 【cw】:删除光标所在处的单词/字到单词/字的尾部,然后进入插入模式,光标仍在输入cw前的位置处。
  • 【c#w】:删除光标所在处以及之后的#个单词/字到单词/字的尾部,然后进入插入模式,光标仍在输入c#w前的位置处。

(8)显示与跳转至文件内容指定行

  • 【ctrl】+【g】:列出文件内容总共有多少行,阅读到当前行占整个文件内容的百分比。
  • 【#G】:移动光标至文章的第#行行首。

5、vim末行模式命令集

(1)注意

  • 在使用末行模式之前,需先按【ESC】键确定已经处于正常模式,再按【:】即冒号,即可进入末行模式。

(2)列出行号

  • 【set nu】:在文件内容中的每一行前面列出行号。
  • 【set nonu】:取消在文件内容中的每一行前面列出行号。

(3)跳转至文件内容指定行

  • 【#】:在冒号后输入一个数字,再按回车键,光标就会跳转到该行。

(4)查找字符

  • 【/关键字】:先按【/】键,再输入想要寻找的字符,按【n】将向下查找。
  • 【n】:如果第一次查找的关键字不是想要的那个,可以一直按【n】往后查找,直到找到想要的关键字为止;如果文件内容内的关键字已经查找完,则会继续从文件内容的第一个(或者最后一个)关键字处继续查找。
  • 【?关键字】:先按【?】键,再输入想要查找的字符,按【n】将向上查找。

(5)保存文件

  • 【w】:在冒号后输入字母【w】,再按回车键,就可以将编辑完的文件内容保存起来。

(6)离开vim

  • 【q】:退出vim,如果无法离开vim,可以在【q】后跟一个【!】,即强制离开vim。
  • 【wq】:一般建议离开时,搭配【w】一起使用,这样在退出vim的时候还可以将编辑完的文件内容保存起来。

二、Linux系统下的C/C++编译器gcc/g++

1、注意

  • g++的使用方法和gcc的使用方法一样,这里只说明gcc。
  • gcc只能用来编译C语言代码,g++可以编译C语言代码也可以编译C++代码。

2、编译器编译代码的过程

  • 预处理:删除注释、宏定义替换、头文件展开、条件编译。
  • 编译:C/C++语言代码转换为汇编代码。
  • 汇编:使用汇编代码生成机器可以识别的可重定向二进制目标文件。
  • 链接:将多个.o/.obj文件合并形成一个可执行文件(.out/.exe文件)。

3、 gcc使用格式

gcc [选项] 要编译的文件 [选项] [目标文件]

4、选项

  • -E:让 gcc 编译器在预处理结束后停止编译过程,即只激活预处理,不生成文件,需要把它重定向到一个输出文件里面。
  • -S:让gcc 编译器在编译结束后停止编译过程,即使用语言代码生成汇编代码。
  • -c:让gcc 编译器在进行汇编结束后停止编译过程,即使用汇编代码生成二进制的目标代码。
  • -o:将文件内容输出到指定文件中,后面跟欲生成的目标文件的文件名。
  • -static:使生成的文件采用静态链接的方式进行链接,即链接静态库。
  • -g:生成调试信息,即生成DEBUG版本的可执行程序,GNU 调试器可利用该信息。
  • -shared:使生成的文件尽量使用动态库,因此,生成文件会比较小,但是需要系统有动态库。

5、预处理

(1)功能

  • 主要包括宏定义替换,头文件包含,条件编译语句处理,删除注释等等。
  • 预处理指令是以#号开头的代码行。

(2)示例

在这里插入图片描述

6、编译

(1)功能

gcc 编译器首先要检查代码的规范性、是否有语法错误等等,以确定代码实际要做的工作。在检查无误后,gcc 编译器将会把代码翻译成汇编语言。

(2)示例

在这里插入图片描述

7、汇编

(1)功能

把编译阶段生成的“.s”文件转换成目标文件,即生成的文件内容为二进制代码。

(2)示例

在这里插入图片描述

8、链接

(1)功能

  • 链接的功能其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。
  • 一般链接的过程有两种方式,一种是动态链接,需要有动态库;另一种是静态链接,需要有静态库。
  • gcc、g++默认形成的可执行程序采用的是动态链接的方式进行链接的。

(2)示例

在这里插入图片描述

(3)注意

  • 进行链接操作的机器可能因为没有静态库,而导致链接失败。
  • 动态链接必须使用.so动态库文件、静态链接必须使用.a静态库文件。
  • C语言静态库安装命令:sudo yum install -y glibc-static
  • C++语言静态库安装命令:sudo yum install -y libstdc++ -static

9、函数库

(1)概念

  • 在我们编写的C语言代码中,并没有定义printf函数的实现,且在包含的头文件stdio.h中,也只有该函数的声明,而没有定义函数的实现。
  • 系统把这些函数实现都写到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径/usr/lib下进行查找,也就是链接 libc.so.6 库文件,这样才能使用printf函数,这就是链接的作用。
  • 函数库一般分为静态库和动态库两种。

(2)静态库

在编译链接时,把库文件的代码全部加入到可执行文件中,虽然生成的文件比较大,但在运行时不再需要库文件了。静态库文件的后缀名一般为“.a”。

(3)动态库

与静态库相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库文件,即将库中我要的方法实现的地址填入我的可执行程序中,建立关联,这样可以节省系统的开销。动态库文件的后缀名一般为“.so”。

三、Linux项目自动化构建工具make/Makefile

1、概念

  • 在一个工程中,会有许多源文件,其按类型、功能、模块分别放在若干个目录中,我们可以在Makefile中定义一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作等等。
  • make/Makefile的功能就是自动化编译,一旦写好Makefile文件,只需要一个make命令,整个工程将会完全自动编译,极大地提高了软件开发的效率。
  • make是一个解释Makefile中指令的命令工具。即make是一条命令,Makefile是一个文件,它们两个搭配起来使用,才能够完成项目的自动化构建。

2、示例

在这里插入图片描述
在这里插入图片描述

3、依赖关系

  • 如果文件A的改变会影响到文件B,那么就称文件B依赖于文件A
  • 例如,上方代码中test:test.c和clean:都是依赖关系。

4、依赖方法

  • 如果文件B依赖于文件A,那么通过文件A得到文件B的方法,就是文件B依赖于文件A的依赖方法。
  • 例如,上方代码中gcc test.c -o test和rm -f test都是依赖方法。

5、伪目标

  • 总是被执行的,即总是会根据依赖关系,执行依赖方法,而不会因为执行后的文件无任何变动而不执行。
  • 上方.PHONY后面跟着的就是伪目标,一般习惯把clean设置为.PHONY。

6、原理

  • 当执行make命令时,make会在当前目录下查找文件名为Makefile或makefile的文件。
  • 如果找到了,它会在该文件内容中查找第一个目标文件(target),在上面的示例中,他会找到test这个目标文件,并把这个文件作为最终的目标文件。
  • 如果test文件不存在,或者test所依赖的test.c文件的文件修改时间比test这个文件新,那么,它就会执行后面所定义的命令来生成test目标文件。
  • 如果test目标文件已存在且所依赖的test.c文件的文件修改时间比test这个目标文件老,则make会报出目标文件是最新版本的错误,而不会执行后面所定义的命令来生成test目标文件。
  • 如果test所依赖的test.c文件不存在,那么make会在当前文件中查找目标为test.c文件的依赖关系,如果找到,则再根据那一个规则生成test.c文件。
  • make会一层一层地查找文件的依赖关系,直到最终编译出第一个目标文件。
  • 在查找的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令出现错误,或者编译不成功,make不会去管它。即make只管文件的依赖性,如果查找到依赖关系之后,冒号后面的文件还是不在,那么make将不会继续工作了。

7、项目清理

  • 在每次重新生成可执行程序前或者不需要可执行程序时,应该将上一次生成可执行程序时生成的一系列文件进行清理(删除),但是如果我们每次都要自己手动去执行那些指令进行清理工作的话,就会变得比较麻烦,因为每次清理时执行的都是相同的清理(删除)指令。所以,我们可以将项目清理的指令也加入到Makefile文件中。
  • 像clean这种,没有被第一个目标文件直接或间接关联时,它后面所定义的命令将不会被自动执行。不过,我们可以显式的让make执行它。即执行命令make clean,以此来清理(删除)所有的目标文件,以便重新编译。

四、Linux 软件包管理器yum

1、软件包

要在Linux下安装软件,通用的办法是下载程序的源代码,并进行编译,进而得到可执行程序。但是这样操作太麻烦了。于是,就有人把一些常用的软件提前编译好,做成软件包并放在一个服务器上,而用户可以通过包管理器很方便地获取到这个编译好的软件包,然后直接进行安装。

2、查看软件包

(1)命令

yum list

(2)功能

罗列出当前一共有哪些软件包,但由于包的数目可能有很多,我们可以使用 grep 命令进行筛选,即只显示我们要查找的软件包。

(3)示例

在这里插入图片描述

3、安装软件包

(1)命令

sudo yum install -y 欲安装的软件包

(2)说明

执行完命令后,yum会自动查找都有哪些软件包需要下载,这时候按y确认安装即可(上方命令没有加-y默认安装时)。当出现complete字样时,说明安装已经完成。

(3)注意

  • 由于安装软件时需要向系统目录中写入内容,一般需要加sudo 或者切换成 root 用户才能进行安装。
  • yum安装软件时,只能将正在安装的软件安装完成了才能安装另一个。即如果yum正在安装一个软件时,这时再尝试用yum安装另外一个软件,yum会报有其他软件正在安装的错误并显示那个软件的安装信息,直到那个软件安装完成后才进行安装。当然,yum正在安装的软件的安装不会中止。

(4)示例

安装软件
在这里插入图片描述

yum正在安装软件时,再安装别的软件时报的错误
在这里插入图片描述
当安装的软件已经安装且为最新版本时的运行结果
在这里插入图片描述

4、卸载软件

(1)命令

sudo yum remove 欲删除的软件

(2)示例

在这里插入图片描述

五、Linux调试器gdb

1、说明

  • 可执行程序的发布方式有两种,debug模式和release模式。
  • Linux下的 gcc/g++编译器编译出来的二进制可执行程序,默认是release模式发布的。
  • 要使用gdb进行调试,必须在源代码生成可执行二进制程序的时候,加上 -g 选项,使生成的可执行二进制程序是debug模式发布的。
  • gdb会记录最近一条命令,如果使用的命令无变化时,可以直接按回车键。

2、使用格式

gbd debug模式发布的可执行二进制文件

3、调试命令

  • q(或者quit或者ctrl + d):退出gdb调试。
  • list/l 行号:显示生成binFile(debug模式的可执行二进制文件)的文件的源代码,接着上次的位置往下列,每次列10行,还需继续往下列可以按回车键或者继续输入那个命令,直到代码全部列完为止。
  • list/l 函数名:列出文件内某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:逐过程调试。
  • s 或 step:逐语句调试,即如果下条调试语句为函数调用,将进入那个函数体内。
  • break / b 行号:在指定行设置断点。
  • break 函数名:在某个函数体的开头位置设置断点。
  • info break / b:查看断点信息。
  • finish:执行完当前函数后,停下来等待命令。
  • p 变量:打印变量的值。
  • set var 修改变量的表达式:修改变量的值。
  • continue / c:从当前位置开始连续而非单步执行程序,即跳转到下一个断点处或者运行结束。
  • d breakpoints (或者delete breakpoints):删除所有断点。
  • d n (或者delete breakpoints n):删除序号为n的断点。
  • disable breakpoints:禁用全部断点。
  • enable breakpoints:启用全部断点。
  • disable b num (或者disable breakpoints num):禁用序号为num的断点。
  • enable b num(或者enable breakpoints num):启用序号为num的断点。
  • info b(或者info breakpoints 或者 i b):查看当前设置的断点。
  • display 变量名:跟踪查看一个变量,每次调试停下来时都显示它的值。
  • undisplay:取消对先前设置的全部变量的跟踪。
  • until X:跳转至X行。
  • bt:查看各级函数调用及参数。
  • info / i locals:查看当前栈帧局部变量的值。

4、示例

不加-g,即生成的是release发布的可执行二进制文件时,用gdb调试时报的错误
在这里插入图片描述

本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信
创作不易,如果觉得博主写得不错,请务必点赞、收藏加关注💕💕💕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162396.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SLAM从入门到精通(bresenham绘制算法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,学术界和工业界对于slam的要求是不一样的。前者要求robot在运动的过程中,同步实现定位和制图的操作。但是工业…

力扣环形链表(1)进阶环形链表(2)及环形链表的约瑟夫问题

为了加深对环形链表的理解和掌握,这两道题是很不错的选择。 这里所说环形链表不是一个圈圈的结构,而是带环链表。 链接:环形链表(1) 注意这里链表的长度 所以要注意链表是否为空 第一种方法,应该是比较容易…

【ELK 使用指南 1】ELK + Filebeat 分布式日志管理平台部署

ELK和EFLK 一、前言1.1 日志分析的作用1.2 需要收集的日志1.3 完整日志系统的基本特征 二、ELK概述2.1 ELK简介2.2 为什么要用ELK?2.3 ELK的组件 三、ELK组件详解3.1 Logstash3.1.1 简介3.1.2 Logstash命令常用选项3.1.3 Logstash 的输入和输出流3.1.4 Logstash配置文件 3.2 E…

宏电股份RedCap产品亮相迪拜华为MBBF,并参与RedCap全球商用阶段性成果发布

10月10-11日,由华为主办的第十四届全球移动宽带论坛(MBBF)在阿联酋迪拜成功举办。MBBF期间,华为联合宏电股份等产业伙伴集中发布RedCap商用阶段性成果。本次发布是RedCap产业的关键里程碑,标志着RedCap在全球已具备规模…

c++小知识

内联函数 inline 用来替换宏函数 不能分文件编辑 在c语言中#define NULL 0在c中使用nullptr表示空指针class内存的大小计算规则使用的是内存对齐 没有成员,但是还有1个字节,我们使用这个来标记他是个类 类成员函数不存在于类中 为什么每个对象使用的…

提高编程效率-Vscode实用指南

您是否知道全球73%的开发人员依赖同一个代码编辑器? 是的,2023 年 Stack Overflow 开发者调查结果已出炉,Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE,与专业…

和硕首次参加展OCP 峰会,将发布多项AI合作项目产品 | 百能云芯

电子代工大厂和硕联合科技宣布,将参与今年的 OCP 全球峰会 (OCP Global Summit),展示与英伟达 (NVIDIA) 合作成果,包含使用英伟达 GH200 Grace Hopper 超级芯片的 MGX AI 服务器,以及搭载 A100、L40 等服务器产品。 OCP 峰会于 10…

【STM32】---存储器,电源核时钟体系

一、STM32的存储器映像 1 文中的缩写 2 系统构架(原理图) 3. 存储器映像 (1)STM32是32位CPU,数据总线是32位的 (2)STM232的地址总线是32位的。(其实地址总线是32位不是由数据总线是…

Tortoise SVN 察看本地缓存密码

1、打开设置(Settings) 2、查看保存的数据 3、打开鉴权数据 4、查看密码 CTRLSHIFT双击表格,就会出现一列密码列 (我的是Mac PD虚拟Win11,CTRLSHIFTOPTION双击表格) 原文见这里: Recover SVN …

【ubuntu】常用软件安装

【ubuntu】常用软件安装 前言安装搜狗输入法安装flameshot截图软件总结 前言 Ubuntu 是一个基于 Linux 内核的开源操作系统,它提供了简单易用的界面和丰富的功能,广受开发者和普通用户的喜爱。博主时常也需要经常切换Ubuntu系统进行开发和学习&#xff…

2023系统架构师---信息系统基础知识

目录 信息系统基础知识 信息系统概述 信息系统开发方法 1.结构化方法 2,原型法 3.面向对象方法 4.面向服务的方法 信息系统基础知识 信息系统是一个由人、计算机等组成的能进行信息的收集、传递、存储、加工、维护和使用的系统,它是一门综合了经济…

模型的选择与调优(网格搜索与交叉验证)

1、为什么需要交叉验证 交叉验证目的:为了让被评估的模型更加准确可信 2、什么是交叉验证(cross validation) 交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过…

专业144,总分440+,上岸西北工业大学827西工大信号与系统考研经验分享

我的初试备考从4月末,持续到初试前,这中间没有中断。 总的时间分配上,是数学>专业课>英语>政治,虽然大家可支配时间和基础千差万别,但是这么分配是没错的。 数学 时间安排:3月-7月:…

ROC与AUC与主动学习评价指标ALC

首先需要关注一下什么是混淆矩阵,此处认为1为正类,0为负类 预测为0预测为1真实为0TN真负例(预测为0,真实也为0)FP假正例(预测为1,但真实为0)真实为1FN假负例(预测为0&am…

前端HTML要了解的知识,DOCTYPE 声明究竟是做什么的、作用是什么?

🌟🌟🌟 专栏详解 🎉 🎉 🎉 欢迎来到前端开发之旅专栏! 不管你是完全小白,还是有一点经验的开发者,在这里你会了解到最简单易懂的语言,与你分享有关前端技术和…

【LeetCode热题100】--55.跳跃游戏

55.跳跃游戏 方法:贪心 对于数组的任意一个位置y,如何判断它是否可以到达? 只要存在一个位置x,它本身可以到达,并且它跳跃的最大长度为xnums[x],这个值大于等于y,即xnums[x]≥y,那么这个位置y…

节省工时超 1500人/天,国泰基金探索金融业人机协同新业态

“十四五”时期是我国经济实现从高速增长转变为高质量发展的关键历史时期,“十四五”规划向金融行业提出了数字化转型与科技监管的新要求。在新一轮科技革命和产业变革趋势下,新一代信息技术与金融行业融合加速,金融行业面临着监管要求与自身…

【MySQL系列】- SELECT语句执行顺序

【MySQL系列】- SELECT语句执行顺序 文章目录 【MySQL系列】- SELECT语句执行顺序一、MYSQL逻辑查询处理的步骤图二、MYSQL执行顺序详解2.1 执行FROM操作2.2 应用ON过滤器2.3 JOIN外部行2.4 应用WHERE过滤器2.5 GROUP BY分组2.6 应用ROLLUP 或 CUBE2.7 HAVING过滤2.8 处理SELEC…

数据结构--B树

目录 回顾二叉查找树 如何保证查找效率 B树的定义 提炼 B树的插入和删除 概括B树的插入方法如下 B树的删除 导致删除时,结点不满足关键字的个数范围时(需要借) 如果兄弟不够借,需要合体 回顾B树的删除 B树 B树的查找 …

单链表经典OJ题:反转链表

题目: 给你单链表的头节点 head ,i请你反转链表,并返回反转后的链表。 图例: 分析: 根据链表的特征,反转链表的本质便是改变节点内部的指针方向。 将原先指向下一个节点的指针进行修改,将其的…