自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 替换空格

目录一、一个换多个(1)原数组的长度大于替换后的长度。(2)原数组的长度小于替换后的长度,需要额外创建一个数组保存替换后字符串。二、多个换一个三、拓展字符串替换有两种情况,一种是把一个空格换成多个字符,另一种是把多个空格换成一个空格。一、一个换多个题目:请实现一个函数,把字符中的每个空格替换成"%20".(1)原数组的长度大于替换后的长度。思路:额外定义一个...

2020-03-15 12:18:25 299

原创 将字符转换成数字(atoi),将数字转换成字符(itoa)

目录一、将字符转换为数字。二、将数字转换成字符。一、将字符转换为数字。(首先字符必须是"0" —"9",然后转换成十进制的数字)比如将"1234" 转换成 1234#include<stdio.h>#include<stdlib.h>#include<assert.h>#include <locale>int...

2020-03-15 12:18:11 1598

原创 折半查找

折半查找也称为二分查找,是一个很优秀的算法,实现简单,并且时间复杂度很低,为log以二为底n的对数。要求是一组有序排列的数组,定义三个指针low,high,mid,分别指向数组的首部,尾部和中间位置。所要查找的关键字每次都与中间指针对应位置的数值进行对比,假设小于指针mid,则将指针high指向mid-1的位置,同理,如果大于指针mid,则将指针low指向mid+1的位置,每次可以将数组一半的...

2020-03-15 12:17:45 276

原创 斐波那契数列 && 青蛙跳台阶 && 变态跳台阶

目录一、斐波那契数列二、青蛙跳台阶问题三、变态跳台阶一、斐波那契数列题目:写一个函数,输入n,求斐波那契数列的第n项。思路:用递归的方法,f(n) =f(n-1) + f(n-2)。代码比较简单。#include<iostream>using namespace std;int Fibonacci(int n){ if(n <= 0) {...

2020-03-15 12:17:29 241

原创 strlen函数strcpy函数strcat函数的实现

一、strlen函数作用:计算字符串第一次碰到'\0'的长度,不包含'\0'。#include<stdio.h>#include<assert.h>int Strlen(const char * str)//const的作用是不改变str字符数组{ assert(str != NULL); if(str == NULL) { return NUL...

2020-03-15 12:16:55 347

原创 printf函数输出多个printf 、前置加加或者后置加加

目录(1)前置加加和后置加加的区别(2)printf输出前置加加(3)printf输出后置加加(4)printf输出printf(1)前置加加和后置加加的区别首先我们先来了解一下前置加加和后置加加的区别。前置加加在编译器里的操作//++aint a = 0;a = a + 1;return a;前置加加是先加一,后赋值,返回的值是加一之后的值。后置加...

2019-08-21 16:20:27 4262 1

原创 TCP和UDP

目录一、TCP1、TCP头部结构2、TCP传输的过程(协议分层)3、编程流程4、TCP编程接口函数:5、TCP的三次握手和四次挥手(1)三次握手:(2)四次挥手:6、画出三次握手和四次挥手的过程7、为什么三次握手而不可以是一次握手或者两次握手?8、为什么连接的时候是三次握手,关闭的时候却是四次挥手?二、UDP1、UDP的报头结构2、编程流...

2019-08-20 00:13:19 120

原创 单链表(不带头结点)

不带头结点的节点因为插入删除的时候会改变或者删除第一个节点,所以要引入二级指针进行一系列的操作头文件#pragma once//不带头结点的单链表typedef struct Node{ int data;//数据 Node * next;//存放下一个元素的地址}Node;//初始化void InitList(Node **ps);//头插bool Insert_H...

2019-08-18 17:53:27 695

原创 虚拟地址内存布局

虚拟地址内存划分比例为3:1,用户空间占3G,内核空间占1G。此图的地址从上到下依次增大。最上面128M为保留区,不可访问。接下来是.text段存放的是指令,.data段存放的是初始化但不为0的全局变量和静态全局变量,.bss段存放的是未初始化的或者初始化为0的全局变量和静态全局变量。heap(堆)从低地址向高地址增长,用户手动开辟的内存就是在堆区,释放也需要用户手动释放...

2019-08-16 13:58:56 175

原创 求Sn = a+aa+aaa+...+aaaaaa(n个a),其中a是一个数字,n代表a的位数,例如 2+22+222+2222+22222(此时n=5),n由键盘输入。

