自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【网络】简单的UDP网络程序

UDP的特点:无连接, 不可靠, 面向数据报传输UDP网络程序通信流程及接口介绍:服务端:1. 创建套接字int socket(int domain, int type, int protocol);domain: 地址域 AF_INET: IPV4网络协议地址域type: 套接字类型 SOCK_STREAM: 字节流---可靠,双向 SOCK_DGRAM: 数据报套接字---无连接,不可靠protocol: 协议类型 0: 使用套

2020-08-31 18:47:26 271

原创 【c++】红黑树

红黑树一. 概念 红黑树本质上也是一种二叉搜索树, 只不过在每个节点上增加了一个存储位表示当前节点的颜色, 可以是RED或者BLACK, 通过对每个节点颜色的限制, 使得红黑树是一棵接近平衡的树. 例如 :二. 性质每个节点的颜色只有黑色和红色两种 根节点一定是黑色的 红色节点不能相连, 即如果一个节点是红色, 它的左右孩子一定是黑色 对于任何...

2020-07-31 17:49:54 152

原创 【操作系统】进程调度算法-FCFS-SJF-RR

目录进程调度的概念引起进程调度的原因进程调度算法先来先服务算法(FCFS)短作业优先算法(SJF)时间片轮转算法(RR)进程调度源码程序源码运行结果进程调度的概念 首先我们简洁明了的说, 进程调度就是决定内存中的就绪队列中的那个进程将获得处理机, 进程调度是操作系统中必不可少的一种调度, 因为我们在电脑上运行的进程很多, 我们在运行进程的...

2019-12-06 01:12:27 1929 1

原创 【c++】string类模拟实现

目录string有什么用?string类的使用模拟实现string类string有什么用? C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,比如strstr, strcpy,strcmp, strcat等等, 但是这些库函数与字符串是分离开的,不太符合面向对象的思想,而且底层空间需要用户自己管理. 相比较来...

2019-11-14 17:01:20 155

原创 【Linux】进程间通信---共享内存

共享内存 基于共享存储区的通信方式, 为了传输大量数据, 在内存中划出了一块共享存储区域, 通信的进程都可以对这块内存进行操作, 通过对该内存的读或写交换信息, 实现通信, 这种通信属于高级通信, 通信的进程在通信前先向系统申请一块空间, 然后将这块空间映射到自己的虚拟地址空间中, 使用完成后不再需要的话再将归还给系统 共享内存是所有进程间通信方式中最快的一种...

2019-10-22 12:51:53 202

原创 【c++】STL初识

目录什么是STL?STL的版本STL的组件STL的优缺点什么是STL? STL是一套标准模板库, 是c++标准库的重要组成部分, 也是一个可以复用的组件库, 同样是一个包括了数据结构和算法的软件框架, 它是惠普实验室开发的一系列软件的总称STL的版本HP STL 在惠普实验室完成的原始版本, 是开源的, 但是要求要是使用也必须像原始版本...

2019-10-17 19:49:25 109

原创 【数据结构】队列的实现

队列概念 队列也是一种特殊的线性表, 只允许在一端进行擦汗如操作, 另一端进行删除操作, 元素具有先进先出的特点, 插入操作的一端叫做队尾, 删除的一段叫做队头.实现 队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据效率会比较低。使用链表的话我们使用尾插和头删, 时间复杂度都是O(1), 效率更高一点....

2019-10-07 18:13:30 297

原创 【数据结构】顺序栈的实现

概念 栈实际上是一种特殊的线性表, 只是对插入删除进行了限制, 只能在一端进行插入删除, 插入删除的一端叫栈顶,另一端叫栈底 栈中的元素遵循先进后出的原则 压栈 :栈的插入操作,也叫入栈,入数据在栈顶 出栈 : 栈的删除操作叫做出栈, 出数据也在栈顶实现 栈的实现一般可以使用顺序表或者链表实现, 相对而言顺序表的结构实现更优一些, 因为顺序表尾...

2019-10-07 13:53:56 145

原创 【数据结构】顺序表和单链表的区别

我们前两篇已经自助实现了顺序表和链表,那么我们现在来看一下它们的区别 顺序表 单链表 随机访问 支持 ...

