自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 第八章:Linux基础----进程替换

文章目录8 进程替换8.1 exec 系列替换过程:8.1.1 exec 系列方法8 进程替换进程替换exec系列:execl、 execlp、 execle、 execv、 execvp、 execve8.1 exec 系列替换过程:pcb 使用以前的只修改,进程实体更换以进程main替换为进程ps为例解释进程替换,首先将进程main全部释放掉,然后重新装载ps,运行ps,可以发现原来的pcb是不变的,只需要将pcb中的成员改一改即可,同时pid不变,将进程名字main删掉改为现在的ps,这

2022-05-18 20:25:18 450

原创 C++基础(函数重载)

文章目录函数重载一、函数重载的概念二、判断函数重载的规则三、函数重载解析的步骤四、名字粉碎(名字修饰)五、C++编译时函数名修饰约定规则六、总结6.1 函数重载的依据6.2 返回类型不同的函数是否可以重载函数重载首先,以C语言实现int, double,char 类型的比较大小函数为例:int my_max_i(int a,int b) { reurn a > b ? a : b;}double my_max_d(double a,double b) { return a > b ? a

2022-05-17 14:00:00 6362 1

原创 C++基础(缺省函数)

文章目录缺省函数1 缺省参数的函数调用2 多文件结构3 缺省函数的特点缺省函数一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不相同。缺省参数指在定义函数时为形参指定缺省值(默认值)。这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按缺省值进行调用。1 缺省参数的函数调用  缺省实参并不一定是常量表达式,可以是任意表达式,

2022-05-16 10:16:27 413

原创 C++基础(inline函数)

文章目录inline函数1 要点2 建议3 内联函数与宏定义区别inline函数  当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。请看如下程序段,读入一行字符串,逐个判断是否为数字字符:#include<iostream>using namespace std;bool IsNumber(char ch){ return ch>= ʹ0ʹ && ch <= ʹ9ʹ ?

2022-05-16 09:36:46 156

原创 C++基础(引用)

文章目录引用(别名)1 引用的定义2 引用的特点3 引用的用法4 引用指针、引用数组5 指针与引用的区别引用(别名)1 引用的定义类型& 引用变量名称 = 变量名称;其中,&和类型结合称之为引用符号,不是取地址符,代表别名的意思。引用实例如下:int main(){ int a=10; int b=a; //变量 int &c=a; //引用 //c11 中称为左值引用 return 0;}2 引用的特点引用必须初始化

2022-05-15 21:36:40 165

原创 C++基础(初始化、输入输出、const与指针)

文章目录1 C++统一初始化:2 输入输出3 const 与指针1 C++统一初始化:初始化列表 解决方案int main(){ int a=10; int b(10); int c{10}; int ar[10]={1,2,3,4,5,6,7,8,9,10}; int br[10]{1,2,3,4,5,6,7,8,9,10}; return 0;}2 输入输出C语言输入输出#include<stdio.h>in

2022-05-13 11:56:52 284

原创 第八章:Linux进程复制fork与替换

文章目录八、Linux进程复制与替换1 printf函数输出问题2 主函数参数介绍3 复制进程fork3.1 fork方法3.2 fork练习4 僵死进程及处理方法八、Linux进程复制与替换1 printf函数输出问题  printf函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有以下三种情况满足,才会输出到屏幕。  1)缓冲区满  2)强制刷新缓冲区 fflush  3)程序结束时2 主函数参数介绍int main(int argc, char* argv[], char* en

2022-05-12 14:20:59 212

原创 第七章:计算机基础概论(Linux)

文章目录fork总结fork总结1 fork复制进程,父进程中fork返回值是子进程的pid,在子进程中fork返回值为0;2 在进程中打印的变量地址,都是逻辑地址,不是物理地址;3 子进程复制父进程的内存空间...

2022-05-12 10:57:02 104 1

原创 第五章:Linux系统上C程序的编译与调试+第六章:Linux系统上的库文件生成和使用

安装好之后在输入gcc就是这样啦1.2 g++的安装同上。1.3 gdb的安装同上。2.

2022-04-17 17:23:59 1362

原创 第四章:Linux常用命令(续)

文章目录3.文件编辑器vim1.vim的介绍与安装1.1vim的介绍1.2vim的安装2.vim配置文件的修改(添加行号,缩进等等)2.1配置文件的介绍2.2配置文件的设置办法3.vim的三种模式:3.1模式切换示意图3.2命令模式 切换到插入模式3.3命令模式切换到末行模式4.vi/vim常用命令下接第四部分 https://blog.csdn.net/hi332516_1/article/details/123880815?spm=1001.2014.3001.55013.文件编辑器vim1.vi

2022-04-08 09:40:53 1148

原创 BF和KMP算法(字符串匹配)

文章目录BF算法1.第一种BF算法(这种是错误的)1.第二种BF算法2.BF算法代码实现3.运行结果4.BF算法复杂度KMP算法1.核心思想: i绝不后退2.代码实现3.运行结果4.复杂度分析BF算法字符串:“abcd”真子串:’ ‘,‘a’,‘b’,‘c’,‘d’,‘ab’,‘bc’,‘cd’,‘abc’,‘bcd’  (1+n)*n/2子串:’ ',‘a’,‘b’,‘c’,‘d’,‘ab’,‘bc’,‘cd’,‘abc’,‘bcd’,‘abcd’   (1+n)*n/2+1主串:“ababca

2022-04-02 09:58:08 534

原创 第四章:Linux常用命令

文章目录四、常用命令介绍1.基本命令1.pwd2.cd3.ls4.man5.touch6.mkdir7.rm8.cp9.mv(cut,move,rename)10.find11.grep过滤12.管道'|'13.wc14.su15.关机和重启16.修改用户密码2.打包,解包,压缩,解压命令2.1:tar 将文件打包或者解包2.1.1 tar打包过程2.1.2 tar解包过程2.2 gzip对文件进行压缩和解压2.2.1 gzip对文件进行压缩2.2.2 gzip对文件进行解压2.2.3 通过tar命令对xx

2022-04-01 09:59:43 1445

原创 八大排序—快速排序

文章目录快速排序1.排序规则2.代码实现3.测试结果4.复杂度分析快速排序1.排序规则划分的规则:第一次排序以第一个数据作为基数从右向左找比基准值小的(相等)从左向右找比基准值大的向下划分:至少这个组里有两个数据,才有必要去划分;0个或者1个都没有必要划分原始数据: 84 9 18 19 48 12 90 84 8 12具体过程如下图:2.代码实现#include<stdio.h>#include<stdlib.h>#include<assert

2022-03-31 15:42:21 158 1

原创 八大排序—基数排序(桶排序)

文章目录基数排序(桶排序)1.排序规则2.图形示意3.代码实现4.测试结果5.复杂度分析基数排序(桶排序)1.排序规则   将所有数据从前向后按照个位,十位,百位…(低位优先)依次全部存放到相应的桶内,然后再从桶内全部取出(放入或取出规则遵从队列,先进先出),跑的趟数,根据数据中的最大值的位数例如:数据中的最大值是1234(最高位是千位),则需要将所有数据按千位,百位,十位,个位进行排序2.图形示意原始数据:12 32 2 620 42 98 122 289 987 37 56 90第一次以

2022-03-30 09:32:04 176

原创 八大排序—归并排序

文章目录归并排序1.排序规则2.代码3.测试结果4.复杂度分析归并排序1.排序规则首先将所有数据默认每个数字单独一个组,接下来两两合并(两个组),当所有数据在一个组内,则排序停止原始数据: 84 9 18 19 48 12 90 84 8 12第一次两两合并(2-2): 9 84   18 19   12 48   84 90   8 12 (这里的两两合并指的是两个组合并)第二次两两合并(4-4): 9 18 19 84   12 48 84 90   8 12第三次两两合并(8-

2022-03-30 09:15:32 125

原创 第二章:Linux系统目录介绍+第三章:Linux系统文件类型和文件权限

文章目录二、Linux目录结构1.Linux的文件目录结构图2.常用目录介绍3.相对路径和绝对路径三. Linux系统文件类型和文件权限1.文件类型2.文件权限3.如果修改文件权限3.1文字设定法3.2数字设定法二、Linux目录结构windows:将存储空间分为多个盘符:C,D,E,F…Linux:只有一个根目录,倒立的属性结构,所有文件都是从根目录开始向下存储1.Linux的文件目录结构图2.常用目录介绍/ban 存放常用命令(二进制可执行程序)(重点)/boot 存放系统内核及启动相

2022-03-27 16:59:27 1563

原创 八大排序—选择排序

文章目录选择排序1.排序规则2.代码实现3.测试结果4.复杂度分析选择排序1.排序规则   每一趟从待排序序列中找到最小值(下标)和待排序序列的第一个值(下标),然后将两个交换,直到待排序序列中只剩下一个值(每一次都找到一个最小值放到前面,跑len-1趟即可)该图为第五趟排序时待排序的值和最小值对应的下标   原始数据: 12 32 2 60 42 98   第一趟: 2 32 12 60 42

2022-03-26 09:29:13 188

原创 飞机订票系统

代码如下:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <stdlib.h>#include<assert.h>#include<vld.h>#include<conio.h>#include<string.h>#include<time.h>#define HEAD1 "*******************************

2022-03-25 10:43:06 1178

原创 第一章:Linux系统介绍

文章目录一、Linux简介1.Linux和Windows系统有什么区别?2.Linux的内核版本和发行版本1)查看自己的内核版本号2)Linux的发行版本3.桌面介绍1.开关机(尽可能通过这里)2.终端的打开3.怎么控制终端的大小一、Linux简介1.Linux和Windows系统有什么区别?Linux系统开源,Windows不开源Linux主要应用于服务器上,Windows主要应用于个人电脑Linux主要用命令行操作,Windows只要用图形化操作界面Linux免费,Windows免费Li

