自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UDP/TCP简单对比

UDP(用户数据报协议)协议UDP协议是无连接的 : 只需知道对端IP和端口号就可以发送数据,不需要建立连接,双方感知不到对方的存在。UDP协议是不可靠的: 没有确认机制,不会对接收到的数据确认,就不知道对端是否收到。UDP协议是面向数据报的: 不能灵活的控制数据的读写次数和数量, 只能一次读完。UDP是支持全双工: 即双方可以同时进行读写操作。UDP的缓存区​ U...

2018-07-24 16:52:56 513

原创 Linux守护进程(精灵进程)

守护进程守护进程也称精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程(守护进程)不受用户登录注销的影响,它们一直在运行着。这种进程有一个名称叫守护进程(Daem...

2018-05-29 21:49:25 495

原创 Linux进程间关系

作业

2018-05-28 23:18:08 295

原创 死锁

死锁概念死锁可以定义为一组相互竞争资源或进行通信的进程间的“永久”阻塞。死锁的产生竞争不可抢占性资源引起死锁 假设有两个进程A、B A和B都需要对文件f1、f2进行写操作。 一个进程都必须独占f1、f2文件才能进行。 A、B并发执行,A得到了f1、B得到了f2,A需要f2但在B手里、B需要f1但在A手里,他们将无法继续进行下去,从而形成死锁。竞争可消耗资源所引...

2018-05-24 10:53:48 904

原创 Linux多线程(2)

线程多线程(1)线程同步与互斥mutex(互斥量) 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。 多个线程并发的操作共享变量,会带来一些问题。//有问题的售票系统#include &l...

2018-05-07 22:20:04 222

原创 Linux多线程(1)

线程线程的基本概念线程是进程的进一步细化,进程是系统分配资源的基本单位,而线程cpu调度的基本单位。 进程就像是包工头,获取到系统资源,然后再分配给它里面线程。 操作系统用于管理线程有个数据结构tcb,用来描述和管理线程。 而在Linux下称之为轻量级进程。和进程用同一块pcb来表示。 那么一个进程至少有一个线程。 线程共享进程一些数据,也有自己的一些数据。线程自己拥...

2018-05-06 10:56:21 329

原创 Linux进程信号(2)

信号(2)捕捉信号内核如何实现信号的捕捉 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信号的处理函数sighandler。 当前正在执行main函数,这时发生中断或异常切换到内核态。 在中断处理完毕后要返回用户态的main函数之前检查到有信号S...

2018-04-26 21:34:23 329

原创 Linux进程信号(1)

信号(1)信号的基本概念信号可以解释为:经商定作为采取一致行动的时刻的暗号。 通常我们在shell下运行一个前台程序,我们可以使用组合键ctrl + c来结束这个程序。而组合键ctrl + c就是向进程发送了一个信号,进程接收到信号采用对应的动作来处理信号,进而结束掉这个程序。查看信号 kill -l 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在s...

2018-04-26 17:39:07 197

原创 计算查找---哈希法

哈希搜索时有静态环境和动态环境。 静态环境下:在执行插入和删除等操作的前后搜索结构不会发生改变; 动态环境下:为保持较高的搜索效率,搜索结构在执行插入和删除等操作的前后将自动调整,结构可能会发生变化静态查找:只在数据元素集合中查找是否存在关键字等于某个给定关键字的数据元素。 动态查找:除包括静态查找的要求外,还包括在查找的过程中同时插入数据元素集合中不存在的元素,或者从数据元素集...

2018-04-14 11:17:17 512

原创 用C++模拟实现哈希表

哈希相关概念//comm.hpp#pragma onceconst int _PrimeSize = 28; //素数表static const unsigned long _PrimeList[_PrimeSize] ={ 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 1228...

2018-04-14 11:12:21 348

原创 进程概念

进程进程概念为了使程序并发的执行,并且对并发执行的程序加以描述和控制,人们引入了进程的概念,进而提高了硬件设备的利用率与系统的吞吐量。进程:是指在系统中作为系统资源分配的基本单位,由机器指令、数据和堆栈组成,是一个独立运行的活动实体。操作系统用于描述和管理进程的一个数据结构,称为进程控制块(Process Control Block, PCB);进程实例:由程序段,...

2018-04-03 21:32:10 185

原创 Linux下进程间通信(2)

进程间通信(2)共享内存共享内存是指多个进程看到同一块内存。 当然这块内存由操作系统维护。 需要通信的进程通过操作系统看到这块内存。简单示意图共享内存相关函数shmget函数 功能:用来创建共享内存 原型 int shmget(key_t key, size_t size, int shmflg); 参数 key:这个共享内存段名字 size:共享内存大...

2018-03-23 09:19:22 318 1

原创 Linux下进程间通信(1)

进程间通信(1) 进程间通信是指进程之间的消息交换。 进程间通信的实质是多个进程看到同一块资源.本文将介绍Linux系统下关于进程间通信的 - 管道 - 消息队列 - 共享内存 - 信号量 管道所谓管道,是指用于连接一个读进程一个写进程以实现它们之间通信的一个共享文件匿名管道创建匿名管道函数 参数:pipifd文件描述符数...

2018-03-22 19:55:26 236

原创 AVL树

二叉搜索树可以能够提高查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支 树,查找元素的效率将大大降低,由此 有了AVL树来解决这个问题。AVL树概念 一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 1、它的左右子树都是AVL树 2、左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1) 右树高度减左树高度 如果一棵二叉搜索树是高度...

