自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大家都在问的网络协议——UDP和TCP

UDP和TCP一、UDP1.UDP报头2. UDP的特点3. 面向数据报4. UDP的缓冲区5. UDP使用注意事项6. 基于UDP协议的应用层协议二、TCP1.TCP报头32位序号和32位确认序号一、UDP1.UDP报头16位源端口号:发送端的端口号16位目的端口号:接收端的端口号16位UDP长度:数据报总长度(UDP首部+UDP数据)16位UDP检验和:如果检验和出错,就会直接丢弃2. UDP的特点UDP传输的过程类似于寄信。无连接:知道对端的IP和端口号就直接进行传输,不需要建立

2021-06-07 16:43:14 948 1

原创 二叉树的进阶——C++ 二叉搜索树

二叉搜索树一、二叉搜索树1.二叉搜索树的概念2.二叉搜索树的使用场景二、二叉搜索树的分类1.Key树模拟实现key树2.KV树模拟实现KV树一、二叉搜索树1.二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树所有的节点都大于根节点的值它的左右子树也是二叉搜索树2.二叉搜索树的使用场景因为二叉搜索树的性质,它的中序是有序的。所以可以用来进行排序(用的不多)既然叫做

2021-05-17 16:24:42 442 5

原创 线程互斥

线程互斥为什么会有线程互斥互斥量mutex抢票问题互斥量实现原理总结可重入和线程安全概念常见的线程不安全的情况常见的线程安全情况常见的不可重入的情况常见的可重入的情况可重入与线程安全联系可重入与线程安全区别为什么会有线程互斥线程与线程之间,都有共用的资源,如果一个线程修改公共资源,那么另一个线程在读取时,就会发生读取错误。或者说,在一个线程在读数据时,另一个同时在写,这时候就会发生数据错误。而为了保护临界区资源时,就引出线程互斥的概念。为了保证数据变化是原子性的,我们在进行多线程访问临界区资源时,每

2021-05-03 17:07:00 1642 3

原创 C++线程 linux

C++线程一、线程的概念1. 什么是线程2. 线程的概念二、线程的优缺点1. 线程的优点2. 线程的缺点(1) 性能损失(2) 健壮性降低(3) 缺乏访问控制(4) 编程难度高3. 线程异常三、线程用途四、linux 线程编写一、线程的概念1. 什么是线程在谈线程之前,我们先看看进程。创建一个进程,我们从0到有创建了很多东西,申请了很多资源。我们在创建进程时,如果让其他的pcb指向同一个地址空间。我们能不能将代码分成若干个块,让每个pcb执行代码的某一部分。以前我们是一个进程执行,现在我们用

2021-05-01 17:18:10 534 3

原创 力扣25:K 个一组翻转链表

K个一组翻转链表1.题目描述2.题目分析3.题目讲解4.实现代码1.题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。来源:力扣(LeetCode)链接:K个一组翻转链表.2.题目分析首先,这是一个翻转链表的问题,翻转普通链表的问题可

2021-04-16 09:13:41 295

原创 C++ list模拟实现

list 模拟实现list容器介绍list常见接口list iterator的使用list capacitylist element accesslist modifierslist迭代器失效问题list容器例图模拟实现代码list容器介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主

2021-04-12 17:34:14 1122

原创 C++ vector模拟实现

模拟实现C++ vectorvector 介绍vector各类接口一般接口函数增删查改函数vector样图模拟实现代码vector 介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做

2021-04-10 15:03:52 244 2

原创 内存管理

