自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Linux下socket基础实例

 SimpleApp传感器实验笔记 把串口接收的数据送往应用层的方法Linux下socket基础实例  2010-06-17 11:31:36|  分类:ARM/LINUX |  标签:|举报|字号大中小 订阅 说明:本例子完成的是一个客户端与一个服务器之间通信的功能,有两种功能可供选择,一是客

2014-05-19 22:52:22 477

转载 二分查找

转自:http://www.cppblog.com/converse/archive/2009/10/05/97905.html二分查找算法基本思想二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序

2014-03-28 14:43:51 472

原创 重建二叉树

输入某二叉树的前序遍历和中序遍历结果,重建出二叉树。    对于这个问题,我们首先要明白二叉树的性质,在二叉树的前序遍历中,第一个数子总是树的根节点的值,在中序列中,根节点的值总在序列的中间,而在后序遍历中,根节点的值总是在序列的最后一个。因此我们需要扫描中序遍历序列,才能找到根结点的值,并不断递归得分成左右两部分,下面是实现代码:#include #include #include

2014-01-23 18:54:44 594

原创 关于链表的一些操作(持续更新中)

虽然以前写过几篇关于链表的博客,但是感觉以前代码太乱,不严谨,而且太分散,所以重开一帖,贴上一些关于链表的操作,以后遇到相关问题就不断补充。struct ListNode{ int m_nValue; ListNode *m_pNext;};void BuildList(ListNode *&Head, int Val) //构建链表{

2014-01-22 11:32:28 645 6

转载 struct stat结构体的详解和用法

//! 需要包含de头文件#include #include int stat(const char *filename, struct stat *buf); //! prototype,原型 struct stat{ dev_t st_dev; /* ID of device containing file -文件所在设备的ID*/

2014-01-16 16:50:57 14030 1

原创 C++中部分库函数的源码

