堆与栈都是内存分配机制
栈:后进先出的数据结构,用于存储局部变量和方法产生的上下文信息. 值类型,和方法的局部变量通常都在栈中保存
堆:内存大小动态变化,更适合存数据结构或者对象
堆栈对象,C#里面采用的是先进后出,(FILO):First in last Out
Stack<int> stack = new Stack<int>();
//使用push进行压栈操作
stack.Push(1);
stack.Push(2);
Console.WriteLine(stack.Count);//获取栈中数据的数量
Console.WriteLine(stack.Pop());//出栈
Console.WriteLine(stack.Count);
//栈分为泛型与非泛型
Stack s1 = new Stack();
s1.Push(1);
s1.Push("a");
s1.Push(true);
s1.Push(null);
s1.Push(new int[] { 1, 2, 3, 4, 5 });
//遍历栈中的内容
foreach (var i in s1)
{
Console.WriteLine(i);
}
队列:先进先出的数据结构,属于集合. First in First Out(FIFO)
Queue q1 = new Queue();
q1.Enqueue(1);
q1.Enqueue(2);
q1.Enqueue(3);
//取出队首的数据并从队列中移除
Console.WriteLine(q1.Dequeue());
//取出队首的数据
Console.WriteLine(q1.Peek());
Console.WriteLine(q1.Peek());
object[] array = new object[5];
//把队列中的数据复制到数组中
q1.CopyTo(array, 0);
foreach (var item in array)
{
Console.WriteLine(item);
}
//反省队列
Queue<int> q2 = new Queue<int>();
q2.Enqueue(1);
q2.Enqueue(2);
使用方式和非泛型对象一样,只不过对类型有要求
使用场景:使用栈可以进行算法优化,使用队列可以进行广度的优先搜索,例如对图像进行遍历