求Sn = a+aa+aaa+...+aaaaaa(n个a),其中a是一个数字,n代表a的位数,例如 2+22+222+2222+22222(此时n=5),n由键盘输入。#include<stdio.h>#include<math.h>//通过a和n构造aa...a这样的数字static int GetNum(int a,int n){ int tmp =...

2019-08-16 00:08:46 751

原创 水仙花数

输入所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153 = 1^3+5^3+3^3。#include<stdio.h>#include<math.h>bool IsFlower(int n){ int sum = 0; int m = n; int tmp; while(n !...

2019-08-16 00:00:52 127

原创 GDB调试(基本命令)

GDB调试分为两种模式,一种是debug版本,一种是release版本。一般GDB主要调试的是C/C++的程序。(1)debug版本:debug版本为可调式版本,生成的可执行文件中包含调试需要的信息。(2)release版本:release版本为发行版本,是提供给用户使用的版本。基础调试命令(单进程/单线程)调试C/C++的程序,首先在编译时, 我们必须要把调试信息加到可执行文件...

2019-08-12 18:08:00 241

原创 僵尸进程和守护进程

僵死进程:父进程未结束,子进程已结束,并且父进程已经获取子进程的退出状态。这种进程,进程主体空间已经释放,只有PCB还未释放。处理方法:(1)父进程调用wait函数或者waitpid函数获取子进程的退出状态,这种方法可能导致父进程在wait或waitpid调用出阻塞运行,直到子进程退出。(2)父进程调用signal,来忽略signal信号,这样子进程结束后会由内核释放资源。(3)对...

2019-08-12 17:36:53 261

原创 两栈共享空间

两个相同类型的栈,可能第一个栈已经满了,但是第二个栈还是空的,将两个相同类型的栈合并在一起,可以节省一部分空间。数组有两个端点,分别为两个栈的栈底,一个栈的栈底的位置为数组为0的地方,另一个栈的栈底为数组下标为SIZE-1的位置,SIZE为数组的长度。两个栈如果增加元素,就是两端点向中间延伸。只要两个栈顶指针不碰面,元素就可以一直进栈。头文件#pragma once...

2019-08-09 22:45:19 481

原创 队列(单链表)

头文件#pragma once//利用带头节点的单链表实现队列,队头为第一个数据节点typedef struct Node{ int data; struct Node *next;}Node;//数据节点typedef struct HNode{ struct Node *front;//队头指针 struct Node *rear...

2019-08-09 21:59:34 495

原创 循环队列(线性)

队列遵循先进先出的原则,一般从队尾插入,从队头删除。指向队头的指针称为front,队尾指针为rear。(目的是为了方便插入和删除元素)假设队列一共有五个元素,当没有元素的时候,front和rear指针都指向下标为0的位置。当有元素的时候,front指向队头,rear指向队尾元素的下一个位置。顺序表的队列,当删除和插入几个元素后, 就会出现假溢出的情况。假溢出:数组还有空闲的位置...

2019-08-09 21:30:57 702

原创 链栈

头文件//带头节点链栈,栈顶在第一个数据节点,入栈和出栈都是O(1)#include <stdio.h> #pragma once typedef struct LNode{ int data; //struct LNode *top;//不需要栈顶指针,总是第一个数据节点 struct LNode *next;}LNode,*PLSt...

2019-08-08 22:51:15 132

原创 fork函数

一、fork()与进程之间的关系: 进程是一个正在运行的程序,是资源分配的最小单位,系统管理进程是依靠对进程控制块(PCB)的管理完成的,每个进程的产生分两步,一是:分配PCB,二是准备进程实体,如分配内存空间等。二、fork() 创建进程fork()调用一次,返回2次,子进程的返回值是0,父进程的返回值是新子进程的进程ID。 子进程从父进程的fork()函数处开始运行...

2019-08-03 16:40:55 593

原创 栈(不定长顺序表)

栈是一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。头文件#pragma once#define INITSIZE 10typedef struct DStack{...

2019-08-02 17:19:35 173

原创 给出一个数:(1)求解有几位数,(2)分别输出每一位数字(3)按逆序输出各位数字

目录(1)求解有几位数(2)分别输出每一位数字(3)按逆序输出各位数字(1)求解有几位数#include<stdio.h>unsigned int GetFigures(int n){ unsigned int figures = 0; while(n!=0) { n /= 10; figures++; } return figu...

