自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(52)
  • 收藏
  • 关注

原创 关于宏

<br />随便写下有关宏的概念,宏在C语言里提供了一个类似函数的功能,可以提高代码的运行速度,编译器对宏括号里面的“参数”(并不是真正意义上的参数)提供的是一一置换的操作,因此必须小心地将整个宏及宏里面的参数都用括号括起来,不然在做宏替换的时候就会产生副作用,简单地举个例子:<br />#include<stdio.h>#define M(x,y) (x/y)void main(){ int a; a = M(4+4,4); printf("%d",a);}<br />这段代码

2010-07-21 21:18:00 342

原创 方法重写(overriding)与方法重载(overload)的区别

<br />方法重写(overriding)与方法重载(overload)都是C++语言中实现多态性的方法。<br />方法重写(overriding)是实现父类与子类之间多态性的方法,如果在子类中的方法定义了与父类中相同的函数名称和参数,则子类对象在使用此方法时,将调用子类中的定义,相当于父类中的方法被“屏蔽”;<br />方法重载(overload)是实现同一个类中的多态性的方法,如果同一个类中定义了多个同名函数,它们有不同的参数个数或者不同的参数类型,则称为方法重载(overload),方法重载(ov

2010-07-13 22:53:00 798

原创 大数计算专题(一)----计算大数阶乘

由于计算机数据表示大小的限制,在进行大数运算的过程中极有可能会发生数据溢出的危险,避免溢出的通用方法就是在大数运算中用数组来表示计算结果,我总结了一下相关的大数运算常见问题,今天是第一篇,大数的阶乘。代码如下:/******************************************** */ /* 算法思想转载自网络

2010-04-23 08:38:00 916

原创 一道小编程题目

编程输出和为指定数的数字组合,如5,则输出 5 = 0+5;5 = 1+4;5 =2+3;6=0+6;6=1+5;6=2+4;6=3+3;/******************************************** */ /* 程序员: 刘晋勋 *//* 日期: 2010/04/23

2010-04-23 00:36:00 596

原创 DP经典题目(二)-求最长下降子序列

题目描述:输入任一序列,每一序列以-1结束,求最长下降子序列;在做DP的时候,一定要记得赋初值!!状态转移方程:D[i] = max{1,D[j] + 1}(j = 1,2,3...i-1,A[i] #include #define SIZE 5001 using namespace std; int a[SIZE];int d[SIZE]; int main(

2010-04-22 15:21:00 1542

原创 动态规划(DP)算法介绍

动态规划一,动态规划三要素:阶段,状态,决策。如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。下面举个例子:要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯

2010-04-22 10:42:00 10197 1

原创 学习PKU POJ很有好处

从今天开始,我开始练习POJ的ACM网上训练题,以前总是自己做一些算法题,做得比较杂,现在我决定练习一下POJ的ACM题目,这样既能训练我的算法功力,又能养成良好的编程风格,呵呵。每做完一道题,看后面的Discuss很有帮助。

2010-04-22 10:16:00 960

原创 经典DP题目-滑雪问题

题目转自CSDN博客,是一道很经典的DP题目,从这道题目,我可以学到两点:1.动态规划,在递归下的记忆化搜索算法;2.状态转移方程的推导;题目描述如下:Michael喜欢滑雪这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个

2010-04-22 09:24:00 6290 2

原创 旅游归来

上周星期六和星期天去了大邑县和青城山旅游了一次。见识了一下刘文彩庄园的奢华,映象最深的就是刘文彩曾经睡过的床,太贵重了,不愧是民国期间的大地主啊,真是享尽了人间富贵。在大邑县,我还参观了建川博物馆。星期天去爬了青城山,可惜由于时间限制,没有爬到山顶,有点遗憾。青城山的风景确实很不错,下次我要再去,一定要登到山顶去,呵呵。

2010-04-21 14:25:00 518

原创 编程之美读书笔记之求数组的子数组的最大乘积

/************************** *程序员:刘晋勋 *日期:2010/04/21 *功能:求子数组的最大乘积 *目的:编程练习**************************/#include#include#includelong MaxProOfSubArray(int arr[],int size){ long res =

2010-04-21 10:54:00 455

原创 二叉树中序遍历的递归与非递归算法

首先,我定义一个二叉树节点的结构体typedef struct node{ char data; struct node *lchild,*rchild;}BinTNode,*BinTree; 二叉树中序遍历的递归与非递归算法 /************************** *程序员:刘晋勋 *日期:2010/04/20 *功能:二叉树中

2010-04-20 19:04:00 487

原创 如何输出源文件的标题和当前执行行的行数

/**************************** *功能:输出源文件的标题和当前执行 * 行的行数 *目的:知识学习****************************/#includeusing namespace std;void main(){ int line=__LINE__; char*file=__FILE__;

2010-04-20 15:22:00 2157

原创 结构体指针

#includetypedef struct _AA{ int a; int b; char c;}AA;int main(){ int n, m; AA a; AA *p; p = &a; n = (char *)(p+1)-(char *)p; m = (AA*)(p+1) -(AA*)p; printf("%d,%d",n,m)

2010-04-20 15:02:00 307

原创 Linux系统基础知识(二)

Linux进程怎样才能获取属于它自己的线性地址空间呢,比如 0x08048000到0x0804c000这段线性地址空间被分配给了一个进程,进程就可以访问这段地址空间,线性地址空间的开始和结束都必须以4KB对齐这里有以下几种情况:1.刚刚创建的新进程;2.使用exec系统调用装载一个新的程序运行;3.将一个文件(或部)映射到进程地址空间中去;4.当用户堆栈不够的时候,扩展堆栈对应

2010-04-16 09:32:00 273 1

原创 双向链表的插入

向双向链表的第i位置插入一个节点双向链表的定义如下typedef struct _node{ int data; struct node *prior; struct node *next;}node; 可以定义一个工作节点,然后在定义一个工作节点的前驱节点,具体代码如下: /*****************

2010-04-13 19:54:00 321

原创 关于初始化的一些总结

1.编译器提示非法初始化:char *p = malloc(10); 原因:可能p是静态变量或者非局部变量,函数的调用只能出现在自动变量(即局部非静态变量)中;2.向字符串常量赋值导致程序崩溃:char *p = "fuck uestc"; 当向p[i]赋值时会导致程序崩溃,因为这样定义的p会被编译器认为是字符串常量,存在于只读内存的,是不能写改变的;3.函数指针的初始化

2010-04-13 10:20:00 325

原创 变量和函数声明和定义的区别

用惯了IDE开发工具,最头疼的可能就是出现链接错误(link error),因为链接错误不像编译错误那样能够指定出程序的具体出错位置(编译错误主要是语法错误),编译主要就是将一个编译单元(.cpp(.c)文件与它相应的头文件)链接成一个.obj文件,链接错误主要就是重复定义变量等;声明和定义的区别: 函数或变量在声明时,并没有给它实际的物理内存空间,它有时候可以保证你的程序编译通过, 但是

2010-04-13 09:37:00 1111 1

原创 约瑟夫环

题目就不用介绍了,大家应该都很熟悉,约瑟夫环是循环链表的一个典型应用,我先定义一个循环链表的节点typedef struct Node{ int nNumber; struct Node *link;}Node,*Linklist; 约瑟夫环问题算法大致分为如下几步:1.建立循环单链表;2.移动节点到报数的人;3.循环地删除队列中的节点;代码就不写了,网上很多,

2010-04-11 13:21:00 357

原创 关于类大小的一些问题

1.编译器会为每一个含有虚函数的类分配一个虚函数表,并有一个虚指针指向这个虚函数表;2.sizeof()只能计算在栈上分配的空间,因此不会计算类静态成员的大小;3.空类的大小是1个字节;class A{public: int a; void Function();};class B{public: int a; virtual v

2010-04-11 10:22:00 251

原创 一道程序阅读题目

 #include using namespace std;class A{ public: A():i(1){} int i; }; class B: public A{ public: B():j(3){} int j; }; int hack(A* p, int c

2010-04-11 10:17:00 570 1

原创 Linux系统基础知识(一)

Linux系统都是以文件的形式来访问硬件设备的,各种设备是以系统设备文件的形式存在于系统设备目录/dev中的。这些文件用于访问系统中所有不同类型的硬件。例如,/dev/mouse文件对应鼠标设备文件,用于读取鼠标输入的;/dev/fd0文件对应软驱设备文件,用于处理软盘读写的;Linux文件系统中每个文件用 i节点 来标识,关于i节点,Linux系统通过i节点将文件的逻辑结构和物理结构进行转换

2010-04-10 18:40:00 277

原创 时钟周期,机器周期,指令周期

好久没摸硬件的知识了,很多知识点都忘了。作为一名嵌入式软件工程师,能正确地读懂芯片引脚的时序图很重要,因此,今天我又复习了一下时钟周期,机器周期和指令周期的概念,通过对时序图的理解,我正确地按照我需要的数据传输方式配置了DSP芯片的MCBSP外设的各寄存器。

2010-04-09 23:01:00 290

原创 合并两个已经排好序的数组为另一个数组

#include void DisplayArray(int *pArray, int nLen){ for (int i = 0; i < nLen; ++i) { printf("array[%d] = %d/n", i, pArray[i]); }}// pArray1和pArray2是已经排好序的数组,要求将它们按照顺

2010-04-09 20:16:00 1353

原创 不含重复字符的字符串的全排列

比如我们要对“abc"这个字符串进行全排列,可以先固定a,然后对bc进行全排;然后固定b,对ac进行全排,依此类推,可以采用递归的方法实现上述算法思想 /*******************************//* Author:jackliu110 *//* Date:2010/04/07 *//* Purpose:Just

2010-04-07 17:14:00 394

原创 读CSDN高手的博客是一种享受

最近在读CSDN上absurd大侠的博客,学到了很多经验,读高手的博客真是一种享受的过程,这避免了教科书中很多教条式的内容,呵呵,我要继续努力了!!Fighting!

2010-04-07 09:37:00 301

原创 反转一个字符串中的单词

/******************************************** */ /* 程序员: 刘晋勋 *//* 日期: 2010/04/05 *//* 目的: 编程练习 /* 程序功能:反转单词 */

2010-04-05 20:47:00 468

原创 左旋转字符串

题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。代码:/******************************************** */ /* 程序员: 刘晋勋

2010-04-05 19:39:00 804

原创 c++ primer读书笔记(一)

标准库vector类型vector 称为容器,一个容器中的所有对象都必须是同一种类型的。在使用vector之前,必须包含相应的头文件。即做以下声明:#includeusing namespace std; vector是一个类模板,可用于不同的数据类型,也就是说可以保存string类型的vector,也可以保存int 类型的vector.vecor对象的定义和初始化vect

2010-04-02 16:09:00 271

原创 一道算法导论编程题目的扩展

算法导论上有一道题目是求出两个已经排好序的n个有序数组中合并后的2n大小数组中的中位数,现在改为求出第i位数,思路和二分查找类似,就是分治策略,我从以下代码中主要温习一下sring类的用法以及这种递归的思想在分治理策略算法中的应用 /******************************************** */ /* 算法导论练习题扩展练习

2010-04-02 00:42:00 277

原创 C++的头文件

最近在看CSDN博客的过程中,经常看到某些博客上出现的一些头文件不是很熟悉,于是我总结了一下C++的头文件,供以后复习使用 C、传统 C++#include     //设定插入点#include      //字符处理#include      //定义错误码#include      //浮点数处理#include     //文件输入/输出#include  

2010-04-02 00:12:00 227

原创 一位工作10年的电子工程师的忠告

诸位,咱当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!    [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,

2010-04-01 13:13:00 474 1

原创 线程安全函数和可重入函数

线程安全函数:多个线程反复调用一个函数,它会一直产生一个正确结果;如何确保线程安全:处于同一进程的所有线程共享进程内存空间的全局区和堆,而私有的线程空间则包括栈和寄存器,对于同一进程的不同线程来说,每个线程的局部变量都是私有的,而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行访问时,如果要保证线程安全,则必须通过加锁的方式。线程不安全的后果:由于共享变量被不同线程访

2010-04-01 10:51:00 300

原创 总结一些库函数的字符串处理函数源代码

(1) strstr:char* _strstr(const char* str1,const char* str2){ assert(str1!=NULL&&str2!=NULL); int i=0,j=0,k=0; for (i=0;str1[i];i++,k=i,j=0) { while(str2[j]&&str1[

2010-03-31 19:46:00 446

原创 C语言动态生成二维矩阵

最近在做项目的过程中,需要写一个矩阵求逆的算法,需要动态生成二维数组,我总结了下C语言动态生成二维数组的代码,假设生成一个4X4的矩阵#define N 4int ** a = (int **)malloc(sizeof(int)*N);for(int i = 0;i < N;++i){ a[i]=(int*)malloc(sizeof(int)*N);}//释放动

2010-03-31 16:57:00 1174

原创 Linux内核代码(0.12内核)读书笔记(三)

Linux系统的虚拟内存,内核空间和用户空间,以下都是以80x86 CPU为例进行分析(一)以32位的80x86 CPU为例,CPU有32根地址总线,Linux虚拟内存的大小是4GB(2^32 Bytes),内核会将这4G字节的空间分为两部分:最高的1G字节(虚地址0xC0000000到0xFFFFFFFF)分配给内核使用,称为“内核空间”,较低的3G字节(虚地址0x00000000到0XBF

2010-03-31 13:46:00 436 1

原创 Linux内核(0.12内核)读书笔记(二)Linux内核内存管理

 Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。Linux内核内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。

2010-03-30 20:44:00 486

原创 Linux内核(0.12内核)读书笔记(一)

任务内核态堆栈和用户态堆栈之间的切换(1)所有中断服务程序都属于内核代码,如果一个中断产生时任务正在用户代码中执行,那么该中断就会引起CPU特权等级从3级到0级的变化,CPU就会进行用户态堆栈到内核态堆栈的切换操作。因为中断服务程序在内核中。(2)如果一个任务正在内核态中运行,那么若CPU响应中断就不再需要进行堆栈切换操作,因为此时该任务运行的内核代码已经在使用内核态堆栈,并且不涉及优先级

2010-03-30 18:46:00 387

原创 利用CSL API函数管理DSP CPU中断总结

项目过程中的关于DSP芯片中断的一些经验终结:首先,DSP芯片的CSL(片上支持库)API函数提供了对CPU中断的管理模块IRQ,我们在做TURBO编译码模块的项目中,在对硬件中断进行初始化的过程中,使用了IRQ模块我对其中的某几个函数简要分析一下,IRQ_setVecs();//功能:设定中断向量表的基地址IRQ_nmiEnable();//功能:使能不可屏蔽中断,不可屏蔽中断主要是一些比较

2010-03-30 16:01:00 2527 1

原创 整数划分问题,作为学习之用,采用递归算法

题目:输入m和n(20>=m>=n>0),请编程求出满足以下方程的正整数数列i1,i2,....,in,         使得:i1+i2+....+in=m,且i1>=i2>=....>=in./*****************************************//* 整数划分问题 */ /*

2010-03-30 10:58:00 902 1

原创 一些基础知识的总结

1.链表和数组的比较链表:链表可以支持动态内存大小,插入和删除的速度快,空间开销大,不支持随机访问;数组:数组的大小不能动态扩充,支持随机访问,数组在内存中逐个存放;2.C++中为什么用模板类。(1)可用来创建动态增长和减小的数据结构(2)它是类型无关的,因此具有很高的可复用性。(3)它在编译时而不是运行时检查数据类型,保证了类型安全(4)它是平

2010-03-29 21:08:00 390 1

空空如也

空空如也

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

TA关注的人

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