2022-03-24 21:30:12 1300 1

原创 八大排序—堆排序

堆排序:二叉树大顶堆:父节点的值大于孩子节点小顶堆:父节点的值小于孩子节点父亲节点(例如上图的21就是父亲节点)孩子节点(左孩子和右孩子)(例如上图的12,13就是子节点,12是左孩子,13是右孩子)叶子结点:(度为0)完全二叉树:满二叉树(就是完全二叉树的一个特例)一个数如果是满二叉树,则一定也是完全二叉树,反过来则不定默认从小到大的话,我们使用大顶堆;默认从大到小的话,我们使用小顶堆调整规则:从最后一个非叶子节点开始调整,将其...

2022-03-23 09:00:00 149

原创 八大排序—冒泡排序

冒泡排序:沉石排序,每一趟循环两两比较,大的向后挪,最终最大值放在最后例:现在有n个数据,需要跑n-1趟即可,操作如下图:优化:上述冒泡排序,当第四趟处理完时,就已经完全有序了,理应直接退出循环,即可。第五趟排序可以省略怎么判断数据已经完全有序?从前往后遍历一遍,发现数据两两比较都是前面小于后面(没有交换操作),这个时候,就可以判定数据已经完全有序,用代码如何实现呢?我们需要加入bool类型的 tag 来判断每一次过程中两两数值是否发生交换。代码实现如下:#include&l.