2019-08-02 17:15:48 405

原创 双向链表(带头结点)

带头结点双向链表的内存分布情况头文件#pragma once//双向链表typedef struct DNode{ int data; DNode* next; DNode* prio;}DNode , *DList ;//初始化void InitList(DList plist);//头插法bool Insert_head(DList plist,int ...

2019-08-02 17:04:26 1886

原创 单链表(带头节点)

带头结点单链表的内存分布情况头文件#pragma once//带头节点的单链表//单链表尾节点的next为NULL//List为一条链表;Node* 一个节点的地址typedef struct Node{ int data;//数据 Node *next;//下一个节点的地址}Node ,*List ;//List == Node *//初始化void I...

2019-08-02 16:50:29 226

原创 不定长顺序表

头文件pragma once#define INIT_SIZE 10typedef struct DSeqList{ int *elem;//指向保存数据的内存 int length;//有效数据个数 int listsize;//总格子数}DSeqList;typedef DSeqList * PDSeqList;//初始化函数void Ini...

2019-08-02 16:36:02 128

原创 定长顺序表

头文件#pragma once#define SIZE 10typedef struct SeqList{ int elem[SIZE];//保存数据 int length;//有效数据个数}SeqList,*PSeqList ;//typedef SeqList* PSeqList;//PSeqList == SeqList*void InitSeqList(PSe...

2019-08-02 16:31:59 112

原创 魔方阵(奇数,单偶,双偶)

目录一、奇数二、双偶三、双偶魔方阵,是指组成元素为自然数1、2、…、n2的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。魔方阵的规律一、奇数阶数为奇数n(n = 1,3,5...)(1)将1放在第一行中间一列。(2)从2开始到n*n,每一个数存放的行在之前一个数的行数减1,列数加1。如果当前数字在第一行,那么下一个...

2019-07-28 18:17:56 2222 1

原创 共用体/联合体

共用体(联合体):在同一个存储空间存储不同数据的类型。1、共用体的大小大于等于其最长成员的大小。union A { char a; short b; int c; }; union A u1; printf("%d",sizeof(u1));得出的结果为4(int)。2、共用体的同一个内存块里可以用来存储不同的数据类型的成员。union A u1;...

2019-07-26 18:18:38 787

原创 计算结构体的大小

