- 博客(30)
- 收藏
- 关注
原创 成员函数重载、覆盖和隐藏的区别
(1)成员函数被重载的特征: a. 相同作用域 b. 函数名相同 c. 参数列表不同 d. virtual 关键字可有可无(2)覆盖是指派生类函数覆盖基类函数,特征是: a. 不同作用域(分别位于派生类和基类中) b. 函数名相同 c. 参数相同 d. 基类中必须要有virtual 关键...
2018-06-03 21:39:58
406
原创 二叉树
一、二叉树相关的概念 树(tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任何一棵非空树中:(1)有且仅有一个特定的成为根的结点(root);(2)当n>1时,其余结点可分为m(m<0)个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树,如下图所示:结点拥有的子树称为结点的度;度为0的结点称之为叶子节点或终端结点;树的度是树内各...
2018-06-01 20:49:56
887
原创 C++设计模式_观察者监听者模式
#include <iostream>#include <string>#include <map>#include <vector>#include <vld.h>using namespace std;//观察者监听者模式模式class Listener{public: Listener(string str):...
2018-03-25 20:02:50
752
原创 C++设计模式_工厂模式
工厂模式是将带有继承于基类的子类的创建过程交给一个工厂来创建,通过赋予不同的创建标识来创建不同的子类的模式。C++有三种工厂模式:简单工厂模式、工厂模式和抽象工厂模式简单工厂模式:现在有一个工厂要生产几种产品,这个简单工厂自己可以判断生产哪一种产品代码如下:#include <iostream>#include <string>#include <vld.h>...
2018-03-25 16:12:29
291
原创 字符串匹配算法
在字符串str中定位/查找某个字串sub的操作通常被称为字符串的模式匹配。字符串匹配有多种算法,这里总结一下BF算法和KMP算法。BF算法BF算法是一个暴力算法,从str的第一个字符开始,依次比较str和sub中的字符,如果没有完全匹配,则从第二个字符开始,再次比较,如此重复,直到找到sub的完全匹配或者不存在匹配。这里设str和sub的长度分别是m和n,则它在最坏情况下的时间复杂度是O(m*n)...
2018-02-27 23:06:16
659
原创 进程间的通讯方式_共享内存
共享内存:共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式,它允许两个不相关的进程访问同一个逻辑内存。虽然X/Open标准并没有对它做出要求,但大多数共享内存的具体实现都把由不同进程之间共享的内存安排为同一段物理内存。 共享内存是由IPC为进程创建的一个特殊的地址范围,它将出现在该进程的地址空间中。其他进程可以将同一段共享内存连接到它们自己的地址空间中。所有进程都可以
2017-12-13 21:06:45
312
原创 如何处理僵死进程?
如何处理僵死进程? 给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取,这些信息包括进程的 pid、终止状态以及资源的利用信息(CPU时间,内存使用量等)。如果一个进程终止,而该进程有子进程处于僵尸状态,那么它的所有僵尸子进程的 ppid 将被重置为1(init 进程)。继承这些子进程的 init 进程将清理它们(init 进程将 wait 它们,从而去除僵死
2017-12-07 21:31:29
649
原创 static 的作用
static 的作用一、static 在C语言中,主要定义静态全局变量,定义静态局部变量,定义静态函数 1. 静态全局变量的特点: (1)在全局数据区分配内存 (2)如果静态全局变量没有初始化,其默认值为 1 (3)该变量在本文件内从定义开始到文件结束均可见 2. 静态局部变量的特点:
2017-11-24 23:47:43
305
原创 网络编程基础(二)
网络编程基础TCP 协议的特点 传输层协议主要有两个:TCP 协议和 UDP 协议。TCP 协议相对于 UDP 协议的特点是:面向连接、字节流和可靠传输。 使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP 连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数
2017-11-21 13:09:35
261
原创 网络编程基础(一)
网络编程基础 网络编程的实现就必须有服务器和客户端的存在 服务器:为客户提供服务的一方 客户端:获取数据的为客户端,可以是任意一台主机,只要它和服务器存在连接,并且的到服务器的授权,就可以使用服务器提供的服务 有两种协议可以选择: (1)TCP:面向连接的 可靠的 流式服务 (2
2017-11-19 21:31:01
249
原创 线程控制(线程同步 & 线程安全)
一、线程同步 当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据。如果当某个线程可以去修改变量,而其他线程也可以去读取或者修改这个变量的时候,就需要对这些线程进行同步控制,以确保它们在访问变量的存储内容时不会访问到无效的数值。 同步:多进程或者多线程访问临界资源时,必须进行同步控制。多进程或者多线程的执行并不是完全绝对的并行运行,有可能主线程需要等待函数
2017-11-12 20:06:59
489
原创 函数调用堆栈
函数调用堆栈 函数调用相信大家都不陌生,调用函数向被调用函数传递参数,然后执行被调用函数的代码,最后被调用函数向调用函数返回结果。 函数的调用实际上就是在栈上发生的,那么函数调用在计算机内部到底是如何实现的呢? 对于一个程序,编译器会对其分配一段内存,这段内存在逻辑上可以分为:代码段、数据段、堆和栈。 (1)代码段:保存程序
2017-11-07 23:45:33
421
原创 线程管理
线程的概念 线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列:main 执行体。 进程可以通过线程创建 N 条线程,这些新创建的线程称之为函数线程,main 函数所代表的线程为主线程。线程与进程的区别 1. 进程是资源分配的最小单位,线程是 CPU 调度的最小单位 2. 线程是轻量级的进程 3. 管理方
2017-11-04 23:10:14
295
原创 进程间的通讯方式_消息队列
消息队列:提供了一种从一个进程向另一个进程发送一个数据块的方法,而且每个数据块都被认为含有一个类型,接收进程可以独立地接受含有不同类型值得数据块。 消息:数据 & 类型 队列:一种数据结构,先进先出 消息队列:是一种临时存储信息的队列,完成进程间的数据传递,优先级队列消息队列的特点: 1.与信号量相比:都以内核对象来确保多进程访问同
2017-11-02 21:32:01
702
原创 进程间的通讯方式_信号量
信号量 当我们编写的程序使用了线程时,不管它是运行在多用户系统上、多线程系统上,还是运行在多用户多进程系统上,我们通常会发现程序中存在着一部分临界代码,我们需要只有一个进程(或一个执行线程)可以进入这个临界代码并拥有对资源独占式的访问权。为了防止出现因多个程序同时访问一个共享资源而引发的问题,我们需要有一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的
2017-10-28 21:52:27
321
原创 进程间的通讯方式_管道(无名管道)
无名管道 是相对于有名管道而言的,无名管道在使用时产生,不使用后释放,并不会再系统上留下任何蛛丝马迹。 无名管道因其使用前没有任何的标示,所以它只能应用于父子进程之间。 子进程会复制父进程的文件表数组(浅拷贝)。无名管道的相关操作: 创建:int pipe(int fd[2]); //fd[0] 读 //fd[1] 写
2017-10-28 18:39:54
279
原创 进程间的通讯方式_管道(有名管道)
当从一个进程连接数据流到另一个进程时,我们使用属于管道(pipe)。我们通常是把一个进程的输出通过管道连接到另一个进程的输入。(管道是在内存上开辟出一块空间,不被任何其他进程所占用的)管道包括全双工通讯和半双工通讯。管道原理:管道操作: 有名管道:应用于任意两个进程之间数据的单向传递 创建:命令方式(mkfifo)、函数方式(mkfifo)
2017-10-22 23:39:55
471
原创 数据结构_循环链表
循环链表(带头节点)(与单链表类似,只是尾结点的 next 指向头节点)循环链表的结构如下:1. 循环链表的结构体定义,代码如下typedef struct CNode { int data; struct CNode *next;}CNode,*CList;2. 循环链表的初始化,代码如下void InitList(CList plist){ assert
2017-10-11 21:32:50
301
原创 数据结构_单链表(带头节点)
单链表(以带头节点的单链表为例)的表示图如下: 1. 定义单链表结构,结构体中包括 data 数据域和 next 指针域,代码如下:typedef struct Node{ int data;//数据域 struct Node *next;//指向下一个节点}Node,*List;//List == Node*2. 单链表的初始化,代码如下:void InitLis
2017-09-21 22:48:15
1110
1
原创 数据结构_顺序表
一、定长顺序表1. 采用结构体定义顺序表,定义顺序表的存放数据、有效数字个数以及结构体自身的指针,代码如下:typedef struct SeqList{ int elem[SIZE];//存放数据 int length;//有效数字个数}SeqList,*PSeqList;2. 顺序表的初始化,代码如下:void InitSeqList(PSeqList ps){ a
2017-09-13 13:12:56
384
原创 字符串的相关问题
1. 求字符串的长度int Mystrlen(const char *str){ int i; for (i=0; str[i]!='\0'; i++) {;} return i;}2. 字符串拷贝函数,这里给出了4种方法 方法一: void Mystrcpy1(char *des, const char *src){ int i = 0; while
2017-09-09 11:37:47
259
原创 青蛙跳台阶问题
题目:一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级台阶, 请问这只青蛙跳上 n 级台阶总共有有多少种跳法。根据题意可以分析: 青蛙跳上 1 级台阶有 1 种跳法,跳上 2 级台阶有 2 种跳法,跳上 3 级台阶有 3 种跳法, 跳上 4 级台阶有 5 种跳法,由此可以分析出青蛙跳台阶问题实质上只是斐波那契数列的一个应用。该题代码
2017-09-09 11:00:17
332
原创 const 的用法
const 常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象的值是不能被更新的。const 的使用:1. 定义常量 (1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。 TYPE const ValueName = value; co
2017-09-06 22:57:09
330
1
原创 数据结构排序算法
数据结构排序算法排序:排序即排列顺序,把一组数据排列成有序的数据,或者把一组数据按照关键字排成有序的排序的分类: (1)按照存储位置分为:内部排序(即在内存中)和外部排序(即内存调用磁盘) (2)按照算法或者逻辑分为:插入排序、选择排序、交换排序、归并排序和基数排序 (3)按照排序结果分为:升序排序和降序排序时间复杂度:某个事件的执行次数空间复杂
2017-08-28 22:25:07
395
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人