- 博客(81)
- 收藏
- 关注
原创 设计模式
设计模式一、创建型模式(5种)1.工厂方法模式2.抽象工厂模式3.单例模式4.建造者模式5.原型模式二、结构型模式(7种)1.适配器模式2.装饰器模式3.代理模式4.外观模式5.桥接模式6.组合模式7.享元模式三、行为模式(11种)1.策略模式2.模板方法模式3.观察者模式4.迭代子模式5.责任链模式6.命令模式7.备忘录模式8.状态模式9.访问者模式10.中介者模式11.解释器模式一、创建型...
2019-08-17 17:15:06
335
原创 分治法、动态规划法、回溯法、分支限定法、贪心算法
五大算法分治算法动态规划算法回溯法分支限界法贪心算法分治算法1、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……任何...
2019-08-17 16:59:10
1502
原创 死锁---银行家算法
----死锁死锁的四个必要条件避免死锁避免死锁算法银行家算法死锁死锁是指子啊一组进程中的各个进程均占有不会释放的资源,但因互相申请被其它进程所占用不会释放的资源而处于的一种永久等待状态。死锁的四个必要条件互斥条件:一个资源每次只能被一个执行流使用;请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放;不可剥夺条件:一个执行流已获得的资源,在未使用完之前,不能强行剥夺;...
2019-06-10 14:16:15
1040
原创 进程、线程、程序之间的区别与联系
...进程进程与程序的区别联系线程进程与线程的区别与联系进程与线程的优缺点比较进程进程是一个程序的动态运行实例一个正在执行的程序能分配处理器并由处理器执行的实体内核观点:担当分配系统资源(CPU时间,内存)的实体。进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。(进程在内存中因策略或调度需求会处于各种状态)进程与程序的区别联系...
2019-06-09 20:41:47
1241
原创 Linux下线程
Linux下线程线程概念什么是线程线程的优点线程的缺点线程异常线程用途线程控制POSIX线程库创建线程线程ID及进程地址空间布局线程终止线程等待分离线程线程互斥线程池线程安全单例模式饿汉方式懒汉方式设计模式线程概念什么是线程在一个程序里的一个执行卢西安诺就叫线程(thread);更准确的定义:线程是“是一个进程内部的控制序列”。一切进程只有都有个一个执行线程。线程在进程内部运行,本质是...
2019-06-09 11:34:38
193
原创 TCP/IP四层模型和OSI七层参考模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。 TCP/IP通讯协议采用了5层的层次,每一层都称呼它的下一层所提供的网络来完成自己的需求。物理层负责光/电信号的传递方式;比如现在以太网通用的网线(双绞线)、早期以太网采用的是同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用电磁波都属于物理层的概念;物理层的能力决定了最大传输速率、传输距离、抗...
2019-04-19 16:17:02
968
原创 进程间通信——管道、消息队列、共享内存、信号量
进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程...
2019-03-13 00:00:45
845
1
原创 exec函数族
1.exec函数说明fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。),也就是这两个进程做完全相同的事。在fork后的子进程中使用exec函数族...
2019-03-12 15:54:54
606
原创 僵尸进程vs孤儿进程
僵尸进程僵尸状态(Zombies)是一个比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程;僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态码;所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。来创建一个维持30秒的僵尸进程例子:#include <stdio.h>#include <...
2019-03-10 19:22:17
164
原创 进程
进程的概念狭义定义:进程是正在运行的实例。广义定义:进程是一个具有一定功能的程序关于某个数据集合的一次运行活动;它是操作系统动态执行的基本单元,在传统的操作系统中,既是基本的分配单元,也是基本的执行单元。进程的概念主要有两点:(1)进程是一个实体;每一个进程都有它自己的地址空间,一般情况下,包括文本区、数据区和堆栈区(文本区存储处理器执行的代码;数据区存储变量和进程执行期间使用的动态分配...
2019-03-10 18:14:59
139
原创 Windows与Linux虚拟机间的简单文件互传
基于Centos系统与Windows1.远程连接Centos系统这里需要在Windows上安装一个远程软件,例如Xshell或者secureCRT连接虚拟机。2.检查安装命令 sz rz命令输入 rpm -qa |grep sz 和 rpm -qa |grep rz 命令查看是否安装该程序;如果没有安装,可以输入 yum -install sz yum -ins...
2019-02-27 16:28:47
770
原创 指针和引用的对比
指针与引用是C++中两个很重要的概念,它们功能看过去很相似,就是都是间接引用某个对象,那么我们应该在什么时候使用指针,什么时候使用引用呢,下面请允许我慢慢道来:1.永远不要使用一个指向空值的引用。一个引用必须始终指向某个对象,所以当你确定使用一个变量指向某个对象时,但是这个对象在某些时间可能指向控制,这时候你就必须把变量声明为指针类型,而不是引用!当你确定这个变量始终指向某个对象是,这时候你就可...
2019-02-26 23:36:33
433
原创 函数重载、重写、重定义的对比
重载函数重载是指在一个类中声明了多个名称相同但参数列表不同的函数,这些参数可能个数、顺序、类型不同,不能靠返回值类型来判断。特征:在同一个作用域中;函数的名字相同;参数不同;返回值可以不同;函数重载与virtual修饰无关;函数重写(也称覆盖)函数重载是指子类重新定义基类的虚函数。特征:不在同一作用域(分别位于基类和派生类);函数名字相同;参数相同返回值相同,否...
2019-02-25 21:39:24
420
1
原创 C++输入+输出
C++的输入+输出输入和输出并不是C++语言中的正式组成成分;C和C++本身都没有为输入和输出提供专门的语句结构;输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用“流”(stream)的方式实现的:我们似乎看每本书开始的程序都是从hello world开始,那么我们来看看在C++中如何实现一个简单的hello world呢?#include &...
2018-11-09 12:52:55
1108
原创 C++命名空间
在C/C++中,变量,函数和类都是大量存在的,这些变量,函数和类的名称将都存在于全局作用域中,可能会导致很多冲突;使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。1.命名空间的定义定义命名空间,需要使用namespace关键字,后面加命名空间的名字,然后接一对{ }便可以了,{ }中为命名空间的成员。如下例所示:(1...
2018-11-08 22:19:29
415
原创 布隆过滤器
实现完整代码/***************************************************///BloomFilter.h#include "BitMap.h"#include "Common.h"typedef int(*PSTRTINT)(const char*);typedef struct BloomFilter{ BitMap _bmp;...
2018-10-26 16:47:35
238
原创 位图的实现
完整代码块/************************************************///BitMap.h#pragmatypedef struct BitMap{ int* _pBit;//bit位的集合 int _capacity;//bit位总的个数j int _size;//有效:bit位为1的个数}BitMap;//初始化void...
2018-10-18 14:37:16
286
原创 vim编辑器基本使用
vim:文本编辑工具----IDEvim中有几种模式?:12种(6种基本模式/6种条件模式)普通模式/插入模式/底行模式从普通模式进入插入模式: i 从光标位置开始插入,光标位置若有字符则后移 I 光标回到行首位置开始插入 a 光标移动到下一个字符处开始插入 A 光标移动到行尾开始插入 o 从光标所在行下一行添加新行,并进入插入模式 O 从光标所在行上一行添加新行,并进入插...
2018-10-17 08:47:58
306
原创 归并排序
归并排序#include &amp;amp;lt;string.h&amp;amp;gt;#include &amp;amp;lt;assert.h&amp;amp;gt;#include &amp;amp;lt;malloc.h&amp;amp;gt;void MergeData(int *array, int left, int middle, int right, int *temp){ in
2018-10-08 17:16:44
245
原创 快速排序
快速排序(1)在待排序的序列中找一个基准值—[left, right)— 区间中最后一个元素(2)方法:按基准值将序列分割成左右两部分(3)排基准值的左边(4)排基准值的右边//三数取中法(通过这种方法降低取到极值的概率)int GetMiddleIndex(int *array, int left, int right){ int mid = left + ((right -...
2018-10-08 17:13:13
284
原创 冒泡排序
冒泡排序//冒泡排序void BubbleSort(int *array, int size){ int i, j; for (i = 0; i &amp;lt; size; i++) { int isChange = 0; for (j = 0; j &amp;lt; size - i - 1; ++j) { if (array[j] &amp;gt; array[j + 1]) {...
2018-10-08 17:07:34
245
原创 堆排序
堆排序//堆排序void HeapSort(int *array, int size){ //1.建堆--升序--大堆 int end = size - 1; int root = ((size - 2) &amp;amp;gt;&amp;amp;gt; 1); for (; root &amp;amp;gt;= 0; --root) HeapAdjust(array, size, root); //2.排序---删除...
2018-10-08 17:03:06
222
原创 选择法排序
实现代码//选择法排序void SelectSort(int *array, int size){ int i; for (i = 0; i &amp;amp;lt; size - 1; ++i) { int j = 1; int maxPos = 0; for (; j &amp;amp;lt; size - i; ++j) { if (array[j] &amp;amp;gt; array[maxPos])...
2018-10-05 19:55:46
1887
原创 希尔排序
实现代码块//希尔排序void ShellSort(int *array, int size){ //int gap = 3; //int gap = gap / 3 + 1;这个方式较优 int gap = size; while (gap &amp;amp;amp;amp;amp;amp;gt; 1) { int i = 0; gap = gap / 3 + 1; for (i = gap; i &amp;amp;amp;amp;amp;am
2018-10-05 16:04:59
271
原创 插入法排序
实现代码#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;//打印函数void PrintArray(int *array, int size){ int i = 0; for (; i &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; size; i++) { pri
2018-10-03 23:15:00
6187
原创 哈希桶(开散列)
完整代码块/***************************************///HashBucket.h#pragma oncetypedef int HBDataType;typedef struct HashBucketNode{struct HashBucketNode *_pNext;HBDataType _data;}Node, *PNode;//将d...
2018-10-02 20:53:06
332
原创 哈希算法的优化(闭散列)
完整代码块/***************************************///Hash_OP.h#define MAX_SIZE 10//typedef int DataType;typedef char *DataType;typedef int(*PDTInt)(DataType data);//转int类型typedef enum{ EXIST, E...
2018-10-02 20:16:52
770
原创 Linux系统目录的结构
1.Linux系统目录结构与Windows系统结构的区别在windows操作系统中,主分区和逻辑分区也被称为驱动,会被分配一个驱动字母(例如:C D E),每个驱动都有自己的根目录结构;与Windows操作有所不同的,Linux文件系统不使用驱动器这个概念,而且Linux文件系统使用单一的根目录结构,所有的分区都挂在到根目录(/)上.2.Linux系统下根目录清单bin dev ho...
2018-09-18 17:32:13
469
原创 Linux基础命令
linux环境下一切皆文件命名名称 [操作选项] [操作源对象] [操作目标对象]1.对目录进行操作(目录=文件夹)(1)ls: 默认查看当前目录下的内容 -a 查看隐藏文件 linux下以.开头的文件是隐藏文件,默认不显示 . 当前目录 .. 当前目录的上一层目录 ...
2018-09-10 16:27:24
276
原创 蛇形数组的实现
实现代码#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;Windows.h&amp;amp;amp;gt;#define N 10int arr[N][N] = {0};void show(voi
2018-09-04 21:00:54
656
1
原创 一个简单的日历查找
实现代码#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>int months[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, ...
2018-09-04 20:57:03
355
原创 八皇后(n皇后)问题
问题描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。 八皇后问题最早是由国际西...
2018-09-04 20:48:22
394
原创 哈希算法(闭散列)
模块代码函数 【1.定义一个哈希算法结构体】#define MAX_SIZE 10typedef int DataType;typedef enum{EXIST, EMPTY, DELETE}State;typedef struct HTElem{ DataType _data; State _state;}HTElem;typedef struct ...
2018-09-03 14:26:45
415
原创 堆排序(升序)
堆排序操作//堆排序向下调整void HeapAdjustDown(int *arr, int size, int parent){ int child = parent * 2 + 1; assert(arr); //while (child &amp;lt; size) //{ // if (child + 1 &amp;lt; size &amp;amp;&amp;amp;...
2018-09-02 12:01:08
1156
原创 优先级队列(堆)
模块函数 【1.定义一个优先级队列结构体】结构体中放一个堆类型的元素typedef struct PriorityQueue{ Heap _hp;}PriorityQueue;【2.初始化优先级队列】调用堆初始化函数进行操作void InitPriorityQueue(PriorityQueue* q){ InitHeap(&q-...
2018-09-02 11:49:11
399
原创 二叉搜索树的基本操作
完整代码块/*************************************************///BSTree.htypedef int SDataType;typedef struct BSTNode{ struct BSTNode *_pLeft; struct BSTNode *_pRight; SDataType _data;...
2018-08-31 00:02:27
308
原创 堆的基本操作
模块代码 【1.创建堆结构体】存放堆的数组堆的容量堆的长度typedef int HPDataType;//接受两个指针类型的参数,返回整形的函数指针typedef int(*PCompare)(HPDataType left, HPDataType right);typedef struct Heap{ HPDataType *_array; int...
2018-08-30 23:57:08
214
原创 二叉树的基本操作及面试题
完整代码/************************************///BinTree.htypedef int BDataType;typedef struct BTNode{ struct BTNode *_pLeft; struct BTNode *_pRight; BDataType data;}BTNode;//创建二叉树...
2018-08-29 17:53:45
490
原创 简易的贪吃蛇小游戏
/***********************************************///Snake.h#ifndef __SNAKE_H__#define __SNAKE_H__#include <Windows.h>#include <stdio.h>#include <stdlib.h>#define WALL "◆"#...
2018-08-29 17:36:53
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人