2019-10-02 23:37:06 310

原创 【数据结构】带头双向循环链表的实现

带头双向循环链表 上一篇我们写了无头单向非循环链表,我们了解了,链表有8中结构,但是最常见的就是这两种,在很多笔试题中都是单向链表,但是在实际工作中用双向链表又更多一点,因为双向链表比单链表效率更高,双链表结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了 其实写了单链表之后再看双链表其实非常简单,只不过就是多了一个指针域而已,再...

2019-10-02 23:05:26 123

原创 【数据结构】无头单向非循环链表

链表首先我们来思考一个问题:为什么要有链表这种结构呢? 上次我们写了顺序表, 其实本质上也就是一个数组, 它已经可以完成数据的存储和访问了, 但是它还存在一些不可避免的问题 1. 顺序表的中间和头部的插入删除的时间复杂度都是O(n), 复杂度太高 2. 增容的时候需要申请新的空间, 还要完成数据从旧空间到新空间的数据拷贝过程, 再释放旧空间, 消耗非常大 3. ...

2019-09-28 23:22:12 128

原创 【Linux】动态库/静态库(详解)

目录动态库/静态库 概念例子生成库生成动态库生成静态库使用库使用动态库使用静态库总结动态库/静态库 首先, 我们先来看一下gcc的编译过程1.预处理 : 展开所有代码, 所有的宏定义,所有的条件编译指令,删除所有注释等2. 编译 : 代码的语义语法纠错, 完毕之后生成汇编代码3. 汇编 : 将汇编代码解释成为机器语言...

2019-09-27 18:29:39 323

原创 【数据结构】动态顺序表

线性表 在说顺序表之前我们先来了解一下线性表, 线性表就是n个类型相同的数据元素的有限序列. 线性表在逻辑上是线性的结构, 可以理解为一条直线, 但是在物理上不一定是连续的, 物理上通常是以数组和链式结构形式存储 比如:顺序表概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据...

2019-09-26 21:19:44 196

原创 【LeetCode】234.回文链表

回文链表题目描述:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题思路: 既然是回文, 那么肯定就是一个对称的链表, 我们可以先找到中间结点, 然后将后半部分的进行反转, 然后定义两个指针, 进行比较. 可能这样说还是不太清楚, 那么...

2019-09-24 14:08:25 90

原创 【Linux】进程间通信---管道

进程间通信概念进程间通信是干什么的? 我们先来思考一个问题,当两个人面对面交谈的时候,为什么一个人能够听得见另一个人说话呢,是因为声音有空气作为介质,通过空气这个介质,双方才得以听到对方的讲话,进程间通信就和人与人说话一样,通过一个公共的媒介, 进行进程间的数据传输, 资源共享,进程之间的协同控制, 事件通知等等.目的操作系统为什么要给用户提...

2019-09-22 18:56:50 220

原创 【c++】模板

