自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux之信号阻塞

实际执⾏行信号的处理动作称为信号递 达(Delivery) 信号从产⽣生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞 (Block )某个信号。 使用函数sigprocmask()阻塞信号的传递,只是延迟信号的到达。信号会在解除阻塞后继续传递。

2017-04-27 13:17:32 340

原创 404错误

错误原因:HTTP 404: 错误意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。

2017-04-26 20:59:06 727

原创 稀疏矩阵及其逆置矩阵

在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。M*N的矩阵,矩阵中有效值得个数远小于无效值的个数,且这些数据的分布没有规律。

2017-04-25 22:43:52 2914

原创 对称矩阵

有许多值相同的元素或有许多零元素,且值相同的元素或零元素的分布有一定规律 的矩阵称为特殊矩阵。对称矩阵:设一个N*N的矩阵A,A中任意元素Aij,当且仅当Aij==Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵。 以矩阵的对角线为分割,分为上三角和下三角。

2017-04-25 13:36:17 9654

原创 循环队列的实现

队列介绍 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作 的特殊线性表。 进行插入操作的一端称为队尾,通常称为入队列;进行删除操作的一端称为队头,通常称为出队列。 队列具有先进先出的特性(FIFO)。 顺序队列 【实现方式一】 队头不动,出栈时队头后的所有元素向前移动【实现方式二】 出队列时,队头向后移动一个位置如果再有F、G进行入队操作,就会出现假溢出问题

2017-04-24 13:35:38 1080

原创 简单迷宫算法实现

一.设置迷宫 要打印一个简单的迷宫,我们理所当然的想到了利用二维数组,在迷宫的实现中我定义了一个maze.txt的文件用来存储迷宫,在初始化的时候只需要将该迷宫从maze.txt中读出来就可以了. 0-路 1-墙二.如何找到迷宫的通路(1).如果当前路径已经走过则要留下标记;如果走到死胡同也要留下标记,但是要体现回溯

2017-04-24 12:51:06 1231

原创 目标文件

ELF格式的文件:目标文件中的内容除了至少有编译后的机器代码,数据,还要有链接时一些必要的信息,比如符号表,调试信息,字符串等。 程序源代码编译后的指令经常放在代码段,代码段常见的名字有”.code”或者”.text”,全局变量和局部静态变量放在数据段(.data)、ELF文件的开头是一个“文件头”,描述整个文件的文件属性,包括文件是否可以执行,是静态链接还是动态链接及入口地址,目标硬件,目标操作

2017-04-23 22:16:55 327

原创 线程的分类

线程分类:用户级线程和内核级线程(轻量级进程)用户级线程:在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。使用用户级线程而非内核级线程有很多优点: (1)由于所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核态特权,因此,进程不需要为了线程管理而切换到内核态,这节省了两次状态转换(从用户态到内核态,从内核态返回到用户态)的开销。

2017-04-22 21:44:56 9150

原创 程序的预编译,编译,汇编,链接过程

预编译过程:预编译过程主要处理那些源代码文件中的以”#”开始的预编译指令。比如:”#include”,”#define”等,主要处理规则如下: (1)将所有的”#define”删除,并且展开所有的宏定义。 (2)处理所有条件预编译指令, 比如”#if”,”#ifdef”,”#elif”,”#else”,”#endif”. (3)处理”#include”预编译指令,将被包含的文件插入到该预编译

2017-04-21 22:19:59 1546

转载 next_permutation函数(全排列)

以下为转载内容,转自:http://leonard1853.iteye.com/blog/1450085 1、碰到next_permutation(permutation:序列的意思)今天在TC上碰到一道简单题(SRM531 - Division Two - Level One),是求给定数组不按升序排列的最小字典序列(Sequence of numbers A is lexicographi

2017-04-19 20:03:01 1037

原创 库函数实现全排列

template<class BidirectionalIterator> bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last );

2017-04-19 18:46:16 491

原创 全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。如1,2,3三个元素的全排列为: 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 共3*2*1=6种 3!公式: 全排列数f(n)=n!(定义0!=1)

2017-04-19 16:22:05 317

原创 栈的基本操作

#include <assert.h>#include <iostream>using namespace std;struct _TrueType{ static int Get() //使用static修饰成员函数的话,访问该成员函数的话可以用通过类作用域访问, //不使用static修饰成员函数的话,访问该成员函数,要先进行对象的创建,然后用成员操作符访问

2017-04-17 21:50:42 243

原创 判断字符串是否回文

回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如”aba”。循环实现:#include <iostream>using namespace std;bool IsPalindereme(char* array, size_t size){ for(int i=0; i<size; i++) { if(array[i] != array[size

2017-04-14 14:51:50 816

原创 有序数组的二分查找

循环算法实现:#include <iostream>using namespace std;//前闭后闭区间int BinarySearch(int* array, int size, int data){ int left = 0; int right = size-1; int mid = 0; while(left <= right) {

2017-04-14 14:31:28 640

原创 linux之singal函数

函数原型:#include typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);作用1:站在应用程序的角度,注册一个信号处理函数作用2:忽略信号,设置信号默认处理 信号的安装和回复参数:--signal是一个带signum和handle

