自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

men_wen的博客

脚踏实地,坚定不移,独立思想,自由精神

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

原创 数据结构之 AVL树(平衡二叉树)(C语言实现)

AVL树(平衡二叉树)1. AVL树定义和性质AVL(Adelson-Velskii和Landis发明者的首字母)树时带有平衡条件的二叉查找树。二叉查找树的性能分析:在一颗左右子树高度平衡情况下,最优的时间复杂度为O(log2nlog_2{n}),这与这半查找相同;在一个只有右子树的二叉树中,最差的时间复杂度会脱变为线性查找O(n)。二叉查找树的实现:二叉查找树的C语言实现由于二叉查找树存在以

2017-03-31 22:34:13 4933 3

原创 数据结构之 二叉查找树(C语言实现)

数据结构之 二叉查找树1. 二叉查找树的定义二叉查找树(binary search tree)是一棵二叉树,或称为二叉搜索树,可能为空;一棵非空的二叉查找树满足一下特征:每个元素有一个关键字,并且任意两个元素的关键字都不同;因此,所有的关键字都是唯一的。在根节点的左子树中,元素的关键字(如果存在)都是小于根节点的关键字。在根节点的右子树中,元素的关键字(如果存在)都是大于根节点的关键字。根节

2017-03-28 20:42:07 7701 1

原创 数据结构之 二叉树(C语言实现)

数据结构之 二叉树(C语言实现)1. 二叉树的定义==二叉树(Binary Tree)是n(n ≥ 0)个节点有限集合。==当n=0时,称为空二叉树,当n>0时,该集合有一个根节点及互不可交的,分别被称为左子树和右子树的二叉树组成。二叉树可以被理解为一下两个条件的树型结构。每个节点度不大于2。节点没棵子树时明确区分左右的,不能随意改变。 2. 二叉树的性质在二叉树的第i层之多有2i−12^{

2017-03-28 20:31:29 17814 2

原创 C++ 类中的static成员的初始化和特点

C++ 类中的static成员的初始化和特点在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同。以下测试编译环境为:gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)测试代码(g++编译通过):#include <iostream>using namespace std;class Test{public:

2017-03-21 15:53:20 89188 3

原创 APUE读书笔记---System v消息队列

