自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木头的博客

编程之路

  • 博客(52)
  • 收藏
  • 关注

原创 使用c语言实现飞机游戏

在这里,我主要使用scanf函数和printf函数来实现一个简单的飞机游戏,并且通过函数的形式实现,同时,感谢 童晶 老师的教程,链接https://zhuanlan.zhihu.com/c2game 编译器:vs整体思路main函数 在这里,主要是使用一个简易的游戏框架,来减小开发游戏时的难度int main(){ startup();//初始化...

2018-08-14 10:21:12 24073 3

原创 C++ — 智能指针二

shared_ptrshared_ptr的原理: 是通过引用计数的方式来实现多个shared_ptr对象之间共享资源。shared_ptr在其内部,给每个资源都维护了着一份计数,用来记录该份资源被几个对象共享。在对象被销毁时(也就是析构函数调用),就说明自己不使用该资源了,对象的引用计数减一。如果引用计数是0,就说明自己是最后一个使用该资源的对象,必须释放该资源。如果不是0,就说明除了...

2019-08-09 14:50:41 223

原创 C++ — 智能指针一

RAII资源获得及初始化,获得资源马上进行初始化是一种利用对象生命周期来控制程序资源(如内存、文件句 柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。//智能指针专门用来管理动态开辟的空间//RAII不等价于只能指针//RAII是解决问...

2019-08-06 09:29:30 184

原创 C++ — 多态

多态的概念通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态定义的构成条件基类中必须存在虚函数,派生类必须对基类中的虚函数进行重写必须通过基类的指针或者引用来调用虚函数虚函数:被virtual修饰的类成员函数称为虚函数。虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全...

2019-07-27 17:31:20 196

原创 C++ — 继承

继承的基本概念继承(inheritance)机制 是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在 保持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承的定义//基类class Person {};//派生类//class...

2019-07-26 16:39:38 246

原创 C++ — 模板

函数模板

2019-07-23 16:31:12 139

原创 用C语言实现贪吃蛇游戏

1

2019-07-20 11:41:38 2302 2

原创 Linux — 高级IO

IO分两步等待数据拷贝五种IO模型阻塞IO在内核将数据准备好之前,系统调用会一直等待。 所有的套接字,默认都是阻塞方式。非阻塞IO如果内核还未将数据准备好,系统调用会直接返回, 并且返回EWOULDBLOCK错误码。非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符,这个过程称为轮询。 这对CPU来说是较大的浪费,一 般只有特定场景下才使用。信号驱动IO内核将数据准...

2019-07-16 09:36:11 183

原创 Linux — 网络基础三

网络层负责地址管理和路由选择通过对地址的管理,能够保证数据从一台主机发送到另一台主机,并且选择合适的路径进行传输。IP协议主机: 两端的PC路由器: 实现中间数据转发的设备节点: 网络中的每个设备都是一个节点IP地址: 网络中唯一标识一台主机地址管理: 因为现在大量的私网建立(通过DHCP/NAT技术实现全民上网),在复杂的网络中实现通信就要进行良好的地址管理,因此只有良好的地址管...

2019-07-13 10:14:38 288

原创 Linux — 网络基础二

应用层负责应用程序之间的数据沟通网络通信协议: 网络数据传输中的数据格式规定自定义协议序列化: 将数据对象按照持久化存储或者网络数据传输的格式来排布。反序列化: 对持久化存储或者传输的数据以指定的协议进行解析的过程。知名协议HTTP ——超文本传输协议URL —— 统一资源定位符(网址)URL编码因为URL中特殊字符都具有特殊含义,因此查询字符串中有特殊字符时,会造成二义性,...

2019-07-12 20:03:25 107

原创 Linux — 网络套接字编程

网络套接字编程,主要是针对于传输层,因为传输层有两个协议tcp/udp,因此我们必须选择其一进行数据传输,选哪个那,这种时候我们必须就要明了两个协议的优缺点,视使用场景而定。TCP协议优点: 可靠传输,并且传输灵活缺点: 传输速度低,数据粘包UDP协议优点: 传输速度快、无粘包缺点: 不可靠针对数据安全要求高的场景(文件传输)使用TCP保证数据的可靠。针对数据安全性要求不是很高,但...

2019-06-24 19:02:56 308

原创 Linux — 网络基础一

协议网络中主机之间进行通信必须使用相同的协议,协议可理解为“规则”,是数据传输和数据的解释的规则。协议就是一个相互能够识别的约定,在网络中因为主机设备的生产厂商很多,每个厂商如果都使用自己的协议进行通信,那么导致网络上主机间无法正常通信,这个时候需要某些大型组织来设计一个标准的协议,然后各个厂商都使用这个协议进行通信,这个时候就能实现网络全覆盖通信。网络间的数据传输就必须使用同一个标准协议—...

2019-06-21 10:13:58 101

原创 c++ — 类与对象

2019-06-02 15:23:27 153

原创 c++ — 基础语法

C++输入&输出使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含头文件以及std标准命名空间。#include using namespace std;在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;//输入cin //>> 输入运算符cin&

2019-06-02 09:38:06 143

原创 Linux — 多线程

线程概念Linux下没有真正的线程,因为Linux下的线程是用进程pcb模拟的(也就是说Linux下pcb实际上是一个线程),所以Linux下的线程也被叫做轻量级进程。既然Linux下pcb成了线程,那么进程变成了线程组。线程是进程的一条执行流,Linux下线程是以进程的pcb模拟的,所以才说Linux下的线程是轻量级进程,因此Linux下的线程是cpu调度的基本单位。Linux下的进程成...

2019-04-27 16:40:04 268

原创 Linux — 进程信号

信号更多的是通知事件的发生,信号产生之后第一时间也不是直接处理,而是先存储下来,处理信号时会打断当前进程正在执行的工作,然后去准备处理事件,事件处理完毕之后进程会回到原先运行的位置继续运行。Linux下有62种信号,可以使用 kill -l 查看分类1-31不可靠信号(非实时信号)34-64可靠信号(实时信号)注:在书写程序时,建议书写信号宏名,便于跨平台信号的生命周期: 信...

2019-04-26 19:09:37 134

原创 Linux — 进程间通信

进程间的通信方式管道管道符 | 连接两个命令,将前面命令的结果交给后面的命令处理重定向 修改数据流向> 标准输出(终端显示器)重定向 清除原有内容,将新内容写入>> 标准输出(终端显示器)重定向 向原有内容最后追加内容原理: 操作系统在内核中提供一块缓冲区(只要进程能够访问到这块缓冲区就可以实现)管道创建成功后,会...

2019-04-23 08:17:35 151

原创 Linux — 基础IO

标准C IOfopen(); //打开文件FILE *fopen( const char *filename, const char *mode );fclose(); //关闭文件int fclose(FILE *stream)fseek(); //将文件指针移动到指定位置。int fseek( FILE *stream, long offset, int or...

2019-04-22 21:22:51 153

原创 Linux — 进程控制

进程创建进程终止进程等待进程替换模拟实现minishell

2019-04-19 16:30:29 564

原创 Linux — 进程概念

进程基本概念进程状态进程优先级环境变量进程地址空间进程调度队列

2019-04-17 21:14:30 115

原创 Linux — 环境开发工具的使用

vim——文本编辑工具gcc——编译工具Makefilegdb——程序调试工具yum 软件包管理工具

2019-04-13 17:49:04 124

原创 Linux — 基础知识

环境:Linux系统目录结构——树状结构树状结构以下是对目录的解释/bindevhomebootetcliblost+foundmediamntoptprocrootsbinselinuxsrvsys

2019-04-12 19:05:07 95

原创 排序

2019-01-15 09:04:15 142

原创 用C语言实现FlappyBird

在《FlappyBird》这款游戏中,玩家需要用一根手指来操控小鸟往上飞,不断的点击屏幕就会不断的往高处飞。放松手指,则会快速下降。所以玩家要控制小鸟一直向前飞行,然后注意躲避途中高低不平的管子得分。在这里,我们主要使用C语言中的printf和scanf函数实现一个简单的FlappyBird游戏整体思路在开始游戏之前,我们先了解一些辅助函数void gotoxy(int x, in...

2018-12-16 16:30:31 7848 3

原创 哈希表—开散列

2018-12-14 22:05:11 297

原创 哈希表—闭散列

2018-12-14 22:03:12 201

原创 堆的应用

优先级队列定义typedef int PQDataType;typedef struct PriortQueue{ Heap heap;}PriortQueue, *pPriortQueue;初始化void InitPriortQueue(pPriortQueue pqueue){ assert(pqueue); int arr[] = { 53, 17, 78, 9, ...

2018-12-13 19:58:38 121

原创 二叉搜索树的基本操作

2018-12-13 19:28:32 364

原创 反弹球消砖块游戏

反弹球消砖块,是一款很简单的打砖块游戏,控制你的挡板挡住弹球,打掉上面的砖块,本片博客中,主要使用printf与scanf函数实现消砖块游戏整体思路主函数int main(){ startup();//初始化 while (1) { show();//显示画面 updateWitoutIput();//与用户输入无关的更新 //更新数据 updateWithIn...

2018-12-11 22:16:02 5570

原创 堆的基本操作

堆的定义typedef int HPDataType;typedef int(*pCompar)(HPDataType left, HPDataType right);typedef struct Heap{ HPDataType* _hp; //保存堆的数组 int _Capecity; //容量 int _size;//元素个数 pCompar _compar; //函数指针...

2018-12-10 20:47:40 129

原创 二叉树的基本操作

2018-12-10 20:36:40 105

原创 栈、队列面试题

注:本文中所使用的栈、链表的基本操作均在《顺序栈》、《链式队列》中。链接:https://blog.csdn.net/lw13572259173/article/details/82927983https://blog.csdn.net/lw13572259173/article/details/84866916Min栈定义在这里,主要使用的方式为使用两个栈实现一个Min栈,一个...

2018-12-09 21:09:35 107

原创 链式队列

队列的基本操作队列的定义—带头结点typedef int QDataNode;typedef struct QListNode{ struct QListNode * _next; QDataNode _data;}QListNode, *pQListNode;typedef struct Queue{ pQListNode _pFront;//队头指针 pQListNod...

2018-12-09 20:35:09 100

原创 迷宫

整体思路实现一个迷宫,主要是利用栈的“先进后出”特性,每走一步,进行一次入栈,若遇到死路,则向后退一步,即出栈操作,直到找到出口或者后退到出口为止。本篇博客中主要使用回溯法来实现迷宫。回溯法:对一个包括有很多个结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续搜索该节点外的其...

2018-12-06 23:00:12 168

原创 顺序栈

栈的基本操作栈的定义#define MAXSIZE 10typedef int SDataType;typedef struct Stack{ SDataType array[MAXSIZE]; int Top;}Stack, *pStack;初始化void StackInit(pStack pstack){ assert(pstack); pstack->Top...

2018-12-06 20:14:26 113

原创 双向链表

双向链表的定义typedef int DataPyte;typedef struct DNode{ struct DNode* _next; struct DNode* _pPre; DataPyte data;}DNode, *pDNode, DList, *pDList;创建一个新结点pDNode BuyNode(DataPyte d){ pDNode pdnode...

2018-12-06 20:13:47 94

原创 带头结点的单链表

带头单链表的定义typedef int SHDataType;typedef struct SHListNode{ SHDataType data; struct SHListNode *next;}SHNode, *pSHNode, SHList, *pSHList;创建一个新结点pSHNode SHBuyNode(SHDataType d){ pSHNode pnode ...

2018-12-06 20:02:01 201

原创 链表面试题3——复杂链表

复杂链表的定义typedef struct CLNode //复杂链表{ DataType data; struct CLNode* next; struct CLNode* random; //随机域}clNode, *clpNode, clList,*clpList;

2018-09-18 21:15:12 146

原创 链表面试题2——带环问题

链表带环问题单链表实现约瑟夫环约瑟夫环:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。pNode LinkListToJoseph(pList * pplist)//单链表实现约瑟夫环{ assert(pplis...

2018-09-17 18:16:57 149

原创 链表面试题——不带环问题

注:本篇博客中所使用单链表基本操作函数均可在《线性数据结构——链表》中找到,链接https://blog.csdn.net/lw13572259173/article/details/81281601从尾到头打印单链表void PrintTailToHead(pList plist){ //递归 //从最后一个开始打印,直到第一个 //if (pl...

2018-09-16 22:02:52 120

空空如也

空空如也

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

TA关注的人

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