2022-03-22 08:59:03 312

原创 八大排序—希尔排序

希尔排序:(最小增量排序)希尔排序是对于直接插入排序的优化,希尔排序就是根据直接插入排序的第二个特点进行的优化希尔排序的时间复杂度和增量数组有关,因为增量数组的选取目前是一个数学难题,所以时间复杂度大致是O(n^1.3~n^1.7)代码实现://希尔排序 稳定性:不稳定 时间复杂度O(n^1.3~1.7) 空间复杂度为O(1)void Shell(int arr[], int len, int gap)//一趟希尔排序{ //assert arr!=NULL; for (in.

2022-03-21 10:36:35 890

原创 八大排序--直接插入排序

直接插入排序:一开始将数据分为两部分,初始数据当做无序,每一次从待排序队列中取出一个值,放到我们已经排序好的队列中,然后将其调整有序,然后再从待排序队列中取一个值,直到待排序队列中没有值,再结束。调整规则:将待插入的值和有序队列中的所有值挨个比较(从右向左),找到一个小于或者等于自己的值,则停下来,插入到当前位置的下一个位置。要么触底要么找到合适的位置直接插入排序的特点:1.时间复杂度过大O(n^2)合适的使用场景:n比较小的时候2.数据越有序,则直接插入排序的效率越高这幅图对应方法1:其.

2022-03-20 14:27:07 1524

原创 图书管理系统

最近刚上的一个项目--图书管理系统#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<vld.h>#include<assert.h>#include<windows.h>#include<conio.h>#define BOOK_NUM 200#define READER_NUM 100#define BOOK_

2022-03-17 21:55:32 536

原创 链式队列-基础数据结构

链式队列有很多内容也是和单链表通用的先写链式队列的头文件list_Stack.h#pragma once//链式栈的结构体声明:直接用单链表即可typedef int ELEM_TYPE;//有效数据节点结构体设计(头结点借用)typedef struct LStack{ ELEM_TYPE data;//数据域 (1.头结点:不保存任何数据 2.有效数据节点:保存有效值) struct LStack* next;//指针域 (1.头结点:保存第一个元素的地址

