栈当中存放的是值类型,如int,decimal,double,enum等
堆当中存放的是引用类型,如string,类等
如图,如果定义一个int类型的变量i:
int i = 5;那么在内存中的实际情况是:直接在栈中存放i的值5.
如果顶一个string类型的变量s:
那么在内存中的实际情况是:在堆中存放s的变量名(即地址),在栈中存放s的值"A string.",然后让堆中的变量名s(即地址)指向栈中的值,这也是为什么,保存在堆中的变量被称为引用类型,因为当你访问一个引用类型的变量时,首先是访问它的地址,然后通过引用才能访问到该变量的值。
首先请参考数据结构 知道栈和堆是什么 以及干啥用的...
.net框架已经内置堆栈数据结构 通常情况下我们使用System.Collections.Generic命名空间下的泛型结构
下面是一段演示代码
Queue<int> q = new Queue<int>();如果要求你自己定义的话 数据结构可知 栈和堆都是线性结构 实际上可以理解为限制了读取写入方式线性表
所以如果无视效率的话 你可以在List的基础上进行改造 以实现堆栈的定义
无非就是先进先出 后进先出而已
class MyQueue<T>然后测试 结果应该和上面用内置的堆栈实现效果一致
MyQueue<int> q = new MyQueue<int>();当然这只是最简单版本的实现
想合理提高效率的话 需要构造循环队列 使dequeue操作复杂度降低到O(1) (上面实现为O(n))
想适应并发和线程安全的话 需要改造成链表来实现