自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++中static的用法详解

转载自:http://blog.csdn.net/majianfei1023/article/details/45290467C 语言的 static 关键字有三种(具体来说是两种)用途: 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。 int foo(){ static int i = 1; // note:1 //int i = 1; // note

2016-10-18 21:05:14 852

原创 图的广度优先搜索与深度优先搜索

一、图的广度优先搜索(邻接链表)//Link_Graph.h #include <iostream> #include <queue> using namespace std;#define N 100 #define WHITE 0 #define GRAY 1 #define BLACK 2queue<int> Q; struct Vertex; struct Edge { int st

2016-10-11 20:59:09 683

原创 二叉搜索树C++实现

二叉搜索树的性质:对任何结点x,其左子树中的关键字最大不超过x.key,其右子树中的关键字最小不低于x.key。其数据元素集合包括每个节点,每个节点又包含节点的值和它的左儿子和右儿子。基本操作由:查找、最大关键字元素和最小关键字元素、插入、删除,这些基本操作耗费的时间均为θ(lgn)(与高度成正比)。遍历一棵有n个结点的二叉搜索树需要耗费θ(n)的时间,#include <iostream> usi

2016-10-11 17:03:46 458

原创 双向链表基础操作C++实现

Node.h:template <class T> struct Node { T val; Node<T>* next; Node<T>* prev; Node(T nVal) { val = nVal; next =prev= nullptr; } Node(void){} };#include "Node.

2016-10-11 15:39:15 445

原创 单链表基础操作C++实现

Node.h:template <class T> struct Node { T val; Node<T>* next; Node(T nVal) { val = nVal; next = nullptr; } Node(void){} };#include "Node.h" #include <iostream>us

2016-10-11 14:05:01 449

转载 c++多态的实现原理

华为校招一面C++应用软件开发被问到C++多态是如何实现的,回来后在CSDN博客上看到一篇写得很好的文章,就转载过来了。 原文地址:http://blog.csdn.net/tujiaw/article/details/67534981.用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2.存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚

2016-10-11 09:45:39 352

转载 面向对象编程3大特性 7大原则