2022-03-14 21:32:33 502

原创 一致性哈希,虚拟节点,布隆过滤器

目录1.一致性哈希2.虚拟节点3.布隆过滤器(海量数据去重)1.一致性哈希例如:有三个服务器A,B,C,而现在我们手中有6W张照片,那么怎么把这些照片分给三个服务器?方法为:提取图片的关键字 % 服务器个数(3)假设,又新加了一台服务器D,这时会发生什么? 那之前的很多图片的位置都要发生改变由于服务器数量发生改变,导致服务器中的数据受到影响(全部数据)2.虚拟节点上面只是一种理想的状态,几乎是达不到的。有时会出现哈希偏斜:此时,就需要引入虚拟节点概念,..

2022-03-14 21:11:11 718

原创 哈希-基础数据结构

目录第一部分:哈希基本概念第二部分:哈希冲突第三部分:哈希函数的六种构造方法第四部分:如何处理哈希冲突第五部分:链地址法代码实现第一部分:哈希基本概念哈希:1.哈希基础 如果构造哈希 如果发生哈希冲突,怎么解决?2.一致哈希 虚拟节点3.布隆过滤器 海量数据如何去重目的:可以在第一时间内确定这个x值到底在不在这个数组?数据和存储位置没有任何关系例:我想在一组数中寻找数33 只能从前向后全部遍历一遍这个数组,确定33是不是在这个数组中,时间复杂度..

2022-03-13 14:35:19 839

原创 链式队列-基础数据结构

暂时先把代码放上,后续再详细说明先写头文件list_queue.h#pragma once//链队列的结构体设计typedef int ELEM_TYPE;//有效数据节点的结构体设计:typedef struct Node{ ELEM_TYPE data;//数据域 struct Node* next;//指针域}Node, * PNode;//头结点的结构体设计:typedef struct LQueue{ struct Node* front; struct

2022-03-10 19:47:11 116

原创 如何用两个队列实现一个栈?

