LoveFM

导航

2011年12月3日 #

linux设备驱动程序之简单字符设备驱动

摘要: 一、linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:1、字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。2、块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。 每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备。二、字符设备驱动程序基础:1、主设备号和次设备号(二者一起为设备号): 一个字符设备或块... 阅读全文

posted @ 2011-12-03 00:37 LoveFM 阅读(51196) 评论(8) 推荐(16) 编辑

2011年11月30日 #

求子数组的最大和___<3>

摘要: 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,那么和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。分析:因为是O(N)的复杂度,因此需采用的DP的思想,记录下当前元素之和(为其最优状态,既最大),将其与目前所得的最大和比较,若大于则更新,否则继续。状态的累加遵循这个过 程:如果当前和小于0,则放弃该状态,将其归零。/** 求子数组的最大和* 利用的是DP(dynamic p... 阅读全文

posted @ 2011-11-30 15:48 LoveFM 阅读(1425) 评论(3) 推荐(0) 编辑

写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷

摘要: 分析:这是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。 对数字做运算,除了四则运算之外,也就只剩下位运算了。 1 int AddWithoutArithmetic(int num1, int num2) 2 { 3 if(num2 == 0) 4 return num1; 5 6 int sum = num1 ^ num2; 7 int carry = (num1 & num2) << 1; 8 9 return... 阅读全文

posted @ 2011-11-30 12:00 LoveFM 阅读(712) 评论(0) 推荐(0) 编辑

2011年11月29日 #

定义栈的数据结构____<2>

摘要: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 无论使用链表还是数组实现的栈,push和pop操作的时间复杂度都是O(1)。所以,难点在于实现min使其时间复杂度也是O(1)。该堆栈需要新增一个元素minPoint指针。假设目前minPoint指针指向最小元素,push(data),若data比minPoint指向的元素还小,那么minPoint指向data。再pop(),此时minPoint指向的最小元素不再存在于堆栈中,需要修改minPoint指针。因此,仅仅依靠一个minPoint指针无法顺利实现功能。... 阅读全文

posted @ 2011-11-29 22:05 LoveFM 阅读(3560) 评论(0) 推荐(0) 编辑

LevelOrderBTree

摘要: 1 #include<iostream> 2 #include<deque> 3 #include<stdlib.h> 4 using namespace std; 5 6 static int k=1; 7 8 struct BinaryTreeNode{ 9 BinaryTreeNode* m_pLeft; 10 BinaryTreeNode* m_pRight; 11 int m_nValue; 12 }; 13 14 15 //从上到下的层次访问该二叉树(每一层将单独输出一行)... 阅读全文

posted @ 2011-11-29 20:34 LoveFM 阅读(233) 评论(0) 推荐(0) 编辑

SearchBTreePath____<4>

摘要: 1 /* 2 * SearchBTreePath.cpp 3 * 4 当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。 5 如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。 6 7 如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到父结点。 8 因此我们在函数退出之前要在路径上删除当前结点并减去当前结点的值, 9 以确保返回父结点时路径刚好是根结点到父结点的路径。 10 11 我们不难看出保存路径的数据结构实际上是一个栈结构,因为路径要与递归调用状态一致, 12 而递归调... 阅读全文

posted @ 2011-11-29 20:18 LoveFM 阅读(234) 评论(0) 推荐(0) 编辑

BinaryTreeConvertToDoubleList____<1>

摘要: 1 /* 2 * BtreeToDoublelist.cpp 3 4 * 思路:我们可以中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。 5 * 如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表, 6 * 我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后, 7 * 整棵树也就转换成一个排序双向链表了。 8 */ 9 10 using namespace std; 11 #include <stdio.h> 12 #include <iostream> 13 14 struct BSTreeNode... 阅读全文

posted @ 2011-11-29 20:12 LoveFM 阅读(484) 评论(0) 推荐(0) 编辑

(百度笔试)简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点

摘要: 二叉树的遍历:D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树。二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。深度优先遍历二叉树。1. 中序遍历(LDR)的递归算法:若二叉树为空,则算法结束;否则: 中序遍历根结点的左子树; 访问根结点; 中序遍历根结点的右子树。2. 前序遍历(DLR)的递归算法:若二叉树为空,则算法结束,否则: 访问根结点; 前序遍历根结点的左子树; 前序遍历根结点的右子树。3. 后序遍历(LRD)的递归算法:若二叉树为空,则算法结束,否则: 后序遍历 阅读全文

posted @ 2011-11-29 16:16 LoveFM 阅读(6929) 评论(0) 推荐(0) 编辑

2011年11月25日 #

Linux进程概念

摘要: 一:Linux进程的四大要素1:一段供进程执行的程序,该程序可以被多个进程执行。2:独立的内核堆栈。3:进程控制快(task_struct:有了这个数据结构,进程才能成为内核调度的一个基本单位接受内核的调度。同时,这个结构还记录着进程所占用的各项资源。4:独立的存储空间:即拥有专有的用户空间,除了前面的内核空间还有用户空间。线程:只有前三条,没有第四条。进程和线程的区别如下图:内核线程:完全没有用户空间。用户线程:共享用户空间。二:Linux进程分类:1:交互式进程:一般是由Shell启动的进程。这些进程经常和用户发生交互,所以花费一些时间等待用户的操作。当有输入时,进程必须很快的激活。通常, 阅读全文

posted @ 2011-11-25 16:41 LoveFM 阅读(6960) 评论(0) 推荐(0) 编辑

2011年11月24日 #

ADS1.2中RO base与RW base

摘要: RO-base address(即设定Image$$RO$$Base),这个选项将包含有RO(Read-Only属性)输出段的加载地址和运行地址设置为address,RW-base address这个选项设置包含RW(Read/Write属性)输出段的域的运行时地址。Image$$RO$$Base is the address of the read-only execution region (usually contains code and read-only data).Image$$RW$$Base is the address of the read-write execution 阅读全文

posted @ 2011-11-24 14:44 LoveFM 阅读(2511) 评论(0) 推荐(1) 编辑