一、面向对象编程的特性: 1、封装:将数据和对数据的操作封装在一起,通过数据抽象,将类的接口与实现分离。 2、继承:通过继承联系在一起的类构成一种层次关系。子类继承了父类所具有的数据和数据上的操作,同时每个派生类又可以定义各自特有的成员。 3、多态:通过继承和虚函数实现,父类指针或者引用能够指向子类对象,调用子类的虚函数二、七大基本原则 7大基本原则:单一职责原则SRP(Single Re

2016-10-09 20:43:02 521

转载 生产者消费者问题(C实现)

原文地址:http://blog.csdn.net/chen_mama/article/details/47347261生产者消费者问题是操作系统中的一个经典的问题。他描述的是一个,多个生产者与多个消费者共享多个缓冲区的事情,具体的定义百度。然后看了操作系统的书籍如何解决书上给的伪代码是这样的item B[k]; semaphore empty; empty=k; //可以使用的空缓冲区数

2016-10-09 16:28:14 9204

原创 排序算法

(1)冒泡排序冒泡排序是把小的元素往前调或者把大的元素往后调,比较是相邻的两个元素比较,交换也发生在这两个元素之间,所以相同元素的前后顺序不会改变,所以冒泡排序是一种稳定的排序算法,冒泡排序的最大时间代价、最小时间代价和平均时间代价均为θ(n²)。void BubbleSort(int array[],int n) { for(int i=0;i<n-1;i++) {

2016-10-07 17:33:20 543

原创 二叉树的遍历

二叉树的数据结构struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };前序遍历的非递归实现void PreOrder(BinaryTreeNode* root) { if (root == NULL) return;

2016-10-07 14:50:33 389

转载 最长递增子序列O(NlogN)算法

转载出处:https://www.felix021.com/blog/read.php?1587最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS。 排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了。假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。 下面一步一步试着找出它。 我们

2016-10-06 15:59:12 507

转载 动态规划:从新手到专家

**动态规划:从新手到专家** March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章

2016-10-06 15:55:23 451

原创 最长公共字串与最长公共子序列

最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续。 如: abcdefghijklmnop abcsafjklmnopqrstuvw

2016-10-06 10:21:16 519

原创 TCP传输控制协议

TCP传输控制协议思维导图:

2016-09-21 11:56:50 850

转载 TOP K算法问题

搜索引擎热门查询统计 题目描述: 搜搜引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。解决方法: 第一步、 先对这批海量数据预

2016-09-21 11:38:07 368

原创 《UNIX环境高级编程》十九伪终端读书笔记

1、概述伪终端是指,对于一个应用程序而言,它看上去想一个终端,但事实上它并不是一个真正的终端。 - 通常,一个进程打开伪终端主设备,然后调用fork。子进程建立一个新的会话,打开一个相应的伪终端从设备,将其文件描述符复制到标准输入、标准输出和标准错误,然后调用exec。伪终端从设备称为子进程的控制终端。 - 对于伪终端从设备上的用户进程来说,其标准输入、标准输出和标准错误都是终端设备。 -

2016-08-21 20:13:14 603

原创 《UNIX环境高级编程》十八终端I/O读书笔记

1、综述终端I/O有两种不同的工作模式: (1)规范模式输入处理。在这种模式中,对终端输入以行为单位进行处理。对于每个读请求,终端驱动程序最多返回一行。 (2)非规范模式输入处理。输入字符不装配成行。可以认为终端设备是由通常位于内核中的终端驱动程序控制的。每个终端设备都有一个输入队列和一个输出队列: 大多数UNIX系统在一个称为终端行规程的模块中进行全部的规范处理。这个模块位于内核通用读、写函

2016-08-21 13:19:34 475

原创 《UNIX环境高级编程》十七高级进程间通信读书笔记

1、UNIX域套接字UNIX域套接字用于在同一台计算机上运行的进程之间的通信。 UNIX域套接字提供流和数据报两种接口。UNIX域数据报服务是可靠的,既不会丢失报文也不会传递出错。使用socketpair函数来创建一对无命名的、相互连接的UNIX域套接字。#include <sys/socket.h> int socketpair(int domain,int type,int protocol,

2016-08-20 12:46:50 961

原创 《UNIX环境高级编程》十六网络IPC:套接字读书笔记

1、套接字描述符进程用套接字网络进程间通信接口能够和其他进程通信,无论它们是在同一台计算机上还是在不同的计算机上。 套接字是通信端点的抽象,应用程序用套接字描述符访问套接字。套接字描述符在UNIX系统中被当作是一种文件描述符。为创建一个套接字,调用socket函数:#include <sys/socket.h> int socket(int domain,int type,int protocol

2016-08-18 11:56:11 536

原创 《UNIX环境高级编程》十五进程间通信读书笔记

1、管道 管道的局限性: (1)历史上,它们是半双工的(即数据只能在一个方向上流动)。 (2)管道只能在具有公共祖先的两个进程之间使用。 半双工管道是最常用的IPC形式。每当在管道中键入一个命令序列,让shell执行时,shell都会为每一条命令单独创建一个进程,然后用管道将前一条命令进程的标准输出与后一条命令的标准输入相连接。 通过调用pipe创建管道: #include in

2016-08-17 13:56:43 384

原创 《UNIX环境高级编程》十四高级I/O读书笔记

1、非阻塞I/O(同步)系统调用分成两类:“低速”系统调用和其他。低速系统调用是可能会使进程永远阻塞的一类系统调用。非阻塞I/O使我们可以发出open、read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则调用立即出错返回,表示该操作如继续执行将阻塞。对于一个给定的文件描述符,有两种为其指定非阻塞I/O的方法: (1)如果调用open获得描述符,则可指定O_NON

2016-08-16 00:14:10 502

原创 《UNIX环境高级编程》十三守护进程读书笔记

1、守护进程的特征守护进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。父进程ID为0的各进程通常是内核进程,它们作为系统引导装入过程的一部分而启动(init(进程1)是个例外,它是一个由内核在引导装入时启动的用户层次的命令)。对于需要在进程上下文执行工作但却不被用户层进程上下文调用的每一个内核组件,通常有它自

2016-08-14 22:20:47 393

原创 《UNIX环境高级编程》十二线程控制读书笔记

1、线程限制2、线程属性pthread接口允许我们通过设置每个对象关联的不同属性来细调线程和同步对象的行为。 (1)每个对象与它自己类型的属性对象进行关联。 (2)有一个初始化函数,把属性设置为默认值。 (3)还有一个销毁属性对象的函数。如果初始化函数分配了与属性对象关联的资源,销毁函数负责释放这些资源。 (4)每个属性都有一个从属性对象中获取属性值的函数。 (5)每个属性都有一个设置属性

2016-08-14 16:09:39 682

原创 《UNIX环境高级编程》十一线程读书笔记

1、线程概念 典型的UNIX进程可以看成只有一个控制线程:一个进程在某一时刻只能做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计称在某一时刻能够做不止一件事,每个线程处理各自独立的人物。 一个进程的又有信息对该进程的所有线程都是共享的,包括可执行程序的带吗、程序的全局内存和堆内存、栈以及文件描述符。 2、线程标识 每个线程有一个线程ID。进程ID在整个系统中是唯一的,但线程I

2016-08-13 11:42:54 533

原创 《UNIX环境高级编程》十信号读书笔记

1、信号概念 信号是软件中断,提供了一种处理异步事件的方法。 在头文件《signal.h>中,信号名都被定义为正整数常量(信号编号)。 不存在编号为0的信号,kill函数对信号编号0由特殊的应用。 在某个信号出现时,可以告诉内核按下列3中方式之一进行处理,我们称之为信号的处理或与信号相关的动作。 (1)忽略此信号。但SIGKILL和SIGSTOP这两种信号决不能被忽略。 (2)捕捉信号。 (3

2016-08-11 12:08:31 445

原创 《UNIX环境高级编程》九进程关系读书笔记

1、终端登陆 当系统自举时,内核创建进程ID为1的进程,也就是Init进程。init读取文件/etc/ttys,对每一个允许登陆的终端设备,init调用一次fork,它所生成的子进程则exec getty程序。 图9-1中所有进程的实际用户ID和有效用户ID都是0(也就是说,它们都具有超级用户特权)。init以空环境exec getty程序。 getty对终端设备调用open函数,

2016-08-10 19:51:30 479

原创 《UNIX环境高级编程》八进程控制读书笔记

1、进程标识 每个进程都有一个非负整形表示的唯一进城ID。 ID为0的进程通常是调度进程,常常被称为交换进程。该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程。 进程ID1通常是init进程,在自举过程结束时由内核调用。init进程决不会终止,它是一个普通的用户进程,但以超级用户特权运行。 #include <unistd.h> pid_t getpid(void);//返回进

2016-08-09 14:57:33 501

原创 《UNIX环境高级编程》七进程环境读书笔记

1、进程终止 有8种方式使进程终止,其中5种为正常终止: (1)从main返回; (2)调用exit; (3)调用_exit或_Exit; (4)最后一个线程从其启动例程返回; (5)从最后一个线程调用pthread_exit; 异常终止有三种方式: (6)调用abort (7)接到一个信号 (8)最后一个线程对取消请求做出响应#include <stdlib.h> void e

2016-08-08 20:11:27 339

原创 《UNIX环境高级编程》六系统数据文件和信息读书笔记

UNIX系统的正常运作需要使用大量与系统有关的数据文件,例如,口令文件/etc/passwd和组文件/etc/group等。 1、口令文件 口令文件的各字段包含在pwd.h>中定义的passwd结构中: struct passwd 成员 说明 char *pw_name 用户名 char *pw_passwd 加密口令 uid_t pw_uid 数值用户ID

2016-08-08 10:02:27 584

原创 《UNIX环境高级编程》五标准I/O库读书笔记

1、流和FILE对象 对于标准I/O库,它们的操作是围绕流(stream)进行的。当用标准I/O库打开或创建一个文件时,我们已使一个流与一个文件相关联。fwide函数用于设置流的定向#include <stdio.h> #include <wchar.h> int fwide(FILE *fp,int mode); 若流是宽定向的,返回正值,若流是字节定向的,返回负值,若流是为定向的,返回02、标

2016-08-07 20:46:36 527 5

原创 《UNIX环境高级编程》四文件和目录读书笔记

1、函数stat、fstat、fstatat、lstat#include <sys/stat.h> int stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int fd,struct stat *buf); int lstat(const char *restrict pathname,struct s

2016-08-06 21:57:49 407

原创 《UNIX环境高级编程》三文件I/O读书笔记

1、文件描述符的变化范围是0~OPEN_MAX-1。(OPEN_MAX:每个进程最大打开文件数) 2、函数open和openat(打开或创建一个文件):#include <fcntl.h> int open(const char *path,int oflag,.../*mode_t mode*/); int openat(int fd,const char *path,int oflag,...

2016-08-05 11:02:25 440

空空如也

空空如也

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

TA关注的人

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