Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

08 2012 档案

摘要:代码如下: 1 //使用非递归,通过归纳验证总结出规律,枚举处元素个数 2 int64 f_n(int64 m,int64 n) 3 { 4 int64 a[m][n]; 5 int i,j; 6 for(i=0;i<n;i++) 7 { 8 a[0][i]=i+1;//每列第一个元素 9 }10 for(i=0;i<m;i++)11 {12 a[i][0]=i+1;//每行第一个元素13 }14 for(i=1;i<m;i++)15 {16 for(j=1;j<n;... 阅读全文

posted @ 2012-08-31 19:14 romi 阅读(1705) 评论(0) 推荐(1) 编辑

摘要:构造和使用二叉树后,将二叉树的释放,需要将存储二叉树节点的内存空间释放掉,最后将二叉树置NULL。根据前面一篇文章中二叉树的遍历可以得到启示,遍历是将节点数据元素找出来,同样利用便利的思想,也可以将节点指向的内存空间释放掉。这里需要注意的问题时,释放的先后问题,根节点必须在左子树和右子树的后面释放,因此,利用后续遍历的方法可以释放掉二叉树中多有节点的存储空间。如下代码: 1 /释放二叉树的内存空间,将二叉树置空 2 void BTreeSetNull(BTree *tree) 3 { 4 if(tree==NULL) 5 { 6 return; 7 } ... 阅读全文

posted @ 2012-08-30 22:11 romi 阅读(9623) 评论(0) 推荐(2) 编辑

摘要:前面一篇文章单独说了二叉树的构建,二叉树构建好后,接下来就有二叉树的遍历问题,即读出二叉树中所有的节点数据。三种遍历方法:前序遍历,中序遍历,后序遍历。前序遍历:先访问根节点,然后前序遍历左子树,最后前序遍历右子树中序遍历:先中序遍历左子树,然后访问根节点,最后中序遍历右子树后续遍历:先后序遍历左子树,然后后序遍历右子树,最后访问根节点由上面的遍历步骤可以看出三者的差别就是根节点访问顺序的不同。如果将递归方式构建二叉树的过程理清楚了,那么二叉树的遍历问题就比较容易理解。这里使用最容易理解的递归方法遍历二叉树,代码如下: 1 #include<stdio.h> 2 #include& 阅读全文

posted @ 2012-08-30 21:49 romi 阅读(1274) 评论(0) 推荐(1) 编辑

摘要:树是一种非线性的数据结构,树有根节点,子树等概念。二叉树(Binary Tree):每个节点最多有两颗子树,并且子树有左右之分。概念:树的深度,满二叉树,完全二叉树,树的节点树二叉树包括顺序存储和链式存储,这里只说链式存储。二叉树的每个节点和双链表有些类似,但是树的结构要比双链表复杂,在构造树的过程中涉及到递归调用的问题,递归的问题往往是很复杂的问题,因此,这里单独说二叉树的构建。国际惯例,先上代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 //定义二叉树 6 typ 阅读全文

posted @ 2012-08-30 11:51 romi 阅读(16462) 评论(0) 推荐(3) 编辑

摘要:队列:先进先出的线性表,它只允许在一端(队尾)进行插入操作,在另一端(队首)进行删除操作。与栈的插入和删除都在栈顶进行不同。这里只说队列的链式存储。国际惯例,先上源码 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 //定义队列 6 typedef struct node{ 7 int data; 8 struct node *next; 9 }Queue; 10 //定义对手指针和队尾指针 11 typedef struct pointer{ 12 Queue *f... 阅读全文

posted @ 2012-08-28 22:23 romi 阅读(5549) 评论(0) 推荐(2) 编辑

摘要:栈:一种只允许在一端进行插入和删除的线性表。向栈中插入元素叫进栈,从栈中删除数据元素叫出栈。栈有顺序存储和链式存储,顺序存储需要事先分配栈的内存空间,这里只讲链式存储。国际惯例,先上源代码,再说各个模块。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 //栈的定义 6 typedef struct node{ 7 int data; 8 struct node *next; 9 }Stack;10 11 //栈的初始化12 void StackInit(Stack *top 阅读全文

posted @ 2012-08-28 15:47 romi 阅读(816) 评论(0) 推荐(0) 编辑

摘要:双链表即双向链表,链表中每个节点有两个指针,分别指向节点的直接前驱和直接后躯。特点:从双链表的任一节点开始,都可以非常方便的访问他的前驱节点和后继节点。这也是单链表的缺点,单链表可以方便的访问某一节点的后继节点,但没法访问他的前驱节点。双链表的定义及其操作于单链表类似,要注意的就是每个节点的两个指针域。直接上代码 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 //定义双链表 6 typedef struct dnode{ 7 char data; 8 struct dnod 阅读全文

posted @ 2012-08-28 12:42 romi 阅读(2366) 评论(0) 推荐(0) 编辑

摘要:在使用C/C++编程时,有时内存泄漏问题对程序会形成灾难,这种问题往往要仔细检查。linux下有方便测试程序内存管理的工具:valgrindvalgrind包含几个标准的工具,它们是: 1、memcheck memcheck探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题: 1)使用未初始化的内存2)读/写已经被释放的内存3)读/写内存越界4)读/写不恰当的内存栈空间5)内存泄漏6)使用malloc/new/new[]和free/delete/delete[]不匹配。2、cach 阅读全文