APUE读书笔记—System v消息队列1. 概述System V消息队列使用消息队列标识符(message queue identifier)标识,具有足够特权的任何进程都可以往给定队列放置一个消息,具有足够特权的任何进程都可以从一个队列中读出一个消息。在内核中,维护了一个定义在struct msqid_ds { struct ipc_perm msg_perm; //内核给每个IP

2017-03-18 07:36:19 628

原创 Redis学习笔记(十)消息通知(任务队列和发布订阅模式)

Redis学习笔记(十)消息通知(任务队列和发布订阅模式)1. 任务队列1.1 任务队列的特点任务队列:顾名思义,就是“传递消息的队列”。与任务队列进行交互的实体有两类,一类是生产者(producer),另一类则是消费者(consumer)。生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务独立中读入任务信息并执行。任务队列的好处:松耦合。生产者和消费者只需按照约定的任务描述格式,进行编

2017-03-15 21:30:25 25589 7

原创 Redis学习笔记(九) 排序SORT及参数详解

Redis学习笔记(九) 排序SORT及参数详解1.排序SORTSORT命令可以对列表类型,集合类型和有序集合类型键进行排序,并且可以完成与关系数据库中的连接查询相类似的任务。SORT 返回或存储key的list、 set 或sorted set 中的元素。默认是按照数值类型排序的,并且按照两个元素的双精度浮点数类型值进行比较。SORT key [BY pattern] [LIMIT offs

2017-03-15 17:50:11 1566

原创 数据结构之 栈(C语言实现)

数据结构之 栈(C语言实现)1.栈的模型栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行考察。对空栈进行的pop或top一般被认为是栈ADT的错误。另一方面,当运行push时空间用尽是一个实现错误,但不

2017-03-14 23:23:20 18858 1

原创 Redis学习笔记(八)事务 和 连接相关命令

Redis学习(八)事务 和 连接相关命令1. 事务1. 事务的概念和原理Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis中的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令发送给Redis,然后在让Redis一次执行这些命令。2. 事务相关命令MULTI 标记一个事务块的开始。 随后的指令将在执行EXEC

2017-03-14 22:55:33 1247 2

原创 数据结构之 队列(C语言实现)

数据结构之 队列(C语言实现)1. 队列ADT1.1 介绍队列(queue)属于表,使用队列时插入在一端进行而删除在另一端进行。 1.2 队列模型队列的基本操作是Enqueue(入队),它是在表的末端(队尾(rear))插入一个元素,还有Dequeue(出队),它是删除(或返回)在表的开头(队头(front))的元素。如下图:2. 队列的数组实现queue.h文件#ifndef _QUEUE_H

2017-03-14 09:51:58 8343

原创 Linux中getopt函数、optind等变量使用详解

getopt函数、optind等变量使用详解最近在学习《Unix网络编程》vol2时,发现书中例子经常使用一个命令行解析getopt函数,因为函数声明比较特别,根据自己摸索,遂总结出使用方法。1. getopt函数的声明该函数是由Unix标准库提供的函数,查看命令man 3 getopt#include <unistd.h>int getopt(int argc, char * const argv

2017-03-13 22:38:10 28995 2

原创 Redis 学习笔记(七)之 有序集合

Redis 学习笔记(七)之 有序集合1.介绍在集合类型的基础上,有序集合类型为集合中的每个元素都关联了一个分数,使得在完成插入、删除的集合类型的操作时,还能够获得分数最高(或最低)的前N个元素等与分数有关的操作。集合元素具有唯一性,但是分数可以相同。2. 比较有序集合类型和列表类型的相似点:二者都是有序的。二者都可以获得某一范围的元素。有序集合类型和列表类型的区别:列表类型内部由双向

2017-03-13 16:42:18 1906

原创 Redis 学习笔记(六)之 set无序集合

Redis 学习笔记(六)之 set无序集合set集合命令SADD 添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.如果key 的类型不是集合则返回错误. SADD key member [member ...] 127.0.0.1:6

2017-03-13 13:33:14 2114 1

原创 Git 基本命令

Git 基本命令1. Git 简介Git是分布式版本控制系统,与其相对的则是CVS及SVN的集中式的版本控制系统。集中式版本控制系统:集中式版本控制系统,版本库是集中存放在中央服务器的,而大家工作的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始工作,工作完成,再把自己的修订推送给中央服务器。这类系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都

2017-03-12 11:14:12 569

原创 Redis 学习笔记(五)之列表类型

Redis 学习笔记(五)之列表类型列表类型LPUSH 将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 LPUSH key value [value ...]127.0.0.1:6379>

2017-03-11 21:22:26 2005 2

原创 Redis学习笔记 (四) 之KEY相关命令

Redis学习笔记(四) 之KEY相关命令KEY 相关命令KEYS 查找所有符合给定模式pattern(正则表达式)的 key 。KEYS pattern127.0.0.1:6379> KEYS * 1) "say" 2) "res" 3) "userInfo2" 4) "test7" 5) "test4" 6) "userInfo3" 7) "counter" 8) "te

2017-03-10 23:30:00 3205 1

原创 APUE读书笔记---第10章 信号

APUE读书笔记—第10章 信号1. 信号概念信号是软件中断,信号提供了一种处理异步事件的方法。信号名在 < signal.h > 都被定义为正整数常量。不存在编号为0的信号。1.1 产生信号的条件:当用户按某写终端按键时,引发终端产生的信号。如:Ctrl+C产生SIGINT信号。硬件异常产生信号。如除零错,无效的内存应用产生SIGSEGV信号。进程调用kill函数可将任一信号发送给另

2017-03-10 19:09:17 433

原创 Redis 学习笔记(三)之散列类型命令

Redis 学习笔记(三)之散列类型散列类型1. hash相关的配置在redis.conf文件中,有关hash的配置如下hash-max-ziplist-entries 512 //最大字节说为512字节hash-max-ziplist-value 64 //最多字段数为642. hash相关的命令HSET 用于在存储的关键值的散列设置字段。如果键不存在,新的key由哈希创建。如果字

