快速排序2(算法交换链表节点,平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1))这里的partition,我们选取第一个节点作为枢纽元,然后把小于枢纽的节点放到一个链中,把不小于枢纽的及节点放到另一个链中,最后把两条链以及枢纽连接成一条链。这里我们需要注意的是,1.在对一条子...
分类:
其他好文 时间:
2015-05-20 23:38:54
阅读次数:
199
快排不适合同于链表,但是可以实现,时间复杂度为o(nlgn)平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1))分析:由于单链表是没有prev指针的,所以跟数组一样的low,high指针就不适合单链表方法一:不移动元素节点本身,只移动元素的值 /...
分类:
编程语言 时间:
2015-05-20 21:57:59
阅读次数:
139
1.参数传递默认都是传递栈空间里面存储的内容2.如果添加了ref那么传递的都是栈空间地址,而不再是栈空间里面的内容3.如果添加了out,那么传递的也是栈空间的地址 1 //写一个方法计算一个int类型数组中每个元素的总和以及最大值和最小值 2 /// 3 /// ...
1 string str1="aa"; 2 3 string str2="aa"; 4 5 6 str1,str2,变量所指向的堆空间的地址是一样的。栈空间的内容是不一样的。 7 8 9 10 //new的作用11 * 1.开辟合适大小的堆空间或者常量区空间12 * 2...
函数返回局部变量,是返回局部变量的值。但指针(或地址)是一种特殊的值,所以返回局部指针变量需要特别注意。正确情况下,作为函数返回值的局部指针,其所指向对象的作用域应该是调用者作用域、全局或静态常量区;指向栈空间对象的指针作为返回值,存在潜在的错误。
1. 返回局部值变量
[cpp] view plaincopy
int num(void) { ...
分类:
其他好文 时间:
2015-05-13 16:50:03
阅读次数:
139
1.我们知道对象创建时,给对象开辟的内存在Heap上,如果对象足够多,或者对象足够大,导致Heap的内存不够分配时就会导致堆溢出。
2.我们知道值类型的变量存储在栈空间,如果值类型变量足够多也会导致栈溢出,同时我们还知道函数的递归调用也会进行压栈操作。
3.下面我们写个小程序来测试一下如果使用堆和栈溢出。
import java.util.ArrayList;
import java...
分类:
编程语言 时间:
2015-05-10 15:45:12
阅读次数:
113
http://blog.chinaunix.net/uid-52437-id-2108747.html在一个函数内,申明一个局部类变量。则这个变量什么时候析构呢? 并不是在函数退出,释放栈空间时候析构消亡,而是在打括号终结时。(搞了这么多年c++,这点都没搞清楚,只能说明基础不扎实阿)。举例如下#i...
分类:
编程语言 时间:
2015-05-08 14:41:18
阅读次数:
159
1. 基本类型值在内存中占据固定大小的空间,因此被保存在栈空间中;2. 引用类型的值是对象,保存在堆空间中;3. 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;4. 确定一个值是哪种基本类型...
分类:
编程语言 时间:
2015-05-05 14:10:49
阅读次数:
149
类的方法说白了还是一个函数,因此遵循函数的调用方式,方法过程中,不会为类成员分配堆栈空间,除非方法中有局部变量。但是,有时候方法需要访问类中的成员,怎么做到的呢,原来在调用方法的时候,隐藏传入了一个ecx寄存器,存放了该实例化类的指针。...
分类:
编程语言 时间:
2015-04-30 14:15:33
阅读次数:
124
Q1:
int i 这个有没有分配内存呢?
int *p 呢?
具体是在栈空间还是在堆空间里分配内存呢?
?
A1:
int i;
int *p;
这两个都在栈区分配了内存空间
但是p指向的地址为野地址,不可直接拿来使用
即p指向的空间没有分配
?
Q2:在Java中定义数组时必须分配内存,这句话是错的还是对的呢
?
A2:
Java...
分类:
其他好文 时间:
2015-04-29 21:41:02
阅读次数:
134