目录模板1. 泛型编程泛型编程概念:2. 函数模板概念格式原理实例化隐式实例化显式实例化模板参数的匹配原则3.类模板定义格式举例实例化模板实现动态顺序表模板 这篇博客我们要说的是:泛型编程,函数模板,类模板1. 泛型编程 我们先来看一段代码void Swap_int(int &a, int &am...

2019-09-22 18:56:19 125

原创 【c++】单例模式

要说单例模式我们先来说设计模式设计模式 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是针对设计问题的通用解决方案。使用设计模式的目的 使用设计模式的目的:为了代码可重用性、让代码更容...

2019-09-16 09:22:36 102

原创 【c++】c/c++内存管理

目录内存管理c/c++程序中的内存分布C语言内存管理方式malloc / calloc / realloc / freeC++内存管理方式1. new/ delete 操作内置类型2. new/ delete 操作自定义类型operator new和 operator delete对于内置类型对于自定义类型定位new表达式常见的几个问题1.mal...

2019-09-16 09:17:24 200

原创 【Linux】基础IO

基础IO 学习IO相关操作, 系统调用接口, 文件描述符, 理解重定向功能,认识软硬链接, 对比区别.标准库IO接口(stdio.h) 接口描述1.FILE *fopen(const char *pathname, const char *mode)描述 : 以指定的方式打开一个文件参数: pathname: 路径 mode : 打开方式...

2019-09-16 09:15:47 173 1

原创 【Linux】进程控制(创建, 终止, 等待, 程序替换)

目录进程控制进程创建fork()vfork()fork 与 vfork的区别进程终止 进程终止的场景 : 进程终止有三种方式 : 进程退出返回值进程等待为什么要进行进程等待?进程等待的方法获取进程退出返回值程序替换替换函数具体替换 :进程控制 进程控制大概分为 : 进程创建, 进程退出, 进程等待,...

2019-09-04 12:37:58 432 2

原创 【Linux】自主实现shell

大概流程图普通minishell具体的代码实现#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <ctype.h>#include <sys/wait.h>int main(){...

2019-09-04 00:43:15 246

原创 【Linux】虚拟地址空间,页表,写时拷贝技术

虚拟地址空间 && 页表 我们先来看一段代码#include <stdio.h>#include <unistd.h>#include <stdlib.h>int a = 0;int main(){ pid_t id = fork(); if (id < 0) { perror("fork"); re...

2019-09-03 00:37:14 551

原创 【剑指offer】数组中出现次数超过一半的数字

这道题拿到之后很多人的思想就是排序, 可是排序无论是快排还是其它的一些排序的时间复杂度都不能达到O(n), 我们可以直接重新定义一个数组,数组的下标为numbers的值, 下表对应的值为当前字符出现的次数, 对原来的数组进行一次遍历, 遍历的时候比较一下当前下标对应的值有没有大于数组的一半,有的话就返回这个值, 如果遍历一遍了还是没有, 那就是没有这样的一个数存在, 我在这里用的...

2019-09-02 09:49:39 152 1

原创 【c++】类和对象(基础超详解)

类的定义class student{ //主体 : 包括成员函数和成员变量}; //注意分号 上面就是一个基本的类的定义, 当然还可以细分, 接下来我们继续看 : 类中的元素成为类的成员, 有两种 : 成员变量和成员函数 类的定义方式有两种 : 1. 声明和定义全部放在类中 2. 声明放在.h文件中, 类的定义放在....

2019-08-27 17:04:37 700 1

原创 【Linux】Linux下使用git上传文件到GitHub

Linux上使用git步骤 :1. 打开github复制仓库链接2. 进入Linux中创建一个文件夹并且克隆仓库git clone URL比如 : git clone https://github.com/qjl000312/code.git 这里把链接改成自己的就好了 这个时候已经把库克隆过来了3. 将修改文件从工作区提交到...

2019-08-26 13:32:34 2704

原创 【c++】红黑树模拟实现Map / Set

关联式容器 容器有序列式容器和关联式容器 序列式容器有 : vector, string, list, deque, 等等 关联式容器有: map / multimap, set / multimap 关联式容器有树形结构和哈希结构, 今天我们主要说的是树形结构, 后面我们会给出哈希结构键值对 表示具有一一对应...

2019-08-24 23:22:03 395

原创 【c++】AVL树 --- 基本操作

AVL树一 . 概念 二叉搜索树可以缩短查找的效率,但是如果数据有序或者接近有序的时候可能会退化为单支树,再查找的话相当于再一个顺序表中的查找, 这个时候效率就会很低, 达不到预期的效果, 比如: 基于上面情况, 所以有了AVL树,即向二叉搜索树中插入结点的时候进行调整,使得每个结点的左右子树的高度差不超过一,这样就可以降低树的高度, 从而提高查找的效率, 比如 :...

2019-08-18 01:08:49 242

原创 【c++】二叉搜索树---基本操作

二叉搜索树 前面我们写过二叉树, 两种树基本是相同的结构, 但是二叉搜索树又有固定的一些条件, 下来我们一起看.一.定义 :二叉搜索树又称二叉排序树, 它有两种可能1. 空树2. 非空树, 满足 : a.若左子树不为空, 则左子树上所有的点都小与根节点 b. 若右子树不为空, 则右子树上所有的点都大于根节点 c. 它的左右子树也分别为二...

2019-08-16 17:46:00 138

原创 [c]扫雷

写过的一个简单版的扫雷, 逻辑也比较简单, 里面注释写的比较清楚, 直接上代码.#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <time.h>#define ROW 9#define COL 9#define M_count 1...

2019-08-12 12:08:51 84

原创 【c++】 c++入门

目录一.命名空间 : (解决命名冲突)二.输入输出(标准输入输出流)三.函数重载(和返回值类型无关)四.extern "C"五.缺省参数六.引用七. 内联函数八.auto关键字九.基于范围的for循环十.指针空值一.命名空间 : (解决命名冲突) 1.在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于...

2019-06-21 15:50:57 308

原创 【Linux】进程概念

进程概念 进程是什么? 用户角度:正在运行的程序操作系统角度:进程是操作系统对运行中的程序的描述信息-进程描述符-统称PCB ***当你要运行一个程序,操作系统知道了你要运行这个程序,它会创建一个PCB,将这个程序加载到内存中,用内存指针将PCB与你内存里面的数据连接起来.说白了PCB就是一个指针,保存的是你要运行的...

2019-05-05 23:10:26 140

原创 【LeetCode】链表面试题---138. 复制带随机指针的链表

给定一个链表, 每个节点包含一个额外增加的随机指针random, 该指针可以指向链表中的任何节点或空节点, 要求返回这个链表的深拷贝。typedef struct ListNode{ int val; struct ListNode*next; struct ListNode*random;} ListNode; 我们要返回一个原来链表的深度拷贝,...

2019-04-25 00:55:17 156

原创 【Linux】常用工具(vim,gcc,gdb,附加---进度条程序)

目录一.工具1 . 编辑器2.编译器3.调试器二.使用 1.vim编辑器 2.编译器:gcc/g++ make 3.调试器:gdb 下面是一个Linux--->vim中自主实现的进度条程序 今天我们来说一说Linux下一些常用的工具,包括编辑器,编译器,调试器和一些基本的使用方法一.工具1 . 编辑器...

2019-04-21 00:55:31 227

原创 [数据结构]二叉树基本操作(遍历,查找,节点个数)

二叉树 : 二叉树基本概念 : 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。 二叉树的特点: 1. 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。 2. 二叉树的子树有左右之分,其子树的次序不能颠倒。 相信二叉树对于我们来说并不陌生,今天我们看一些二叉树的...

2019-04-10 23:43:58 1436

原创 【Linux】权限.

大家好,今天我们来说一说Linux下的一些权限知识.文件的权限: 文件权限对用户分类 u(文件所有者) , g(文件所属组) , o(其他用户) 权限对具体操作的分类 r(可读) , w(可写) , x(可执行)权限命令: 1.umask 查看/设置文件的创建...

2019-03-24 15:53:02 152

原创 【C语言】(谁是凶手,比赛结果,杨辉三角)

有一段时间没有更新了,最近忙于复习,代码在写但是没太写博客,有点不好意思.几道简单的题:1.5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。#include&lt...

2019-01-03 22:22:23 241

原创 【C语言】函数递归以及相应习题(编译环境:vs2013)

函数递归1)什么是递归? 程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过 程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一 个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复 计算,大大地减少了程序的代码量。递归的主要思考方式在...

2018-12-16 23:13:29 324

原创 【C语言】五子棋(编译环境:vs2013)

今天写了五子棋的代码,虽然这个程序不是特别的难,但是对于我这个C语言小白来说还真的是有点开心,写这个程序的时候最重要的是先搭建框架,再一步步实现具体代码.基本思路:用一个二维数组表示棋盘(5 * 5),默认初始化成空格' ',用字符'x'表示玩家的落子,用'o'表示电脑打的落子,轮到玩家落子,就提示玩家进行落子(输入一组坐标),轮到电脑落子,随机下(随机找一个空白...

2018-12-10 01:02:48 1023 1

原创 【C语言】函数在程序中的简单使用(编译环境:vs2013)

函数的使用:函数是什么? 数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义: 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成...

2018-12-09 00:14:59 480

原创 【C语言】猜数游戏,有序数组中找数,模拟登陆,字符输入

C语言习题:(编译环境为:VS2013)1.完成猜数字游戏。2.写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)3.编写代码模拟三次密码输入的场景。最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。4.编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的...

2018-12-06 16:25:41 324

空空如也

空空如也

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

TA关注的人

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