2018-03-21 23:16:18 245

原创 二叉树的相关操作

C++实现二叉树

2017-12-05 22:51:05 286

原创 Linux----基本权限概念

一、基本权限概念Linux下有两种用户: 超级用户(root) 普通用户超级用户:可以做任何事,权限最高 普通用户:只能做有限的事超级用户的命令提示符’#’, 普通用户的命令提示符’$’ 使用su命令切换 命令:ls -l 文件名 列出详细信息 二、一些命令的权限...

2017-12-02 23:43:05 269

原创 模拟实现memcpy,memmove,memset

模拟实现memcpy,memmove,memset

2017-11-30 18:41:28 232

原创 稀疏矩阵的简单操作

稀疏矩阵压缩存储压缩存储值存储极少数的有效数据。使用{row,col,value}三元组(Trituple)存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放。#include #include #include using namespace std;template class SparseMatrix{ struct Trituple

2017-11-25 22:48:34 411

原创 栈的应用———迷宫问题

栈的应用———迷宫问题

2017-11-19 22:29:24 419

原创 String类简单实现

浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结果多个对象共用同一块内存,当一个对象将这块内存释放掉之后,另一些对象不知道该块空间已经还给了系统,以为还有效,所以在对这段内存进行操作的时候,发生了访问违规。深拷贝:为避免浅拷贝的问题,存在内存拷贝时开辟一块和被拷贝对象一样大小的空间并将其内存中的数据也拷贝到新开辟的内存中

2017-11-04 09:45:43 299

原创 模板小结