内存管理1.C/C++内存分布说明:栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是可以上增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。数据段–存储全局数据和静态数据。代码段–可执行的代码/只读常量。2.C语言中动态内存管理方式void Test (){ int* p1 = (int*) malloc(sizeof(int)); free(p1);

2021-03-16 14:33:13 364

原创 C++泛型编程

泛型编程对于C++来说,一个程序如果有很多实现的接口调用,亦或者说,代码复用率需要很高。从而就引出现在的问题:如何写出复用率高的代码。通常我们都使用函数重载,但是函数重载不能很好解决大多数问题,而且一个函数出错,那么其他的函数也会有相应的错误。只要有新类型出现时,就需要增加对应的函数,这样会增加多余的工作量。那么,我们能否用一个模板,让编译器根据不同的类型利用该模板生成代码呢。函数模板函数模板概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用的时候被参数化,根据实参类型产生函数的特定类

2021-03-15 15:45:06 1029 2

原创 C++的特殊函数讲解

成员初始化函数(初始化列表)一般我们见到的初始化函数都是要么直接由编译器生成,或者说是自己写一个构造函数。但是一般我们自己写的构造函数虽然对象中已经有了一个初始值,但是不能将其称为类和对象成员的初始化。构造函数体中的语句只能称其为赋初始值,而不是初始化。因为初始化只能进行一次,而构造函数体内可以多次赋值。一般的构造函数class Date{public: Date(int year, int month, int day)//构造函数 { _year = year; _month = m

2021-03-12 16:59:15 308 1

原创 Liunx常用命令

基础命令ls 指令ls指令是对于目录,列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。用法:ls 加选项 加目录或文件常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件。-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件。-l 列出文件的详细信息。通常也可以使用ll进行使用-n 用数字的 UID,GID 代替名称。-F

2021-03-10 16:06:33 2306 4

原创 C++浅谈构造函数和析构函数

构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编辑器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数是特殊的成员函数,需要注意的是,构造函数的名称虽然叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。构造函数的特征1.函数名与类名相同;2.无返回值;3.对象实例化时编辑器自动调用对应的构造函数;4.构造函数可以重载。这里我们用日期类来大概看看构造函数的样子。public: //1.无参构造函数

2021-03-06 17:33:20 939 1

原创 简单理解顺序表和链表(建议收藏)

在我们学习数据结构时,会接触到这两个东西:顺序表和链表这些统称为线性表。这是一中简单而且比较经典的数据结构,在生活中用的也比较多,下面我来为大家简单讲解一下这两个东西。说到顺序表,一般它是用数组进行存储,而顺序表也分为静态和动态;顾名思义,静态就是一个定长的数组;而动态就是可以动态开辟空间的数组。//静态#define N 9typedef int SLDatatypetypedef struct Seqlist{ SLDatatype arr[N];//定长数组 size_t s

2021-01-08 17:24:55 506

原创 找单身狗

问题描述:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。问题分析:我们只需要进行元素的遍历与比较即可完成对单身狗数字的查找。代码实现:我们拿到的数组不一定是个有序数组,这时候,我们需要先对数组进行排序以便于我们进行查找。 int arr[10] = {1,2,3,4,5,6,1,2,3,4 }; qsort(arr, 10, sizeof(int),CompInt);//对数组进行排序qsort函数没有比较功能,这时候我们需要写一个比

2020-11-25 17:21:27 278

原创 字符串库函数的模拟实现

1.strcat函数的模拟实现strcat函数是将两个字符串数组拼接在一起的函数#include<stdio.h>void strca_t(char arr[],char arr1[],int b){ char* s = arr; char* f = arr1; for (int i = 0; i < b; i++) { //将两个字符串按照指针形式进行拼接 *s = *f; s++, f++; } printf("%s", arr);//打印拼接好的字符串}

2020-11-18 20:23:27 163

原创 用一个数组计算并打印杨辉三角

用一个数组计算并打印杨辉三角#include<stdio.h>#define H 12 //需要打印的行数void Yang_hui(int arr[]){ int a = 1; int c = H - 1;//数组长度-1 int d = c; arr[0] = a; for (int i = 0; i < H; i++) { //打印第一行数组 if (arr[i] < 1) { //去除原数组初始化的值 break; }

2020-11-08 17:41:27 295

原创 用C语言写扫雷

用C语言写扫雷 首先,我们要清楚扫雷的逻辑。扫雷游戏就是点一个方块,如果是雷,那么你直接被炸死;如果不是雷 ,那么这个方块则会显示周围8个方块雷的个数。大概的逻辑就是这样。 现在,我们开始写这个代码。 先创建一个头文件,用来放我们的定义的常量以及库函数。#ifndef __GAME_H_#define __GAME_H_#include<stdio.h>#include<time.h>#include<string.h>#include&l

2020-10-31 18:46:09 212

空空如也

空空如也

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

TA关注的人

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