2017-03-08 15:44:33 1326 4

原创 Redis 学习笔记(二)之字符串类型命令

Redis 学习笔记(二)字符串类型字符串类型是redis中最基本的数据类型,他能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许的数据的最大容量是512MB。命令SET 和 GET 类似于读和写变量SET key value [EX seconds] [PX milliseconds] [NX|XX]GET keySET命令的参数:EX seconds:以**秒**为单位

2017-03-07 23:04:40 2085 1

原创 Redis 学习笔记(一)安装与配置

Redis 学习笔记(一)Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,Redis是REmote DIctionary Server(远程字典服务器)的缩写。1. 下载安装wget http://download.redis.io/redis-stable.tar.gz //下载,拷贝到/usr/local写tar -xzvf redis-stable.tar.gz //解

2017-03-06 17:29:37 8297 2

原创 APUE读书笔记--POSIX消息队列

UNP (Vol2) 读书笔记–POSIX消息队列1. 概述消息队列可以认为是一个消息链表,有足够的写权限的线程可以往队列中放置消息,有足够的读权限的线程可以从队列中取走消息。每个消息都是一个记录(record),有一个长度和优先级。消息队列具有随内核的持续性 随内核持续性:IPC对象一直存在到内核重新自举或显式删除该对象为止。2. mq_open、mq_close、mq_unlink函数

2017-03-06 12:08:23 544

原创 关于POSIX消息队列mq_open提示错误信息:Invalid argument的问题

关于POSIX消息队列mq_open提示错误信息:Invalid argument的问题1. 发现问题在学习《Unix网络编程》卷二:进程间通信的第五章,p63页代码时,当调用mq_open函数时,总是提示错误信息Invalid argument。最总将错误定位在mq_open函数的第四个参数&attr,当传值为NULL时,程序没错误提示,而&attr时,总是编译提示错误信息。代码如下:#inc

2017-03-05 21:35:22 6324

原创 APUE读书笔记---进程间通信之POSIX共享内存区

APUE读书笔记—进程间通信之POSIX共享内存区1. 概述无亲缘关系进程间共享内存区的方法:内存映射文件(memory-mapped file),有open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间的一个文件。共享内存对象(shared-memory object),由shm_open打开一个POSIX IPC名字(路径名),所返回的描述符由mmap函数映射到当前进程的地址空

2017-03-03 23:58:47 477

原创 APUE读书笔记---进程间通信(IPC)之共享内存区mmap

APUE读书笔记—进程间通信(IPC)之共享内存区mmap1. 共享内存区概述共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不在涉及内核。 “不再涉及内核”含义:进程不再通过执行任何进入内核的系统调用来彼此传递数据。管道、FIFO和消息队列这些IPC形式,当两个进程要交换信息时,这些信息必须经由内核传递。通过让两个或多个进程共享一个内存

2017-03-03 15:37:25 637

原创 关于有名管道open时阻塞的问题

关于有名管道open时阻塞的问题1. 发现错误在学习Unix网络编程卷二的有名管道FIFO时,无意间犯下一个错误,故写此总结。 在写FIFO的服务器和客户端之间通信的代码时,服务器端主函数创建两个有名管道,然后分被以读写打开两个管道:readfd = open(FIFO1, O_RDONLY, 0);writefd = open(FIFO2, O_WRONLY, 0);然而在写客户端主函数代码时,

2017-03-01 21:44:05 8569 5

原创 APUE读书笔记---进程间通信(IPC)之管道和有名管道(FIFO)

APUE读书笔记—进程间通信(IPC)之管道和有名管道(FIFO)1. 管道pipe函数可以创建管道,提供一个单向数据流(半双工)。#include <unistd.h>int pipe(int pipefd[2]);//返回值:若成功,返回0,若出错,返回-1该函数返回两个文件描述符,fd[0],fd[1]。前者打开来读,后者打开来写。所以管道在用户程序看起来像是一个打开的文件,通过read(

2017-03-01 20:34:15 815

空空如也

空空如也

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

TA关注的人

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