
C/C++
文章平均质量分 70
zhoujunbuaa
这个作者很懒,什么都没留下…
展开
-
define的几种情况
define的两种情况:1)只是定义一个变量,不赋任何值,只是一个开关的作用。 2)赋予变量一个值,但是不能用等号 3)赋予宏变量另一个宏,但是不能用用#if DEF_EQUAL_VALUE==10 或#if DEF_EQUAL_VALUE 来判断, 而只能 #if defined DEF_EQUAL_VALUE 错误的情况: 用等号 会出错 // de原创 2010-11-30 10:01:00 · 1247 阅读 · 0 评论 -
C语言结构体中的位域
结构体中的位域会强制对齐,而且与申明的类型有关,例如char 则按8bit压缩对齐,int按32bit压缩对齐。 以上程序输出打印的是1,即1个字节 以上程序打印的是4,即4个字节原创 2011-02-28 22:25:00 · 782 阅读 · 0 评论 -
一个简单的文件处理--16进制数据统计分析
#include "stdafx.h" #include #include #include #include using namespace std; const char * str1="offset_lr offset: "; #define BUFFERSIZE 128 char StrBuffer[BUFFERSIZE]; #define SIZE 49 int SMALL_COUNT[SIZE]; int LARGE_COU原创 2011-03-03 23:21:00 · 1684 阅读 · 0 评论 -
字符串数组与指针
因为这两个小问题折腾了一晚上。 1、错误:运用字符串指针: char * sequenceStr; if(ch!='/r') { *(sequenceStr + i) = ch; //出错,没有分配就赋值,出错,但是编译的时候没报错 sysPrintf("i:%d/n",i); i++; } 最好是申明为字符串数组 char se原创 2011-02-20 22:23:00 · 718 阅读 · 0 评论 -
VC++动态链接库(DLL)编程深入浅出
出处:pconline 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执原创 2011-05-20 11:10:00 · 785 阅读 · 0 评论 -
自己动手写的UART2驱动
昨天发现新唐的BSP中没有提供UART2的定义 即其操作,只定义了UART0和UART1及其驱动操作。但是涉及的板子中又弄了3路串口,当然UART2在其中。 第一反应就是查阅新唐的资料,NUC1**的前期设计文档中,有些说可以支持UART2,但是又有很多定义的地方都Reserve了,就是本该UART2相关的位却为保留位。心里没谱。 没谱也没办法,咬咬牙开始吧。原创 2011-06-21 12:01:00 · 3056 阅读 · 0 评论 -
0-1背包问题,poj 3624 Charm Bracelet动态规划-解题报告,增加最优路径构建
1)0-1背包问题和 零碎背包问题是不同的,前者只能用动态规划来做, 后者可以用贪心算法。2)动态规划的核心是 “有多个重叠子问题”,“自底向上”解决问题。3) 0-1背包问题 ,W为最大重量,n为物体个数,求最大的价值Value,可在O(nW)的时间复杂度内解算出来。原创 2011-08-16 21:14:58 · 2541 阅读 · 0 评论 -
关于常见排序算法的稳定性分析和结论
原文:http://hi.baidu.com/cuifenghui/blog/item/0587932b039557f9e7cd4051.html 这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学转载 2011-09-14 09:31:55 · 615 阅读 · 0 评论 -
const int *p,const * int p,int const *p
原文地址:http://sunjinming85.blog.163.com/blog/static/12119575201002794841503/1 从const int i 说起 有了const修饰的ic 我们不称它为变量,而称符号常量,代表着20这个数转载 2011-09-15 10:25:54 · 496 阅读 · 0 评论 -
动态规划-poj1088 滑雪 ---增加了最优路径构建
一、有两种思路:1)根据记忆搜索(保存了最优值表格),在纯粹的递归思路里加入记忆表格。2)先将高度排序,然后依次从点由低到高 计算 该点的最长路径长度。(因为当矮点不可能通过高点,而比当前矮的点都在之前计算好了)----------------------------原创 2011-08-17 21:45:19 · 1337 阅读 · 0 评论 -
#define的一个精妙用途,用来标记起始和结束
在NTP项目中,NTP.h中,#ifdef AUTOKEY#define clear_to_zero opcode u_int32 opcode; /* last request opcode */ associd_t assoc; /* peer association ID */ u_int32 crypto; /* peer status word */ EVP_PKEY原创 2011-12-08 11:53:34 · 2066 阅读 · 0 评论 -
Configure,Makefile.am, Makefile.in, Makefile文件之间关系
自己:最近搞一个ntpdsim,一直没能生成libntpsim.a,所以一直没有成功生成ntpdsim。 原因是对makefile的理解一直不太深,尤其是对automake之类的应用,没有理解他们之间的相对关系,还一直想自己动手写一个完整的Makefile,但是相对于庞大的工程真是无能为力。偶然看到这篇文章讲解了整个体系,大体是autoscan 、aclocal、auto转载 2011-12-08 15:36:30 · 776 阅读 · 0 评论 -
switch case注意问题,defualt 与位置无关
在阅读代码时发现有这样的代码,即在switch语句中default是在最前面的,原以为后面的是不会执行,实际上经过代码测试:default是与放置的位置无关的,就想case语句的不同于他们的先后顺序无关一样。 switch (my_opts->value.i) { default: NTP_INSIST(0); break; case T_None原创 2011-12-10 21:48:12 · 1538 阅读 · 1 评论 -
NTP_simulation,NTP开放源码 的模拟配置问题,官方描述不正确
所用的ntp 开发包是 ntp-dev-4.2.7p56一、问题描述 NTP的模拟一直想用原汁原味的源代码来模拟,可惜一直卡在配置问题上,没有进展近两个星期。最终还是看代码修改了一条源代码的配置才搞定了,开源代码就是没有一个完善的文档,以及版本问题跟新系统。 用的是ntp.conf是官方网站描述的配置释例:# Client configuratio原创 2011-12-18 16:57:29 · 1493 阅读 · 0 评论 -
Linux下运用MMAP在进程间通信
由于在操作系统层面,各个进程所看到的虚拟地址空间是独立的,之间没有交集。因此需要通过中间一个关联将多个关联进程的不同虚拟地址映射到相同的物理地址空间中。MMAP 就是这么一个功能,它把一个文件(也就是在内存中的物理地址空间确定)映射到不同进程的地址空间中。一、写 值得注意的是由于MMAP需要内存中的物理地址空间,因此在写操作过程中需要将文件加载到内存中才能进行操作,因此在打原创 2012-01-02 17:31:07 · 1213 阅读 · 0 评论 -
fedora上NS2.35在安装tclcl时找不到g++
当时一直想试 yum install g++不成功,而且 yum search g++的出的也只是Arm的交叉编译工具 应该: yum install gcc-c++,比较特别。原创 2012-02-21 16:12:52 · 916 阅读 · 0 评论 -
习题3.2:不调用fcntl函数来实现dup2的功能
思路:用dup来实现dup2程序:#include #include #include int mydup2(int oldfd, int newfd){ int *p; int i = 0; if (oldfd == newfd) return newfd; close(newfd); p = (i转载 2012-04-25 11:08:40 · 611 阅读 · 0 评论 -
2010年11月21日微软实习生笔试题--反序对 数目求解
题目大意:输入n个正整数(rightchild!=NULL) //注意是if,不是while,因为已经递归的计算了 { return CaculateReversePairs(pTree->rightchild);//右子树,不能加1 } 不需要加1,当时可能没哟加1,但是印象中又好像加了,这一点非常重要。 #ifndef REVERSE_PAIRS_H #define REVERSE_PAIRS_H template struct原创 2010-11-22 19:24:00 · 1780 阅读 · 13 评论 -
重温 汉诺塔 问题
<br />零、汉诺塔问题<br /> 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。 <br />原创 2010-11-19 21:29:00 · 1525 阅读 · 0 评论 -
C++中按引用传递 和 指针
以下是一些归纳: 1)引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值. (2)不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL. (3)引用一旦被初始化为指向一个对象,它就不能被改变不另一个对象的引用;(地址不可变)而指针在任何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系. (4)引用的创建和销毁并不会调用类的拷贝构造函数 (5)在语言层面,引用的用法和对象一样;原创 2011-01-14 22:46:00 · 871 阅读 · 0 评论 -
fseek得到fileSize 和 fread得到filesize的区别
<br /><br />/*!<br /> ***********************************************************************<br /> * /brief<br /> * allocates memory buf, opens file Filename in f, reads contents into<br /> * buf and returns buf<br /> * /param Filename<br /> * na原创 2010-10-13 17:34:00 · 1201 阅读 · 0 评论 -
2010顶嵌杯第一题--24点运算
痛恨,当时这道题没有做出来,没有安下心认真分析。当时作出了第二道题,迷宫问题,因为以前见过类似的(具体缺乏锻炼,调试了老半天)。题目如下:-----------------------------------快算24Description给定4个不大于10的正整数(范围1-10),要求在不改变数据先后顺序的情况下,采用加减乘除四种运算,找到一个表达式,使得最后的结果是24。Input4个不大于10的正整数。输入数据保证存在唯一解。Output不改变位置顺序,由'+','-','*','/'4个运算符和'('原创 2010-12-04 17:07:00 · 908 阅读 · 0 评论 -
基数排序--链式基数排序(Radix)
链式基数排序:属于”分配式排序”(distribution sort)基数排序法又称“桶子法”(bucket sort)或bin sort。 链式基数排序思想:透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数。 时间效率:设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)),其中,一趟分配时间复杂度为O原创 2010-12-03 17:43:00 · 2498 阅读 · 0 评论 -
迷宫问题--非递归回溯 C语言实现
零、注意要素 1、在迷宫周围需要设置围墙(一圈的1) 2、每个点的走动,需要记录方向,(x,y,方向) 3、如果某点遇到围堵,回退,那么需要标记这个点是不通的。会退后的下一点再往该方向查找时,这一点是不通的,那么那一点需要判断其他方向,如果其他方向也不同则回溯,并且标记那一点也为不通的。 4、stack的topPointer问题,topPointer是指向最上面的数据的上一个空间, void PUSH(stackNode node,mazeStack *stack)原创 2010-12-06 17:22:00 · 1383 阅读 · 0 评论 -
Volatile关键词
volatile 英文意思“挥发,挥发物,易变的”。 意思是这个关键词修饰的变量是易变的,提示编译器不要优化它(优化从Cache中取数据),而从它原始的地方拿数据。 volatile关键词注意的地方主要是: 1、中断服务程序中修改过,而其它程序也需要用到的变量需要加volatile; 2、多任务环境下各任务间共享的变量应该加volatile,如信号量等; 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义; 另外,以上这几种情况经常还要同原创 2010-10-21 15:33:00 · 599 阅读 · 0 评论 -
关于文件读写(C和C++)
一、C语言版 在C语言中stdio.h头文件里包含了文件读写操作。主要是通过FILE*指针进行文件操作。通过fscanf和fprintf对文件进行格式化的读写,或通过fread 和 fwrite对文件进行二进制读写。(在数据量比较大时,一般建议用后者,因为格式化在输入时需要将ASCII码转为二进制形式,在输出时需要将二进制形式转为ASCII码,花费较大系统时间。fread 将文件的内容直接读入到一个指针中,fwrite将一个结构体的内容存放到文件中。size_t fread ( void * ptr, si原创 2010-10-25 15:48:00 · 937 阅读 · 0 评论 -
二叉排序树
二叉排序树,在各种面试中都要考察,算法数据结构考察的重点。今天照着教科书的程序打了一通,发现它运行达不到预想的效果(中序遍历为空),调试后发现其在Insert出错,没有能够将值插入二叉树,但保存了值到ST=new Node[maxSize];的ST中,ST用于顺序保存输入的数据。 删除时 : 12 5 54 18 64 14原创 2010-10-27 11:32:00 · 473 阅读 · 0 评论 -
静态表查找
静态表,在折半查找前,一般要对其进行排序,这样才能折半。如果是顺序查找是不要求的。 1、冒泡排序:静态查找表在升序排序时,用到冒泡排序。在冒泡排序时每一循环都使得最后的数据时稳定的,也就是说第一次最大的数据在最后,第二次次大的数据在倒数第二,这样在每次循环时只从j=0到jST[j+1].key) { t=ST[j].key; ST[j].key=ST[j+1].key;原创 2010-10-27 12:32:00 · 694 阅读 · 0 评论 -
双向冒泡排序
这是完全自主编码,哈哈。但是思想还是书上先有的,但是没有具体代码。下面是运行结果截图,输入的为23 ,45,2,15,9 冒牌排序流程如下,一次正向冒泡,从左至右。然后一次反向冒泡,从右至左。 第一次把最大的记录放到表尾,第二次将最小记录放到表头,如此反复。 pos[0]记录无序序列的第一个位置0,pos[1]记录无序表的最后一个位置len-1; 步长为d,正向冒泡为1,反响冒泡为-1.合并两方向为: for(int i=pos[(1-d)/2];i!=pos[(1+d)/2];i=i原创 2010-10-27 16:19:00 · 2397 阅读 · 0 评论 -
Hash 表运用
今天实际code温习了下Hash,主要4个功能是:给定一个整数n创建可以存放n个值的Hash表,在表中插入元素,查找对应元素,显示Hash表。 hash.h如下: #ifndef _HASH // Specifies that the minimum required platform is Windows Vista. #define _HASH // Change this to the appropriate value to target other vers原创 2010-10-27 10:22:00 · 546 阅读 · 0 评论 -
双向冒泡排序 和 单向冒泡排序 算法分析比较
假设单向冒泡排序也是 在如果没有交换发生的情况下则终止(即changeFlag==false的情况下). 以下是单向冒泡排序 template void SSearch::Ascendsort() { T t; bool changeFlag=false; for(int i=0;iST[j+1].key) { t=ST[j].key; ST[j]原创 2010-10-27 17:34:00 · 1490 阅读 · 0 评论 -
选择排序1-简单选择排序
简单选择排序为选择排序的一种。简单选择排序的原理是,每次选择最小的数放在最前面{第一次得到第一个最小数(遍历了一次),第二次得到第二个最小数(从第二个数开始遍历,依次类推} template int SelectMinKey(SqList &L,int n) { int min=n; T minkey; minkey=L.key[n]; //当前n为最小 for(int i=n+1;i vo原创 2010-11-01 22:14:00 · 752 阅读 · 0 评论 -
选择排序(三)--堆排序
一、堆排序思想 (要和shell排序区别) 堆,是一棵完全二叉树,(完全二叉树概念:只有最后两层可以是业界点,而且最底层的叶节点都在左侧,图在上一篇日志上有) 堆可以用数组来描述,在排序中强调的是 大根堆(最大值在树根),将大根堆的的根部值 和 无序数组的最后一个数交换,然后重新排序新的无序堆为 大根堆。 具体排序思想:将待排序区分为无序区和有序区,无序区在前,有序区在后。未排序前无序区为整个待排序区间,没有有序区。 排序的过程是,不断原创 2010-11-11 15:12:00 · 926 阅读 · 0 评论 -
关于C/C++函数指针
重要参考网址:http://www.newty.de 今天lxj问我关于函数指针的写法,的确经常看这样的代码,但是突兀的闻起来,还真有点迷糊,缺乏总结以及实际自己动手编写,而只是改,那么会有很多问题。 总结:函数指针 就是 指向一个函数的的入口地址,保存的是函数的地址。函数指针的类型 就是 函数返回类型的指针(如果函数返回 float ,则函数指针当然是指向float的,即float *);函数指针的 参数和 函数原型的参数的个数 和 类型一致。 在将 函原创 2011-01-04 23:31:00 · 597 阅读 · 0 评论 -
顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。 网上听说听到包括Autodesk、EMC在内的多家公司在面试或者笔试里采用过这道题。但是看有些人做的,头晕。还是自己弄了弄。 解题思路(借鉴原创 2011-01-06 22:39:00 · 3238 阅读 · 1 评论 -
选择排序(二)--树形选择排序
利用满二叉树的性质,思想:将输入的数据存放到满二叉树的叶节点,通过比较树中剩余可用节点(从底层的叶节点开始)的大小,每次选择最小的数值(比较复制到二叉树的顶端),并且把最小数值赋给排序数组的前端,把最小数值原来叶节点的位置设置为不可用;依次循环直至最后一个可用叶节点。 一、满二叉树和完全二叉树区别如图: 二、程序讲解: template class TreeNode{ public: T data; int index; int原创 2010-11-10 22:52:00 · 5146 阅读 · 0 评论 -
C++输入数据流用回车符判断终止
实际问题:很多读入数据都希望用回车来结束,比如输入一串double(输入时用空格隔开),存入到一个vector或数组中,最后用回车结束(关键是个数不限,所以不能用固定循环次数来限定它。 咋一看很简单,要编程突然还没头脑~~~关键是字符和整数或浮点数据的区别。 用cin.get()来获取流中的字符,然后判读是否为回车符,如果不是则将字符放回流中(unget), #include "stdafx.h" #include using namespace st原创 2010-10-29 22:57:00 · 10881 阅读 · 8 评论