2013年11月21日

linux I/O 转载

摘要: Linux的I/O机制经历了一下几个阶段的演进:(1)同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(2)同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(3)异步阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数调用来达到此目的。(4)异步非阻塞I/O: 也叫做异步I/O(AIO),用户程序可以通过向内核发出I/O请求命令,不用等带I/O事件真正发生,可以继续做另外的事情,等I/O操作完成,内核会通过函数回调或者信号机制 阅读全文

posted @ 2013-11-21 10:31 lovelace86 阅读(175) 评论(0) 推荐(0)

2013年10月4日

二叉树的建立以及三种遍历方式的递归、非递归的实现

摘要: #include #include using namespace std;char src[]="abd ceg f ";int index=0;typedef struct BinaryNode{char key;struct BinaryNode* left;struct BinaryNode* right;}BinaryNode,*BinaryTree;void createBinaryTree(BinaryTree& root){if (src[index]==' '){root=NULL;index++;}else{root=new Bi 阅读全文

posted @ 2013-10-04 00:02 lovelace86 阅读(210) 评论(0) 推荐(0)

2013年10月1日

深度搜索(递归)的应用 求一个数组中和为某特定值的元素集合

摘要: #include #include #include using namespace std;int A[8]={2,2,3,4,5,8,10,12}; int Sum[8]={0}; stack S; //index 表示元素个数 //sum 表示要求的和 void makeSum(int index,int sum){ if(sum==0){//满足条件,输出栈中的所有元素 stack temp=S; while(!temp.empty()){ cout=0 && sum<=Sum[i];i--){ if(A[i]<=sum){ S.push(A[i]);//当 阅读全文

posted @ 2013-10-01 17:00 lovelace86 阅读(523) 评论(0) 推荐(0)

2013年9月18日

动态规划基础问题

摘要: #include using namespace std;int b[10][10];int c[10][10];//最大连续子串问题//比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;//而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。//你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,//同时我们要记下各个子序列的和,最后找到和最大的子序列。void maxlianxuSub(int* src,int length){int flag=0;int curre 阅读全文

posted @ 2013-09-18 17:39 lovelace86 阅读(182) 评论(0) 推荐(0)

2013年9月7日

二叉树的建立以及前序、中序、后序遍历的递归和非递归实现

摘要: #include #include #include #include using namespace std;int src[]={2,3,4, -1,-1,5,-1,6,-1,-1,7, -1,-1};int index=0;typedef struct BinaryTreeNode{int key;struct BinaryTreeNode* left;struct BinaryTreeNode* right;}BinaryTreeNode,*BinaryTree;BinaryTree createBinaryTree(){BinaryTree Root;int x;x=src[inde 阅读全文

posted @ 2013-09-07 16:59 lovelace86 阅读(232) 评论(0) 推荐(0)

2013年8月25日

进程运行状态图

摘要: 阅读全文

posted @ 2013-08-25 21:12 lovelace86 阅读(365) 评论(0) 推荐(0)

消除产生式的左递归

摘要: 一个文法含有下列形式的产生式之一时:1)A→Aβ,A∈VN,β∈V*2)A→Bβ,B→Aα,A、B∈VN,α、β∈V*则称该文法是左递归的。然而,一个文法是左递归时,不能采取自顶向下分析法。消除左递归方法有:a)把直接左递归改写为右递归:设有文法产生式:A→Aβ|γ。其中β非空,γ不以A打头。可写为:A→γA'A'→βA'|ε一般情况下,假定关于A的产生式是:A→Aα1| Aα2 |… |Aαm|β1|β2 |…|βn其中,αi(1≤i≤m)均不为空,βj(1≤j≤n)均不以A打头。则消除直接左递归后改写为:A→ β1A'| β2 A' |…| βnA& 阅读全文

posted @ 2013-08-25 20:19 lovelace86 阅读(387) 评论(0) 推荐(0)

2013年5月11日

dll的创建和使用

摘要: 前几天有个朋友问道这个问题,结果因为以前从没搞过这个,对vs2005也不熟悉,竟花了2个小时才搞定, 。特地拿来与大家分享,希望能给像我这样的菜鸟们一些帮助,O(∩_∩)O【第一步】创建自己的dll1.打开vs2005,选择菜单【File-New-Project】,在弹出对话框中选择[Visual C++]下的[Win32]-[Win32 Console Application],输入工程名后确认。2.在弹出的对话框中选择[next],在Application Settiongs中选择Application type为Dll,Additional options选择Empty project, 阅读全文

posted @ 2013-05-11 22:46 lovelace86 阅读(207) 评论(0) 推荐(0)

2013年5月10日

函数指针详解

摘要: 关于C++中函数指针的使用(包含对typedef用法的讨论)(一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表)char(*pFun)(int);charglFun(inta){return;}voidmain(){pFun=glFun;(*pFun)(2);}第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解 阅读全文

posted @ 2013-05-10 14:45 lovelace86 阅读(150) 评论(0) 推荐(0)

2013年5月7日

linux间进程的通信方式

摘要: linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memory),消息队列(message queue),共享内存(shared memory),信号量(semaphore),信号(signal),套接字(socket).(1)管道(pipe):管道允许一个进程和另一与它有相同祖先的进程之间通信;(2)命名管道(FIFO):类似于管道,但是它可以用于任何两个进程之间的通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。(3)信号(signal):信号时比较复杂的通信方式,用于通知接收进程有某种事情发生 阅读全文

posted @ 2013-05-07 20:59 lovelace86 阅读(180) 评论(0) 推荐(0)

导航

点击右上角即可分享
微信分享提示