自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 给定字符串A和B,输出A和B中的最大公共子串。

从网上down的例子,现在简要分析下。复杂度比较高,还是挺巧妙的。本人也没有想到更好的解决方法:1.用到了strstr函数,该函数再string.h头文件中有定义,竟然之前没有见过。哎。。该函数char *strstr(char *str1, char *str2)的意思就是从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回nu

2013-06-23 21:54:49 5453

原创 求n个数(1,2,...,n)中k个数的组

网上的程序,终于没有采用递归,对其的几点说明:这逻辑。。。1.程序是通过push 函数中当前top的位置来判断是否满足k个数,如果当前top的位置为k-1,则返回1,否则,返回0;2.程序中如何改变数值呢?在pop的时候指针保存了当前要pop出去的值,然后再top-1。这样下次直接--,然后重新入栈即可。3.在第k个数的所有情况已经输出后,如何对第k-1个数,开始进行修改,进而组合呢?

2013-06-22 18:20:01 1647

原创 求组合数: 求n个数(1....n)中k个数的组合

从网上down的例子,来自于:http://www.dayi.net/CExcellent/39108.asp,不得不说,递归真是没学好。弄了半天,终于给弄明白了,程序的意思。下面就分析下:m表示,当前已经挑的个数。初始为0.n表示当前挑的值可从n开始。k表示要挑选的个数,程序一开始就确定的。那么k-m表示,还有几个没有挑。因为程序是从1...n,开始的。k-m的值也可以表示,挑的值的

2013-06-22 17:10:38 6068 1

原创 输出一个字符串中表示数字字符中的最长子串

输出一个字符串中表示数字字符的最长子串(比较简单)注意:使用指针做参数,可在main中返回 int continumax(char *outputstr, char *inputstr){char *in = inputstr, *out = outputstr, *temp, *final;//temp在这里的作用是很大的。它始终直线当前比较的数字字符串。int coun

2013-06-22 12:15:56 978

原创 归并排序

递归实现,挺麻烦,时间复杂度为O(nlogn),归并排序的过程,像极了一颗倒置的完全二叉树,高度为logn,可以理解为,对每一个元素都要进行深度为logn的归并。空间复杂度为O(n+logn)void Merge(int in[],int out[],int i,int m,int n){ int j,k,t; for(k=i,j=m+1; i {  if(in[i]

2013-06-22 11:45:28 1021

原创 用递归算法判断数组a[N]是否为一个递增数组

1.递归一定要有退出条件,否则将无限循环。2.关于递归的返回值是要注意的。下面列举两种方法,原理相同,递归判断。方法1:bool charge(int p[],int n){  static int m=0; //这个一定要定义为static,否则每次调用都是从0开始。   if(m == n-1)    return true;   else   {

2013-06-21 15:27:57 9537 1

原创 输入一个整数,将此整数保存到文件中,以记事本打开,显示同样的内容

原理:1.首先说明,输出的内容是一个一个的字符。而不再是整数。以输入98341为例。2.如果将int i=98341,通过fwrite()函数写到文件中,必然会是乱码。因为,文件中存储的是整数98341的二进制码。而以文本打开,是以ASCII码格式解析的。这样,解析出来的值对应相应的字符,因此会是乱码。3.如果想要正确显示,需要在写入文件前,进行数字与字符ASCII码的转换,保证存储的

2013-06-20 22:39:22 2015

原创 c语言函数参数入栈问题浅析

C程序栈底为高地址,栈顶为低地址,因为栈地址空间是向低地址方向扩展。函数参数入栈顺序的确是从右至左的。可到底为什么呢?查了一直些文献得知,参数入栈顺序是和具体编译器实现相关的。比如,Pascal语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如Visual C++.即然两种方式都可以,为什么C语言要选择从右至左呢?进一步发现,Pascal语言不支持可变长参数,而C语言支持

2013-06-20 12:16:10 861

转载 指针运算——算术运算、关系运算

是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。    指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将一个字符指针加1,运算结果产生的指针指向内存中的下一个字符。float占据的内存空间不止1个字节,如果你将一个指向float的指针加1,将会发生什么?它会不会指向该float

2013-06-20 10:36:48 772

转载 浅析为什么char类型的范围是 —128~+127 .

在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1   n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即   -21474

2013-06-19 17:05:33 679

转载 大端及小端模式

详细信息,可参见http://blog.csdn.net/ce123/article/details/6971544二、什么是大端和小端        Big-Endian和Little-Endian的定义如下:1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内

2013-06-19 12:04:08 725

转载 (转+原创)c语言那些细节之a+1和&a+1的区别 ,指针的步长问题。

首先a是一个数组名,当看到这个a与&a时,一般我们的理解都是这个数组的首地址。没错,如果加上打印的话,确实两个值是一样的。不过&a是整个数组的首地址,a则是数组首元素的地址,虽然值一样,但是意义却不相同。在此之前有必要先看下c程序在内存中的分布图。其中,栈是向低地址位扩展的。下面来看一个例子吧还是。示例代码:#include int main

2013-06-19 10:11:57 963

转载 Sizeof与Strlen的区别与联系

Sizeof与Strlen的区别与联系一、sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof

2013-06-18 23:01:35 675

原创 A.c 和B.c两个c文件中使用了两个相同名字的static变量

A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?在头文件中定义static,然后这个头文件被不同的文件引用。我们知道,static的作用域是定义它的源文件中,这样的方式,会在每个引用它的文件中都生成一个本地的static 变量。static 变量是静态变量,和全局变量一样,都存放在静态存储区,但是,值得注意的是,编译器在编译的时候,对他们的命名是不同的

2013-06-18 15:40:10 10814

转载 static const extern

在C语言中,关键字static有三个明显的作用:1) 在函数体内,static声明局部变量,静态局部变量属于静态存储类别,在静态存储区分配存储单元。一个被声明为静态的局部变量在编译时赋初值的,以后每次调用过程时,不再重新赋初值,而只是保留上次函数调用结束时的值。2) 在模块(如一个.c文件)内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是

2013-06-17 15:22:07 777

空空如也

空空如也

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

TA关注的人

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