结构体是用户建立由不同类型数据组成的组合型数据结构。结构体的大小不是简单地数据类型的相加,而是需要考虑到系统在存储结构体变量时的地址对齐问题。(1)结构体成员或者加上偏移量必须是下一个成员大小的整数倍(2)结构体大小必须是最大成员大小的整数倍struct A{ int a; //4 float b;//4};//8int类型占4个字节,刚好是float类型的...

2019-07-26 17:28:58 270

原创 指针在数组里的加法

在C语言中,指针与数组经常放在一起使用,很多情况下数组和指针可以互相转换。 //伪代码 int arr[10] = {0,1,2,3,4,5,6,7,8,9}; int * p = arr; arr[i] == * (p+i);//i是大于0小于数组长度-1的任何正整数 *(arr+1) == arr[i];数组和指针的不同:(1)大小不同。(2)指针可以...

2019-07-26 16:46:43 1361

原创 常对象与常成员

一、常对象概念:如果某个对象不允许修改,则该对象称为常对象。PS:(1)不允许常对象调用任何类的成员函数,而且常对象一旦定义,在其生存期内不允许修改,否则导致编译错误。(2)只有类的常成员函数才能访问该类的常对象,const成员函数依然不允许修改常对象。(3)const对象不能被任何对象修改,他也不能被其他对象访问。(4)const对象不能被赋值,必须在定义时由构造函数初始...

2019-05-13 18:45:46 900

原创 友元

概念:在C++中,类具有封装性和隐蔽性,只有类的函数成员才能访问类的私有成员,程序中的其他函数是无法访问类的私有成员,友元为类的封装隐藏开了一个小孔,外界可以访问类内部的一些属性。如果某个对象说明为某个类的友元函数,那么这个外界对象就可以访问这个类对象中的私有成员。PS:友元不是类的成员,但它可以访问类的任何成员。友元分为友元函数和友元类。一、友元函数计算火车旅途时间的友元函数...

2019-05-13 16:43:21 239

原创 静态成员

目录一、静态数据成员二、静态成员函数概念:在C++类的定义中,不为某个对象独享,而是为类的所有对象所共享的数据叫做静态成员。特点:不管这个类创建了多少个对象,其静态成员在内存中只保留一份拷贝,这个拷贝为该类的所有对象所共享。类的静态成员:(1)静态数据成员(2)静态成员函数一、静态数据成员(1)静态成员的访问属性与普通数据成员一样。(2)静态数据成员其存储空...

2019-05-11 19:19:31 1369

原创 对象的使用

目录一、对象指针二、对象引用三、对象数组四、动态对象 五、this指针六、组合对象一、对象指针定义:占用一块连续的内存区域,由此可以使用一个指向对象的指针来访问对象。它指向存放该对象的地址。优点:(1)实现地址传递(2)使用对象指针效率高//Clock.h#include<iostream>using namespace std;...

2019-05-10 21:26:15 686

原创 继承与多态(一)

目录一、继承的概念:二、公有继承三、私有继承四、保护继承五、保护继承与保护成员的访问一、继承的概念:在C++中可以用已有的类来定义新的类,新类将继承原有类的全部特性,原有类称为基类(父类),新继承的类被称为派生类(子类)。派生类拥有基类的特性称作继承,由基类产生派生类的过程称为派生。...

2019-05-09 20:43:06 159

原创 C++的六个默认函数

C++中,类有六个默认函数,分别是:目录1、构造函数2.析构函数3.拷贝构造函数4、赋值运算符重载函数5、取地址操作符重载函数6、const修饰的取地址符重载函数1、构造函数定义:在定义一个对象的同时,希望能给它的数据成员赋值——对象的初始化的成员函数,叫做构造函数。在C++中,由于类的封装性,它不允许在类的非成员函数中直接访问类对象的私有和保护数据成员...

2019-05-08 20:45:38 878

原创 字符串在指针和数组上赋值的区别

1  #include&lt;stdio.h&gt;2  int main()3  {4     char *str1 = "abcde";// 字符串常量5     char str2[] = "abcde";// 字符数组6    str1[0] = 'x';//error7    str2[0] = 'x';8    return 0;9    }注:代码运行到第6行崩...

2018-07-16 23:43:54 1888

原创 const的用法(C语言)

const :限定变量的权限,变成只读(不能做左值)一、基本数据类型对于const透明*二、const修饰它的直接右边 三、权限可以同等或者缩小传递,不能放大传递注:(1)左值:写权限 (2)右值:读权限一、#include<stdio.h>int main(){ int a; a = 10;//左值,放在"="符号左边就...

2018-07-16 23:20:43 114

原创 sizeof和strlen的区别

#include<stdio.h >#include <string.h>int main(){ char str1[100] = "abcde";//字符数组 char str2[] = "abcde"; char *str3 = "abcde";//字符串常量 char str4[100] = "abcde\0ijk\n";...

2018-07-16 23:01:39 147

原创 指针的加减法计算

 (1) 指针++:(p++)表示加一个单元格(单元格的字节随类型而定)#include&lt;stdio.h&gt;int main(){int arr[10]={1,2,3,4,5,6};int *p = arr;p++;printf("%d %d\n",arr[0],arr[1]);return 0;} (2) 指针加数字:指针加法需要调整,调整的权重为指针去掉一个*号,求sizeof。例:...

2018-07-16 00:12:11 2986

原创 数组的下标越界

《数组下标越界》数组定义的一般形式为:类型说明符 数组名[常量表达式] [常量表达式]这两个常量表达式分别指定了二维数组的行数和列数,程序编译时据此向内存申请空间。引用二维数组的格式为:数组名[行下标] [列下标],下标都是从零开始。假设int a[10]是一个名为a的一维数组,它包含十个元素,则内存为数组分配的空间也是10,数组下标范围为0~9,如果不小心将数组最后一个元素a[9]写成a[10]...

2018-07-11 22:59:33 4181

原创 函数值的交换

《函数值的交换》交换函数的几种方式:(1)//errorintSwap1(inta,intb){inttmp;tmp = a;a= b;b= tmp;return0;}在函数Swap1中,a和b的地址的值并没有交换。只是把10和20赋给了a和b,a和b原本的值并没有改变。(2)#include<stdio.h>...

2018-07-11 22:57:45 913

空空如也

空空如也

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

TA关注的人

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