posted @ 2012-08-28 11:45 romi 阅读(6700) 评论(0) 推荐(0) 编辑

摘要:顺序表的缺点:插入和删除需要进行元素的移动链表:使用节点存储数据元素,节点的地址可以连续也可以不连续链表分为单链表/双链表/循环链表,这次只说单链表。单链表中一个节点的组成:数据域+指针域,指针于中存放的是是一个指针,指向下一个节点的地址。内容包括:单链表的定义/初始化/查找节点/插入节点/删除节点先上代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 //定义单链表 6 struct node{ 7 char data; 8 struct node *next; 9 } 阅读全文

posted @ 2012-08-27 14:30 romi 阅读(1065) 评论(0) 推荐(0) 编辑

摘要:在IBM dw上看到的,以前也看过类似的今天拿来分享下~引导 Linux® 系统的过程包括很多阶段。不管您是引导一个标准的 x86 桌面系统,还是引导一台嵌入式的 PowerPC® 机器,很多流程都惊人地相似。本文将探索 Linux 的引导过程,从最初的引导到启动第一个用户空间应用程序。在本文介绍的过程中,您将学习到各种与引导有关的主题,例如引导加载程序、内核解压、初始 RAM 磁盘以及 Linux 引导的其他一些元素。 早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序。尽管目前的计算机已经装备了很多工具 阅读全文

posted @ 2012-08-23 14:44 romi 阅读(322) 评论(0) 推荐(0) 编辑