模板分为 函数模板 和 类模版泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段。模板是泛型编程的基础。函数模板 函数模板:代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的 特定类型版本。 模板函数的格式template<typename Param1, typename Param2,...,class Paramn> 返回值类型 函数名(参数列表){

2017-10-28 16:17:40 301

原创 list简单模拟实现

#define _CRT_SECURE_NO_WARNINGS#pragma once#include <assert.h>#include <iostream>using namespace std;template<class T>struct ListNode{ ListNode(const T& data = T()) :_pPre(0) , _pNex

2017-10-28 10:33:14 307

原创 Vector 简单模拟实现

Vector 简单模拟实现#define _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#pragma once#include <iostream>#include <assert.h>using namespace std;struct _TrueType // 实现类型萃取{ bool Get()

2017-10-28 10:19:46 293

原创 小结多态

一、静态多态静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。#include using namespace std;int add(int right, int left){ return right + left;}float add(float r

2017-10-17 17:55:02 176

原创 继承小结

继承是复用代码的重要手段也为动态多态提供了平台     定义格式:                  一、 继承关系    基类(父类)       派生类(子类)   派生类对象模型如图:                                                          类 缺少继承权限:默认权限为private

2017-10-08 22:21:05 217

原创 c++日期类

#include using namespace std;class Date{public: Date(int year = 2017, int month = 9, int day = 20) : _year(year) , _month(month) , _day(day) {} Date& operator=(const Date& d); // 前置++

2017-09-21 19:31:56 252

原创 C++类中的this指针

1、类中this指针就是当前对象的地址(类成员函数的默认的第一个隐含参数)可以在下面的例子中得到结论#include typedef struct student{ char num[20]; char name[20]; int age;}*pstudent;void SetStudent(student* pf, char* num, char* name, int

2017-09-18 16:19:22 571

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

#include #include #include char *my_strchr( char *dest, const char src){ while (*dest++){ if (*dest == src) return dest; } return NULL;}int main(){ char arr[20] = "abcddddef"; char a

2017-09-16 10:28:58 242

原创 复数类 运算符重载

#includeusing namespace std;class Complex{public: friend ostream& operator<<(ostream& _cout, Complex c); //输出函数需要访问私有成员,声明为友元函数 Complex(double real = 0.0, double image = 0.0); Comple

2017-09-14 21:11:51 716

原创 求解斐波那契数列的第n个数

斐波那契数列: 形如 1     2     3     5      8      13      21 ............一、递归求解#include #include int Fibonacci(int n){ int a = 1; int b = 2; if (n == 1) { return a; } else if (n == 2)

2017-09-07 20:16:04 1145

原创 一些关于链表的题

#ifndef __LINKLIST_H__#define __LINKLIST_H__#include #include #include #include typedef int DataType;typedef struct Node{ DataType data; struct Node* next;}Node ,*pNode ,*pList;typede

2017-09-07 20:10:22 259

原创 复杂链表的复制

复杂链表的复制过程如下图所示:#include #include #include #include typedef int DataType;typedef struct ComplexNode{ DataType data; struct ComplexNode* next; struct ComplexNode* random;}Compl

2017-09-07 19:32:58 203

原创 判断当前编译器是大端存储还是小端存储

首先什么是大端存储和小段存储?大端字节序存储:数据的低字节序的内容放在高地址                               高字节序的内容放在低地址小端字节序存储:数据的低字节序的内容放在低地址                               高字节序的内容放在高地址就像这样怎么判断呢?有两种方法第一种是一般

2017-07-20 10:40:11 1072

原创 压缩字符串

问题:将"abbbbcccdddff"压缩为a4b3c3d2f      思路:首先计算出有几个不同的字符,再将每个字符的个数存在一个数组, 最后使用循环压缩,定义i和j,一个指向放的位置,一个指向放的内容;#include #include #include void compress(char *p){ char *cur = p; char *duff = p;

2017-07-20 10:05:31 336

原创 有关结构体、位段的一些问题

结构体就是一个物体具有属性的集合,因此他的内部可以有许多的类型;那么他的大小是怎样计算的呢;需要知道结构体内存对其规则:1、第一个成员在与结构体变量偏移量为0的地址处。(偏移量 :与首地址的距离)2、其它成员变量要对齐到某个数字(对齐数)的整数倍的地址处//对齐数= 编辑器默认的一个对齐数 与 该成员大小的较小值。  vs中默认值为 8. liunx中默认值为 4.3、结构

2017-07-10 10:01:16 314

原创 关于数组方面的大小计算

在这些问题的核心是:只有数组名单独在sizeof内部时,才代表整个数组,别的地方数组名一般都代表数组首元素地址,&+数组名,代表整个数组。#include #include int main(){ int a[] = { 1, 2, 3, 4 }; printf("%d\n", sizeof(a));// 数组名a单独放在sizeof中代表整个数组 即 4*4=16 prin

2017-07-09 16:48:03 530

原创 如何将数组中奇数放在偶数前面。

将数组中奇数放在偶数前面。#include #include void adjust(int *left, int *right){ int tep = 0; while (left < right){ while ((left < right)&&((*left) % 2 == 0)){ while ((left < right)&&((*right) % 2 == 1

2017-05-22 20:28:35 711

原创 C语言,函数的调用过程(栈帧)

源程序:#include #include int Add(int x,int y){ int rec = 0; rec = x + y; return rec;}int main(){ int a = 2; int b = 3; int z = Add(a, b); printf("%d\n", z); system("pause"); return 0;}栈

2017-05-20 13:33:59 370

原创 C语言源程序(.c)如何变成可执行程序(.exe)

下面用一张图来说明:

2017-05-07 20:00:57 8136 1

原创 折半查找小程序

折半查找必须在有序数组中使用;(大小顺序)代码:#include #include int Two_Searching(int arr[], int x, int y){ int left = 0; int right = y ; int mid = 0; while (left <= right){ mid = left + ((right - left)

2017-05-07 19:20:28 523

空空如也

空空如也

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

TA关注的人

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