自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (11)
  • 收藏
  • 关注

原创 125-C语言实现文件操作

文件指存储在外部介质上的数据集合。为了简化各种设备的操作,使用户不必区分各种设备之间的区别,操作系统把各种设备都统一作为文件来处理。从操作系统的角度看,每一个输入输出设备都是一个文件。其中键盘是标准输入设备,其文件标识符为”stdin”,屏幕是标准输出设备,其文件标识符为”stdout”数据如流水一样从一处流向另一处,因此常将输入输出的数据称为数据流数据从文件(外存)流向内存称为输入流,数据从内存流向文件(外存)称为输出流文件名文件要有一个唯一的文件标识,以便用户识别和使用。文件标识包括三部分

2020-12-30 20:02:37 315

原创 124-Linux下实现自己写的mybash

在Linux下模拟bash 实现自己写的mybash先上代码!#include<stdio.h>#include<string.h>#include<stdlib.h>#include<assert.h>#include<signal.h>#include<unistd.h>#include<sys/wait.h>#include<pwd.h>void printfinfo(){ cha

2020-12-29 20:34:30 289 4

原创 123-学习C指针

内存区的每一个字节有一个编号,这就是“地址”,它相当于房间号。通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。指针就是地址int main(){ int a = 10; int b = 20; int *p; //定义整型指针(地址)变量 p = &a; //”&”取地址符,&a 取 a 的地址 int *p1 = &a; //等同 p *p = 100; //*p:对 p 解引用,即为 a=100; p = &b; //p 赋值为

2020-12-29 13:57:14 232

原创 122-C语言的顺序程序设计

1、常量:不能被改变的量○1 数字常量。例如 12,23.4,12.5f12 = 23; //error23.4 = 45.6; //error○2 字符常量。例如’\0’ , ’0’, ’A’, ’a’, ’\n’对应的 ASCII 码值 0 48 65 97 10(换行)‘0’ = ‘1’; //error,等同 48 = 49;○3 字符串常量。”0”, ”abcd”○4 宏定义。宏定义就是字符替换。格式:#define 宏名 值例如:#define PI 3.14PI = 3.

2020-12-28 19:43:29 298

原创 121-对C语言中递归的分析

递归在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。德罗斯特效应是递归的一种视觉形式。递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,当问题的规模小到一定程度时问题的答案显而易见。递归需要有边界条件、递归前进段和递归返回段。例如:有 5 个学生坐在一起, 问第 5 个学生多少岁?他说比第 4 个学生大 2 岁,问第 4 个学生岁数,他说比第 3 个学生大 2 岁,问第 3 个学生,又说比第 2个学生大 2 岁,问第 2 个学生,说比第 1

2020-12-28 13:20:25 605 1

原创 120-C++学习第四弹(拷贝构造,重载)

1.拷贝构造函数缺省的拷贝构造函数 按位拷贝下面这段代码是按位拷贝using namespace std;class Object{ int value; int* ip; int ar[100];public: Object():value(0),ip(nullptr) { for(int i=0;i<100;++i) { ar[i]=i; } }};int main(){ Object obja; Object objb(obja);//m

2020-12-27 21:28:33 399

原创 119-C++学习第三弹(new,拷贝构造)

1.解析new deletenew 底层调动malloc开辟object大小(自动计算)的空间 然后通过定位new调用构造函数,创建对象并初始化10,把构建好的对象的地址给op,op指向这个空间。堆区中的这个对象是没有名字的op->Print(); (*op).Print(); 这两种方式一样delete op; 先调用析构函数析构对象,然后释放内存(资源)此时是空悬指针 最好在delete op ;后加上 op=nullptr;开辟10个对象,要调用10次构造函数,主函数结

2020-12-26 21:17:27 892

原创 118-串匹配的KMP算法的实现

#include<stdio.h>#include<stdlib.h>#include<string.h> #include<assert.h>void GetNext(const char *p, int *next)//获取k的值 { next[0] = -1; next[1] = 0; int lenp = strlen(p); int i = 1; int k = 0; while (i + 1 < lenp) {..

2020-12-26 17:05:31 348

原创 117-描述函数调用的现场保护和现场恢复

首先进入主函数,系统为主函数开辟一个栈帧,依次入栈 x=10(占4字节),y=20(占4字节),z=0(占4字节),执行到z=fun(x,y);调用子函数fun,开辟子函数fun的栈帧,先将y的值赋值给b,b=20入栈,然后将x的值赋值给a,a=10入栈,然后将主函数的栈底指针入栈,然后将主函数z=fun(x,y);后的指令地址也进行入栈,称为现场保护。然后将a+b的值30赋值给c,将c=30入栈。子函数此时执行到return c; 系统将30这个值寄存到eax寄存器中,然后将eax寄存器的值30赋值给主.

2020-12-26 11:12:59 3903

原创 116-CPU所含有的寄存器

32位Intel CPU所含有的寄存器1.4个数据寄存器(EAX、EBX、ECX和EDX),也叫通用寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。寄存器AX和AL通常称为累加器,用累加器进行的操作可能需要更少时间。累加器可用于乘,除,输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器。它可作为存储器指针来使用;寄存器CX称为计数寄存器。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数

2020-12-25 21:39:31 388

原创 115-串匹配算法的BF方法的实现

串匹配算法的BF方法在一个字符串中查找另一个串的位置ababcabcdabcde abcd搜索引擎 --》 倒排表 标题 --》内容简介 --》URL接下来是串匹配算法的BF方法的实现#include<stdio.h>#include<string.h> int BF(const char*s,const char*p){ int lens=strlen(s); int lenp=strlen(p); if(s==NULL||p==NULL||l

2020-12-24 13:29:53 182

原创 114-对基数排序算法的实现和分析

基数排序在此先书写一下需要用到的辅助函数和队列的实现(需要用到队列)#include<stdlib.h>#include<string.h>#define INITSIZE 10#include<stdio.h> typedef int ElemType;typedef struct queue{ ElemType *data;//存储元素的空间的首地址 int front;//队列头 int rear;//队列尾 int

2020-12-23 23:12:20 218

原创 113-对归并排序算法的非递归实现和分析

二路归并排序算法将相邻的两个段(本身已经是有序的)的数据合并到一块,合并完成后整个段依旧有序初始时,认为单个数据就是有序的一个段首先书写需要用到的辅助函数#include<stdio.h>#include<stdlib.h>#include<assert.h>/*辅助函数: 1.打印数据 2.判断整个数据序列是否已经有序 3.交互两个数据swap方法*/void Show(int *arr,int len)//打印数据{ for(int

2020-12-23 22:39:59 244

原创 112-对C语言中extern用法的分析

extern在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。另外,extern也可用来进行链接指定。1.extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int p,就可以在a.c中声明extern int p,然后就可以引用变量p。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int p可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明ext

2020-12-23 13:44:04 186

原创 111-对C语言const的分析

const 定义常变量,只读不能写1.基本数据类型对于const是透明的;const int ca = 10;等同int const cb = 10;2.在指针中,const修饰它的直接右边,间接的不算.3.权限的传递,权限可以同等或者缩小传递,但不能放大传递结论:const在c语言中,最主要就是不修改值的函数,指针形参前加constint main(){ int a = 10; int b = 20; const int ca = 10;//不能改 int *p = &a;

2020-12-22 21:10:05 132

原创 110-C语言的全局变量和局部变量

全局变量:定义在函数外部的变量 (尽量少用,不安全)局部变量:定义在函数内部的变量,包括形参链接属性:针对多文件,一个文件的符号(变量,函数)是否可以被其它文件所见头文件:存放函数的声明源文件:存放函数的实现局部变量介绍#include<stdio.h>void Fun(){ static int a = 0;//第一次定义时执行,以后再来时不执行,考试重点 a++; printf("%d\n",a);}int main(){ //int a = 10; //

2020-12-22 20:30:48 306

原创 109-对C语言的动态内存的分析

C语言的动态内存int a = 10;//int arr[a];//errorint *arr = (int *)malloc(a*sizeof(int));//等同int arr[a];malloc calloc realloc三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异。malloc函数其原型 *void malloc(unsigned int num_bytes);num_byte为要申请的空间大小,需要我们手动的去计算,如int *p = (in

2020-12-22 19:38:46 154

原创 108-Linux 信号的使用

信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的系统调用在“signal.h”头文件中有声明常见信号的值,及对应的功能说明:信号的值在系统源码中的定义如下#define SIGHUP 1#define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号#define SIGQUIT 3#define SIGILL 4#define SIGTRAP 5#define SIGABRT 6#define SIGIOT 6#define SIGBU

2020-12-21 22:45:33 220

原创 107-Linux的进程替换

Linux的进程替换的图解下面是代码实现下面是成功的结果下面是失败的结果execl成功就不返回perror(“execl error”)execl 执行成功不返回,直接从新程序的主函数开始执行,只有失败才返回错误码以下是其他的实现方式下面是代码实现execve是对上面方法的总和fork 和 exec 联合使用创建一个全新的进程由上图我们可知,ps-f的父进程的pid是5598,对应的是bash这是怎么由来的呢?看下面图解bash不断把自己进行复制 然后替换成我

2020-12-21 22:23:36 224

原创 106-C++学习第二弹(入门基础)

C++学习1.类与对象封装(Encapsulation)是面向对象程序设计最基本的特性,把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。C++中类的设计:在 C++中,类是一种数据类型。在 C++中,类是一种数据类型。客观事物是复杂的,要描述它必须从多方面进行,也就是用不同的数据类型来描述不同的方面。如商场中的商品可以这样描述:商品名称(用字符串描述),该商品数量(用整型数描述),该商品单(用浮点数描述),该商品总价(用浮点数描述)。这里用了属于三种不同数据类

2020-12-20 22:52:51 700

原创 105-对快速排序算法的实现和分析

快速排序首先先引入需要用到的辅助函数#include<stdio.h>/*辅助函数: 1.打印数据 2.判断整个数据序列是否已经有序 3.交互两个数据swap方法*/void Show(int *arr,int len)//打印数据{ for(int i=0;i<len;++i) { printf("%d ",arr[i]); } printf("\n");}bool IsSort(int *arr,int len)//判断整个数据序列是否已

2020-12-20 19:48:43 180

原创 104-对堆排序算法的实现和分析

堆排序算法首先先引入需要的辅助函数#include<stdio.h>/*辅助函数: 1.打印数据 2.判断整个数据序列是否已经有序 3.交互两个数据swap方法*/void Show(int *arr,int len)//打印数据{ for(int i=0;i<len;++i) { printf("%d ",arr[i]); } printf("\n");}bool IsSort(int *arr,int len)//判断整个数据序列是否已经

2020-12-20 19:01:26 170

原创 103-对希尔排序算法的实现和分析

希尔排序希尔排序的思想缩小增量(分组)排序,可以看成是对直接插入排序的优化按照分组的对每组内的数据进行直接插入使得整个数据序列趋于有序(小数据大部分在前半部分,大数据大部分在后半部分)先比较每个组内的前两个数据,接着是前三个,前四个…i的控制是++这个增量(分组)不断减小,然后按照新的分组重复上面过程。直到分组为时间复杂度: O(n1.3)–O(n1.5)空间复杂度: O(1)稳定性: 不稳定(有跳跃性交换数字)首先先书写需要用到的辅助函数#include<stdio.h

2020-12-20 13:32:49 115

原创 102-C++学习第一弹(入门基础)

C/C++ 的区别1.输入输出C语言下的输入输出#include<stdio.h>int main(){ int a = 0; char ch = '\0'; scanf("%d %c", &a, &ch); printf("a = %d , ch = %c \n", a, ch); return 0;}C++下的输入输出#include <iostream>using namespace std;int main(){ int a

2020-12-19 21:55:37 627 1

原创 101-浅谈指针

指针是什么?在计算机科学中,指针(pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能够找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为指针。意思是通过它能找到以它为地址的内存单元。指针是一个变量,存放内存单元的地址#include <stdio.h>int main(){ int num = 10; int* p = &num;//对于变量num,取地址将它存放在指针变

2020-12-18 20:28:53 128 1

原创 99-对直接插入排序算法的实现和分析

直接插入排序算法的思想:将待排序的数据序列分成两部分,左部分是已经排序好的序列,右部分是未排序的序列,初始排序时,左部分只有一个数据,剩下的数据都在右部分 一次直接插入:1.从右部分拿一个数据插到左部分,并且使左部分依旧有序2.循环此过程,直到右部分没有数据首先先书写需要用到的辅助函数#include<stdio.h>/*辅助函数: 1.打印数据 2.判断整个数据序列是否已经有序 3.交互两个数据swap方法*/void Show(int *arr,i.

2020-12-18 13:32:07 450

原创 98-对选择排序算法的实现和分析

择排序算法的思想: 1.在待排序数据序列中找到当前的最大值,将最大值与当前最后一个元素进行交换 2.循环此过程,每次都会少一个数据首先书写需要用到的辅助函数#include<stdio.h>/*辅助函数: 1.打印数据 2.判断整个数据序列是否已经有序 3.交互两个数据swap方法*/void Show(int *arr,int len)//打印数据{ for(int i=0;i<len;++i) { printf("%d ",arr[.

2020-12-18 12:47:55 143

原创 97-对冒泡排序算法的实现和分析

冒泡排序算法的思想:1.比较两个相邻的数据,将较大的数据往后交换,将最大的数据交换到数据序列的最后2.循环以上过程,每次都会少一个最大数据冒泡排序算法的分析:时间复杂度: O(n^2)空间复杂度:O(1)----> 主要考虑malloc的空间与n有没有关系,递归次数与n有没有关系稳定性: 稳定 首先,先书写出需要用到的辅助函数#include<stdio.h>/*辅助函数: 1.打印数据 2.判断整个数据序列是否已经有序 3.交互两个数据swap.

2020-12-18 11:06:31 169

原创 96-Linux系统调用与库函数的区别

区别: 系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间系统调用执行过程如下图:

2020-12-17 23:22:38 215 1

原创 95-探究Linux下父子进程是否共享文件

父进程先打开一个文件,fork 后子进程是否可以共享使用?首先书写头文件运行后如下图由于 fork 创建的子进程的 PCB 是拷贝父进程的,子进程的 PCB 中的文件表指向打开文件的指针只是拷贝了父进程 PCB 中的值,所以父子进程会共享父进程 fork 之前打开的所有文件描述符父子进程都执行close,才算彻底关闭文件。父进程执行close,子进程依旧可以访问文件。子进程执行close,父进程依旧可以访问文件。如果先执行fork 再打开文件来读取那么执行结果是原因如下所示示意图

2020-12-17 23:19:15 618 1

原创 94-Linux下完成对一个普通文件的复制

写一个程序完成对一个普通文件的复制,(类似 cp 命令)将passwd复制,更名为newpasswd具体实现操作如下图所示运行后查看。大小一样。此用法也可以对桌面的图片进行复制!对原来的代码进行修改,将参数个数argc,参数变量argv代入。运行后...

2020-12-17 22:55:37 160

原创 93-探究Linux下系统调用创建文件的fd的值

fd的值是多少?运行后如图所示由上图运行结果可知 fd的值为3为什么是3?看下图示意图fd=openfd>=0本次程序运行 已经默认打开了三个文件夹,fd排到第三个,编号为3

2020-12-17 22:44:06 495

原创 92-Linux下操作文件的系统调用的读写基本操作

int open(const char* pathname, int flags);//用于打开一个已存在的文件int open(const char* pathname, int flags,mode_t mode);//用于新建一个文件,并设置访问权限pathname:将要打开的文件路径和名称flags : 打开标志,如 O_WRONLY 只写打开O_RDONLY 只读打开O_RDWR 读写方式打开O_CREAT 文件不存在则创建O_APPEND 文件末尾追加O_TRUNC 清空文件,重

2020-12-17 22:35:48 398

原创 91-用两个队列实现栈

首先写书写队列的一些功能#include<stdlib.h>#include<string.h>#define INITSIZE 10typedef int ElemType;typedef struct queue{ ElemType *data;//存储元素的空间的首地址 int front;//队列头 int rear;//队列尾 int size;//标识当前空间的结束位置 扩容 }Queue;void Init

2020-12-17 17:51:37 137

原创 90-用两个栈实现一个队列

首先先书写栈的一些功能#include<string.h>#include<stdlib.h>#include<stdio.h>#define INITSZIE 10typedef int ElemType;typedef struct stack{ ElemType *data;//指向存储空间的首地址 栈底指针 int top;//栈顶指针 int size;//栈存储空间的大小,为了扩容准备 }Stack;void..

2020-12-16 23:02:27 101

原创 89-我们看到的地址是虚拟地址还是物理地址?

请看下列代码#include <stdio.h>#include <stdlib.h>int a = 1, b = 255;int main(){ int *p= &a; printf("p = %X, &b = %X\n", p, &b); return 0;}在C语言中,指针变量的值就是一个内存地址,&运算符的作用也是取变量的内存地址代码中的 a、b 是全局变量,它们的内存地址在链接时就已经决定了,以后再也不能改变,该程

2020-12-15 23:30:58 2305

原创 88-C语言中sizeof()和strlen()的异同点

sizeof() 是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。strlen() 是C语言C++的函数,是所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。在C/C++中使用strlen函数需要引头文件 #inlcude<string.h>以下程序在VS2012 win32中运行用siz

2020-12-15 20:38:09 130

原创 87-Linux的僵死进程及处理方法

(1) 僵死进程概念:子进程先于父进程结束,父进程没有调用 wait 获取子进程退出码。(2) 如何处理僵死进程:父进程通过调用 wait()获取子进程退出码。 或者等父进程结束,Init进程收养孤儿进程,调用wait()获取子进程退出码。(3) Init 进程收养孤儿进程,而且Init 进程“尽心尽责”,会自动调用wait()获取子进程退出码。代码示例:先给出一个能产生僵死进程的代码运行结果如下图:从上图中可以看到,当子进程结束后,并没有消失,仍然可以在系统中观测到,但此时子进程其实已经运

2020-12-14 23:29:06 307

原创 86-Linux下关于fork的经典练习

一 .下列程序输出几个“A”?运行结果如下输出6个A 根据代码段仔细执行,注意for循环的i的值即可得出答案二. 下列程序输出几个“A”?运行结果如下输出8个A,要注意到此程序的printf语句没有\n,也没有fflush,所以它有缓冲区。A在缓存区中,等程序结束才打印到屏幕上。子进程在复制的时候也将父进程缓存里的A复制过来了。三 .下列程序输出几个“A”?运行结果如下输出3个Afork() || fork();程序先执行第一个fork,产生子进程(fork() || fo

2020-12-14 22:50:54 432 1

原创 85-解决虚拟机(deepin)大写无法转小写的问题

在虚拟机中安装的 deepin 系统,按 CapsLock 转大写后,无法切换回小写,这是 vmvare 15.虚拟的 bug。但可以通过修改配置文件解决:1.选中虚拟机,然后右键“打开虚拟机目录”。不用开启虚拟机,下图虽然已经开启了 deepin,你们不要开启.2.用记事本打开如下图所示的文件:3.在文件最后追加一行内容(可直接复制如下内容粘贴):mks.win32.useInjectedMagic = “FALSE”4.保存并重启虚拟机。...

2020-12-14 22:08:31 1291

Memcached重要结构.doc

Memcached重要结构

2021-10-27

memcached-1[1].2.8.zip

memcaced安装包

2021-10-27

Memcached内存分析、调优、集群.ppt

Memcached内存分析、调优、集群.

2021-10-27

Memcached源码剖析笔记.pdf

Memcached源码剖析笔记

2021-10-27

BitTable实现.doc

BitTable实现

2021-10-27

C++实现线程池.cpp

C++版本实现线程池

2021-10-27

运动会管理平台(数据库大作业).zip

数据库课程设计-运动会管理平台

2021-10-27

计算机网络课程设计.zip

计算机网络课程设计(组网设计)

2021-10-26

libco协程库.zip

C++的libco协程库源代码和课件笔记

2021-10-26

md5源代码.zip

md5源代码,可用于文件加密解密,实现秒传功能,可用于哈希映射

2021-10-26

空空如也

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

TA关注的人

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