自己写的一部分C++中的关于字符串的库函数(不断更新中)。char *strcpy(char *str, const char *ptr){ if(str == ptr) return str; assert(str != NULL && ptr != NULL); char *temp = str; while((*str++ = *ptr++) != '\0'); retu

2014-01-12 16:56:04 773

原创 进程间通信

进程间通信分为两大类即低级通信 高级通信   低级通信 是指 进程间只能传递很少量的控制信息,一般来说只有一个字节或一个整型变量,例如,信号量和信号就是低级通信方式。   信号量:记录当前可用资源的数量(如饭店空闲桌子的数量。)   信号量由操作系统来维护,用户进程只能通过初始化和两个标准原语 P原语V原语 访问它。在初始化的时候,可以指定一个非负整数值来表示空闲资源的个数;原语是就是

2014-01-11 16:20:34 614

翻译 KMP模板

详情点击http://blog.csdn.net/v_july_v/article/details/7041827这里只是贴上模板备忘。void GetNext(char str[]) //求next数组{ int len = strlen(str); int i = 0; int j = -1; while(i < len - 1) { if(j == -1 |

2014-01-11 16:12:50 473

转载 进程与线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,

2014-01-09 14:48:49 410

原创 面试题:求最小的K个数。

这是编程之美上面的一道题,书中介绍了几种思路,当所要寻找的数据为海量时,普通的数组存不下,因为k一般不会太大,这时候我们可以建立一个容量为k的最大堆,遍历整个数列,不断更新堆顶元素并维护最大堆,当遍历完整个数列后,最大堆中的元素就是最小的K个数,该算法时间复杂度为n*logk。    下面我要说的是当所求的数据不是海量的时候,我们可以选择用一种类似快排的快速选择算法来实现,总的时间复杂度能

2014-01-08 21:43:46 603

转载 拷贝构造函数和赋值表达式的区别

一、引入  拷贝构造函数,用已创建的对象来初始化新建对象,对于一个已经被初始化的对象则进行operator=赋值操作。class   A;   A a;A b=a;   //拷贝构造函数调用A b(a);   //拷贝构造函数调用A a;A b;b =a;   //赋值运算符调用拷贝构造函数首先是一个构造函数,它调用的时候产生

2014-01-07 11:49:16 486

原创 堆与堆排序

二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。如下图所示一般都用数组来表示堆,i结点的父结点下

2014-01-06 18:05:21 477

转载 C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CExample {private:  int a;public:  CExa

2014-01-05 11:04:31 359

转载 c++中的命名控制

C中的static关键字在人们发明"重载"这个概念之前实际上已经被重载了,而C++则为static增添了新的含义。    在C和C++中,static都具备两个基本语意,不幸的是,两者经常混杂在一起。    1.在固定地址空间分配内存,而不是每次函数调用时在栈上分配空间。这里static的意味是静态存储(static storage)。    2.只对一个特定的转换单元(tra

2014-01-01 15:55:04 445

原创 面试题:链表翻转。

1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→6→5,用程序实现。思路:         将长度为k的一段从链表中截取,分别进行翻转,后面不足K的部分按不足的节点数翻转。//*Next代表节点所需要指向的点以及截出来的一段的指向的指针,*pre代表

2013-12-31 18:42:13 602

原创 关于const

关键字const能将对象、函数参数、返回值及成员函数定义为常量,并能消除预处理器的值替代而不对预处理器有任何影响。下面是关于const的几个用法:一、关于值替代:    1、c++中的const默认为内部连接。一般情况下,c++不为const分配存储空间,相反它把这个定义保存在它的符号表里。当const被使用时,它在编译时会进程常量折叠。    2、const可以用于集合,但编译器

2013-12-29 16:05:41 432

原创 c++中define与inline的一些注意事项

宏不会被编译,因为在源码进入编译器之前,他会被预处理器去掉,因此尽量用const代替。     宏不是函数,只是在编译前预处理阶段将程序中有关字符串替换成宏体。因此要注意下列代码中的问题:int a = 5, b = 0;max(++a, b);// a 的值增加了2次max(++a, b+10); // a 的值只增加了1次    相比之下内联函数实现了宏的效率,但在编译中不单独

2013-12-21 17:36:40 498

原创 c++中关于友元的知识点

#include using namespace std;class x;class y{public: void f(x);};class x{#include using namespace std;private: int i;public: friend void y::f(x); friend void g(x, int);};void y::

2013-12-16 19:41:06 544

原创 初学操作系统概论小结

操作系统是管理计算机硬件并提供应用程序运行环境的软件。操作系统最为直观之处在于它提供了人与计算机系统的接口。    为了让计算机执行程序,程序必须位于内存中。内存是处理器能直接访问的唯一大容量存储区域。    计算机系统的设计有多种不同的方法。单处理器系统只有一个处理器,而多处理器系统包含两个或者更多的处理器来共享物理存储和外设。集群系统是一种特殊的多处理器系统。多处理器系统分为了对称

2013-12-16 12:22:03 681 1

转载 c中static作用

1. static 变量  静态变量的类型说明符是static。静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。2. 静态局部变量  静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义它的生存期为整个源程

2013-12-09 21:31:07 697

原创 面试题:单链表就地逆置

#include #include #include #include #include using namespace std;struct ListNode { int m_nKey; ListNode* m_pNext; }; void NewSet(ListNode *&Head, int n) { ListNode *t;

2013-10-25 15:10:44 536

原创 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。   例如输入  8  / \ 6 10/ \ / \5 7 9 11输出8 6 10 5 7 9 11。解题思路:利用队列先进先出(FIFO)的性质,取出队首元素,输出队首节点元素,将节点的左右子节点加入队列,取出队首元素,重复上述操作,直到取出队列中所有元素。

2013-09-24 21:13:52 2472 1

原创 面试题:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。

题目:         输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:  8  / \6 10 /\  /\5 7 9 11输出:  8  / \ 10 6 /\    /\11 9 7 5定义二元查找树的结点为:struct B

2013-09-23 11:17:12 861

原创 面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。

题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:   struct ListNode{  int m_nKey;  ListNode* m_pNext;};解题思路:                使用两个指针,p1,p2,先把p1的指针指向第k个元素,然后p1和p2同时向后遍历,当p1遍历到结尾时,p2正好

2013-09-20 10:21:28 2624

原创 HDU1565 方格取数(1) (状态压缩DP)

题意:        给你一个n*n的格子的棋盘,每个格子里面有一个非负数。从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。思路:         定义 dp[ i ][ j ]表示第 i 行选择 j 的最大值。选择 j指的是把j化为二进制,选择对应位值为1的。比如 dp[1][5] ,  5 二进制: 000

2013-08-28 10:42:30 516

原创 面试题:求二叉树中节点的最大距离

#include #include using namespace std;#define maxn 0x3ffffffint max1;struct node{ int num; //二叉树中该节点的值 int longest_val; //以该节点为根离子树中的最大距离 int second_val; //以该节点为根离子树中的第二大距离

2013-07-19 10:56:25 682

原创 面试题:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。

为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。代码如下:#include #include using namespace std;int main(){ int n,i,j; char str[100]; cin>>n; getchar(); while(n--) { gets(s

2013-07-17 16:16:18 5832

原创 面试题:判断整数序列是不是二元查找树的后序遍历结果

输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:  8  / \  6 10  / \ / \  5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。解题思路:

2013-07-17 10:22:14 691

转载 HDU1007 Quoit Design(最近点对问题)

今天刚学的,参考了别人的思路,原文链接:http://blog.csdn.net/hellobabygogo3/article/details/8042650先说下题意,很简单,给n个点的坐标,求距离最近的一对点之间距离的一半。第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标,实数。     这个题目其实就是求最近点对的距离。主要思想就是分治。先把n个点按x坐标排序,然

2013-07-13 15:31:14 3349

原创 面试题:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。

例如输入整数22和如下二元树  10     / \     5 12     / \     4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode{int data;BinaryTreeNode *pLeft;BinaryTreeNode *pRight;};

2013-07-11 10:42:59 3191 3

原创 面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)

思路:             在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。但是仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的,因为如果当前最小元素被pop出去,如何才能得到下一个最小元素?所以我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到

2013-07-10 10:15:32 4445 2

原创 面试题:把二元查找树转变成排序的双向链表

输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nValue; // value of nodeBS

2013-07-09 16:14:43 532

原创 POJ1129 Channel Allocation(点着色问题)

这题因为数据比较弱,直接用贪心过的。   题意:平面内最多26个点,给出一些点与点之间的矛盾关系,问最少使用多少颜色才能给这些点染色,并保证矛盾点之间不同色。   贪心思路:先进行建图,把各点与颜色都用序号标记,从小到大逐一寻找,每个点找的都是与该点的相邻边中未使用的颜色序号中最小的那个,如果当前的颜色在相邻边中都被使用了,则增加颜色数量,即颜色序号加一。  原题链接:点击打开链接

2013-07-08 16:28:33 709

转载 基于邻接表建图的几种方法

最近做图的题比较多,除了克鲁斯卡尔和floyd,像广搜,普里姆,Bellman-Ford,迪杰斯特拉,SPFA,拓扑排序等等,都用到图的邻接表形式。    数据结构书上表示邻接表比较复杂,一般形式如下: typedef struct Node{    int dest;                    //邻接边的弧头结点序号    int

2013-04-16 10:01:45 851

转载 整数划分问题解法2-动态规划

原文来自:http://blog.csdn.net/athenaer/article/details/8265234整数划分 --- 一个老生长谈的问题:  1) 练练组合数学能力.  2) 练练递归思想  3) 练练DP  总之是一道经典的不能再经典的题目:  这道好题求:  1. 将n划分成若干正整数之和的划分数。  2. 将n划分成k个正整数之和的划分数。

2013-04-12 21:10:34 502

原创 HDU2063 过山车(二分图最大匹配)

二分图的基本概念 一个无向图G=,如果存在两个集合X、Y,使得X∪Y=V, X∩Y=Φ,并且每一条边e={x,y}有x∈X,y∈Y,则称G为一个二分图(bipartite graph)。常用来表示一个二分图。若对X中任一x及Y中任一y恰有一边e∈E,使e = {x, y}, 则称G为完全二分图(complete bipartite graph)。当|X| = m,|Y| = n时,完全二分图G

2013-04-05 14:55:24 739

原创 HDU2196 经典树形DP

最近在学习树形DP,不太好整,也可能是自己悟性差,基本上理解一道题并做出一道题得花费上一天以上,这题是一个经典的树形DP题目。题目翻译如下:   前一段时间,学校买了第一台计算机(因此这台计算机的ID是1)。在最近几年,学校又买了N-1个新的计算机。每一个新的计算机被连接到安装好的一个计算机上。学校管理者担心局域网的运行缓慢,想知道第i个电脑需要发送信号的最大距离Si(即电缆长度到达的最远

2013-04-03 19:59:33 614

原创 HDU1181 变形课(搜索或并查集)

原题链接:点击打开链接   这道题我分别用了搜索和并查集做了一次,题目不难,可以看成一个有向图。   贴并查集代码:#include #include using namespace std;string str;int father[30];find(int x){ if(x!=father[x]) father[x]=find(father[

2013-04-01 11:31:17 1804

原创 HDU2767 强连通缩点

题意:已经有条有向边,求最少再有多少条有向边,可以使任意两点互通。做法:强连通缩点,求出缩点后所有入度为零的个数,和所有出度为零的点的个数,选其中比较大的那个。注意:当缩点后为一个点的时候,直接判断为零#include #include #include #include using namespace std;vectormap[20005];stacktest;

2013-03-26 16:47:55 529

原创 HDU1213 How Many Tables(简单的并查集)

找了个简单的并查集题目练手,对并查集复习了一遍,留个模板作为备忘。   点击打开链接#include #include using namespace std;int father[1010],a,b,visit[1010];int find(int x){ if(x!=father[x]) father[x]=find(father[x]);

2013-03-23 09:36:12 461

空空如也

空空如也

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

TA关注的人

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