Two queue to stack规则:(重点理解规则)如何入栈:直接向q2里边入如何出栈:首先判断q2里面有没有值,如果q2不空,将q2除了最后一个数据外,剩余数据全部放在q1中,这时候q2仅仅剩下一个数据,这时候就可以出出来了;如果q2为空,代表着值都在q1里,将q1除了最后一个数据外,剩余数据全部放在q2中,这时候q1仅仅剩下一个数据,这时候就可以出出来了。先写头文件two_queue_to_stack.h(这个依旧是用了队列的文件list_queue.h,之后我会把队列的博客补充...

2022-03-10 19:03:11 450

原创 循环队列-基础数据结构

队列:也是一种受到限制的线性表,一端进行入队,另一端进行出队,我们将入队的一端一般称作队尾,另一端称作队头。如果没有元素叫做空队。队列的特点:先进先出(FIFO)顺序表实现的队列为什么叫循环队列?关于循环队列的三个难点:(重点)第一个难点:怎么让队列也可以实现入队和出队的时间复杂度都为 O(1) 此时,入队的时间复杂度为多少?(入106) O(1) 不需要挪动元素 出队的时间复杂度为多少?(出101) O(n) 需要挪动元素所以,...

2022-03-08 19:16:26 1165

原创 如何用两个栈实现一个队列?

Two stack to queue规则:(重点就是理解规则)如何入队:入队只向s1里面入队(默认s1是可以无限存放的)如何出队:看s2里面有没有值,有的话直接出;如果s2为空怎么办?将s1里面的值,全部颠倒存放到s2中,这时s2就不空了,则直接出即可。两个栈实现一个队列:这个很简单里边的很多函数都是可以直接调用我们上一节写过的顺序栈中的函数。(栈(顺序栈) - 基础数据_hi332516_1的博客-CSDN博客)先写头文件two_stack_to_queue.h#pragma o..

2022-03-07 21:33:24 1141

原创 栈(顺序栈) - 基础数据

栈:只能在表尾进行插入(入栈)和删除(出栈)的数据结构(受到限制的线性表),表尾比较特殊,我们一般把这个表尾叫做栈顶,表头端叫做栈底。不含元素的空表,则叫做空栈。栈的特点:后进先出顺序栈的结构体设计:struct Stack{ 第一个数据成员:ELEM_TYPE* base(指针类型,用来接收malloc从堆里申请的一整块连续空间)第二个数据成员:int top(栈顶指针,但不用刻板的认为一定就是指针类型)(需要一个变量,既能表示下一个数据的插入位置,又能表示有多少个有效值)第三个数

2022-03-07 16:45:47 394

原创 基础数据结构-循环链表

循环链表:循环链表的next域保存头结点的地址,其余的几乎和单链表是一致的。下面开始写代码,依旧是先写循环链表的头文件Clist.h#pragma oncetypedef int ELEMTYPE;//循环链表结构体设计typedef struct Clist{ ELEMTYPE data;//数据域 存放数据 struct Clist* next;//指针域 存放下一个节点的地址(尾节点的next保存头结点的地址)}Clist,*PClist;// 循环链表拥有的 可.

2022-03-06 19:28:20 385

原创 基础数据结构-双向链表

双向链表是链表中偏难的先写头文件dlist.h#pragma once//双向链表结构体设计:typedef int ELEM_TYPE;typedef struct Dlist{ ELEM_TYPE data;//数据域 保存有效值 struct Dlist* next;//指针域 保存下一个节点的地址(后继) struct Dlist* prior;//指针域 保存上一个节点的地址(前驱)}Dlist, *PDlist; //双向链表可执

2022-01-22 22:19:00 669

原创 单链表(不带头结点)-基础数据结构

单链表(不带头结点):不带头结点的单链表,需要用到二级指针,容易出错,所以一般都使用带头结点的单链表。先写头文件no_head_list.h#pragma once //预处理:保证该头文件只有一个//带头结点的:两只手干活//不带头结点的:一只手干活//不带头结点的结构体设计:typedef int ELEM_TYPE; //有效数据节点结构体设计typedef struct Node{ ELEM_TYPE data;//数据域 (1.头结点:不保存任何数据

2022-01-17 21:55:50 937

原创 基础数据结构-单链表(带头结点)

先写头文件list.h#pragma once typedef int ELEM_TYPE; //有效数据节点结构体设计(头结点借用)typedef struct Node{ ELEM_TYPE data;//数据域 (1.头结点:不保存任何数据 2.有效数据节点:保存有效值) struct Node *next;//指针域 (1.头结点:保存第一个元素的地址 2.有效数据节点:保存下一个有效元素的地址)}Node, PNode;/*//有效数据节点结.

2022-01-15 21:57:32 454

原创 基础数据结构-不定长顺序表

先写头文件:Dsqlist.h#pragma oncetypedef int ELEM_TYPE;#define INIT_SIZE 10//不定长顺序表的结构体设计:typedef struct Dsqlist{ ELEM_TYPE *elem;//指针,用来接收malloc返回值 int length;//当前有效值个数(当前有多少个格子被占用) int list_size;//当前总空间个数(当前一共有多少个格子)}Dsqlist, *PDsqlist;//不定长顺序表

2022-01-10 22:37:44 300

原创 基础数据结构-定长顺序表

#include <stdio.h>#include "assert.h"#include <stdlib.h>#include "sqlist.h" //1.还是首先回去编译器默认库函数文件里去找 2.自定义路径去找//注意事项:插入和删除的时候,记着p->length,++或者--一下//将定义的struct sqlist普通成员变量进行初始化void Init_sqlist(struct sqlist *p)//void Init_sqlist...

2022-01-08 21:50:48 371

原创 输入一个字符串,内有数字和非数字,例如:A123x456 17960,将其中连续的数字作为一个整数,依次放到一数组a中。例如,123放在a[0],456放在a[1],统计共有多少个整数,并输出这些数。

代码如下:#include <stdio.h>#include <string.h>#include <ctype.h>#include <malloc.h>#include <assert.h>int Get_str_Num_Count(const char *str) //子函数为统计一长串字符串中整数的个数{ int count = 0; //首先初始化数字个数为0 while(*str != '\0') //停步准则:

2021-12-13 09:37:20 1270

原创 在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数中输出这10个已经排好序的字符串

代码如下:#include <stdio.h>#include <string.h>void BubbleSort_str(const char** arr, int len) //冒泡排序{ for (int i = 0; i < len - 1; i++) { for (int j = 0; j + 1 < len - i; j++) //此处为啥是j+1<len-i,冒泡排序对每一对相邻元素进行比较,每次都是把大的放后边,最后,最大值就沉在

2021-12-11 14:53:31 1621

空空如也

空空如也

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

TA关注的人

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