摘要:系统安装Ubuntu后,给Ubuntu的分区不够大,Google了一下Ubuntu系统的清理磁盘空间。提示 1:清理残余的配置文件一般而言,当我们从 Ubuntu 系统中删除了一个软件之后,该软件的残余配置文件并没有被删除。如果你确信以后不再使用该软件,那么保留其配置文件实在没有必要,所以我们大可一并删除之。要删除某个软件的残余配置文件,可以执行下面的操作:在终端中执行 sudo synaptic,以便启动 Synaptic 包管理工具。点击 Synaptic 右下角的 Status 按钮进行切换。现在,你应该能够在 Synaptic 的左边看到 Not installed (residual 阅读全文

posted @ 2012-08-22 14:04 romi 阅读(478) 评论(0) 推荐(0) 编辑

摘要:使用gdb时遇到这个问题,刚开始接触linux下使用gdb调试程序,其原因是生成的二进制可执行文件没有使用-g选项。gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件,gcc -g example.c -o example这样就可以了,用gdb调用example救木有问题鸟。新手学习,做下记录。 阅读全文

posted @ 2012-08-21 22:43 romi 阅读(10105) 评论(2) 推荐(2) 编辑

摘要:喇叭声音还行,可是工作中不能开着喇叭把,在声音输出首选项中将连接器选择为“Anolog Headphones”时,即只有耳机输出,这时耳机听到的声音很小,将输出音量调到很大都不起什么效果。网上找了一圈,总算解决了,如下再终端输入alsamixer,按回车,出现如下图声卡设置选项这里,Front这个参数最开始是0,将它增大后声音就大了,最好把它调到最大(用向上的箭头)。按意思Front应该是前端放大器,最开始是0,声音没有放大,难怪用耳机输出时声音小的很。Front Mi不知道是干嘛的,开了后有噪音,建议调到最低。 阅读全文

posted @ 2012-08-21 22:20 romi 阅读(2417) 评论(0) 推荐(0) 编辑

摘要:extern和static都可以用来修饰变量和函数,有什么区别呢,用法是什么样的呢。1.变量按存储类型划分,C语言中变量的类型有4中,分别为自动变量 关键字auto,该关键字是可以省略的,比如 int i;变量i就是自动变量外部变量 关键字extern,之所以称外部变量,是因为变量要在外部,即其他文件中使用。全局变量一般使用外部变量存储。如果外部变量使用在前,定义在后,或者引用其他源文件中的外部变量,必须使用extern对其进行外部声明。静态变量 分为静态全局变量和静态局部变量。静态全局变量只能在当前源文件内使用。静态局部变量的作用域是调用该变量的函数体,但程序的整个运行过程中,它自始至终占用 阅读全文

posted @ 2012-08-18 20:53 romi 阅读(2529) 评论(0) 推荐(1) 编辑

摘要:cuda几个月前接触过,当时只是了解大概,知道怎么用,现在重新看了《大规模并行处理器编程实践》这本书,书上讲的是第一代的cuda架构,现在的gpu经过了fermi都已经是开普勒架构了,我使用还是G80卡,看来得与时俱进了,这是后话了。今天用cuda时照着以前的思路,出现了问题。经解决后,这里总结如下:1.使用cuda,可以用在控制台应用程序中,也可以用于GUI中。用在GUI中时,和控制台应用程序一样将cuda计算部分写在函数内(.cu文件内,因为只有.cu文件才能经过nvcc编译),调用该函数即可。2.新建项目后,是没有加入nvcc编译器的,这时在自定义生成规则中加入CUDA(右键工程),如下 阅读全文

posted @ 2012-08-16 21:06 romi 阅读(3170) 评论(0) 推荐(0) 编辑

摘要:C/C++中函数参数 值传递 指针传递 引用传递 阅读全文

posted @ 2012-08-09 11:59 romi 阅读(58363) 评论(8) 推荐(15) 编辑

摘要:Qt QTreeWidget控件的树形结构的实现及其使用 阅读全文

posted @ 2012-08-08 14:05 romi 阅读(63390) 评论(0) 推荐(6) 编辑

摘要:当对一个源文件进行编译时,系统将自动调用预处理程序对文件中与处理部分进行处理,完成后才进入对源程序的编译。所谓宏定义,是使用一个标识符来表示一个字符串。宏有两种,一种是不带参数的宏,一种是带参数的宏,如下所示:不带参数:#define PI 3.14159带参数:#define MAX(a,b) (a>b)?a:b不带参数比较容易理解,带参数的宏需要注意以下几点:①宏定义中的形式参数指示标志符,不分配内存空间,宏调用过程也只是符号替换,不存在值的传递。②宏名和形式参数之间不能加空格,否则会被认为是无参数的宏定义。例如 #define MAX (a,b) (a>b)?a:b,该语句的 阅读全文

posted @ 2012-08-05 16:35 romi 阅读(1697) 评论(0) 推荐(0) 编辑

摘要:Qt串口通信程序的设计 阅读全文

posted @ 2012-08-01 19:50 romi 阅读(953) 评论(0) 推荐(0) 编辑

摘要:QT样式表设置的学习 阅读全文

posted @ 2012-08-01 19:38 romi 阅读(15733) 评论(0) 推荐(0) 编辑