2017-04-14 13:36:48 676

原创 linux之信号产生

产生信号的条件主要有:A. 通过终端按键产生信号用户在终端按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C产生SIGINT信 号,Ctrl-\产生SIGQUIT信号,Ctrl-Z产生SIGTSTP信号。SIGINT的默认处理动作是终止进程, SIGQUIT的默认处理动作是终止进程并且Core Dump,首先解释什么是Core Dump(核心转储)。

2017-04-14 07:29:09 984

原创 linux之信号

用kill -l命令可以察看系统定义的信号列表: 列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。可选的处理动作有以下三种: 1. 忽略此信号。2. 执行该信号的默认处理动作。 3. 提供一个信号处理函数,

2017-04-13 22:35:12 230

原创 递归实现单链表的查找

#include <iostream>using namespace std;struct Node{ Node(int data) :_data(data) ,_next(NULL) {} Node* _next; int _data;};

2017-04-13 12:58:52 1264 1

原创 逆向打印与销毁单链表

逆向打印单链表:#include <iostream>using namespace std;struct Node{ Node(int data) :_data(data) ,_next(NULL) {} Node* _next; int _data;};void PrintListFromTailToHead(Node* pHea

2017-04-13 10:19:28 629 2

原创 斐波那契数列

斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。

2017-04-13 09:25:03 995

原创 算数和逻辑操作

指令类ADD由三条加法指令组成:addb, addw, addl, 分别是字节加法,字加法和双字加法。 事实上,每个指令类都有对字节,字和双字数据进行操作的指令。这些操作被分为四组:加载有效地址,一元操作,二元操作,移位。 加载有效地址:加载有效地址(load effective address)指令leal实际上是movl的变形。

2017-04-12 22:37:40 1328

原创 程序访问信息

IA32的整数寄存器在IA32中央处理单元(CPU)中,包含了8个32位整数寄存器(如下图)。从图中可以看到在每个32位寄存器的名字前面都会有一个%e,在这里可以把e理解成extended(扩展的),因为早期的8086寄存器是16位,所以加e之后就变成32位的了。虽然现在的寄存器是32位的了,但仍然不影响我们对16位寄存器的使用,图中的ax,cx,dx,bx,si,di,sp,bp均是16位寄存器,

2017-04-12 20:37:01 428

原创 如何判断文件是否读到文件结尾

二进制文件:头文件:#include #define feof(_stream) ((_stream)->_flag & _IOEOF)feof()函数用来检测当前文件流上的文件结束标识,判断是否读到了文件结尾,其原型为: int feof(FILE * stream);【参数】stream为文件流指针。【返回值】检测到文件结束标识返回1,否则返回0。

2017-04-10 22:32:44 13049

原创 二进制文件和文本文件的区别

文本文件与二进制文件的定义  文本文件:是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。   二进制文件:是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。   从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。

2017-04-10 22:19:10 4969

原创 扩展数字位

零扩展:将一个无符号数转换成一个更大的数据类型,我们只需简单的在表示开头添加0,这种运算称为零扩展。 符号扩展:将一个补码数字转换成为一个更大的数据类型可以执行符号扩展,规则是在表示中添加最高有效位置的副本。看一下一个代码:#include <iostream>using namespace std;typedef unsigned char* byte_pointer;void show_b

2017-04-09 22:09:59 1056

原创 解析.bmp文件的结构

BMP文件组成:BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成 BMP文件头:BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORDbfType; // 位图文件的类型,必须为BM DWORD bfSize; // 位图文件的大小,以字节为单位

2017-04-09 20:55:34 461

原创 linux自旋锁——读写锁

在一些程序中存在读者写者问题,也就是说,对某些资源的访问会 存在两种可能的情况,一种是访问必须是排它性的,就是独占的意思,这称作写操作;另一种情况就是访问方式可以是共享的,就是说可以有多个线程同时去访问某个资源,这种就称作读操作。这个问题模型是从对文件的读写操作中引申出来的。一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁.

2017-04-07 18:30:19 972

原创 生产者-消费者模型

在写生产者—消费者模型时,先谈及一个概念——信号量。 sem函数: (1)sem_init函数是Posix信号量操作中的函数。sem_init() 初始化一个定位在 sem 的匿名信号量。 value 参数指定信号量的初始值。 pshared 参数指明信号量是由进程内线程共享,还是由进程之间共享。如果 pshared 的值为 0,那么信号量将被进程内的线程共享,并且应该放置在这个进程的所有线程

2017-04-07 17:47:52 342

转载 智能指针应用

1、在可以使用 boost 库的场合下,拒绝使用 std::auto_ptr,因为其不仅不符合 C++ 编程思想,而且极容易出错。 2、在确定对象无需共享的情况下,使用 boost::scoped_ptr(当然动态数组使用boost::scoped_array)。 3、在对象需要共享的情况下,使用 boost::shared_ptr(当然动态数组使用boost::shared_array)。

2017-04-01 15:55:20 749

空空如也

空空如也

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

TA关注的人

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