前言
栈和队列的存储方式
栈:先进后出
队列:先进先出
`提示:以下是本篇文章正文内容,下面案例可供参考
Stack
//声明
Stack stack = new Stack();
//增(压入栈)
//Stack的本质还是Object数组,依旧可以添加任意类型的数据
stack.Push(1);
stack.Push(true);
stack.Push("3");
stack.Push(new test());
stack.Push(new int[2]);
//删
//这里删的概念不太一样,在栈中的数据只有放入和取出
//取出(取出的是最后一个压入栈中的数据)
object a = stack.Pop();
Console.WriteLine(a);
//清空栈中的所有数据
stack.Clear();
//查
//在栈中不可以直接查看具体的某一个数据,只可以查看栈顶的数据
object b = stack.Peek();
Console.WriteLine(b);
//可以查看栈中是否存在某个数据
if (stack.Contains("3"))
{
Console.WriteLine("存在");
}
else {
Console.WriteLine("不存在");
}
//遍历所有数据(遍历顺序与入栈顺序相反,遵循先进后出的原则)
//转数组遍历
object[] arr = stack.ToArray();
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
//利用迭代器遍历
foreach(var item in stack) {
Console.WriteLine(item);
}
//改
//在栈中无法直接修改某个具体的元素,只能进行出栈和清空操作
stack.Pop();
stack.Clear();
Queue
//声明
//Queue的本质也是一个obejct类型的数组,可以存储任何类型的数据
//与Stack不同,存储数据遵循的是先进先出的原则
Queue queue = new Queue();
//增
queue.Enqueue(1);
queue.Enqueue(2f);
queue.Enqueue("3");
queue.Enqueue(new Queue());
queue.Enqueue(true);
//队列中的数据的删除概念也和传统的不太一样,单个数据的删除为出栈
queue.Dequeue();
//清空队列中的所有数据
//queue.Clear();
//查
//此处也和Stack一致,只能指定找到最后一次进入队列的数据
Console.WriteLine(queue.Peek());
//查找队列中是否存在有这个数据
if (queue.Contains(1))
{
Console.WriteLine("存在这个数据");
}
else {
Console.WriteLine("不存在这个数据");
}
//遍历(遍历出来的数据的顺序遵循先进先出的规则)
//转数组遍历
object[] arr1 = queue.ToArray();
for (int i = 0; i < arr1.Length; i++) {
Console.WriteLine(arr1[i]);
}
//利用迭代器遍历
foreach (var item in queue) {
Console.WriteLine(item);
}
//改
//Queue中无法像数组一样直接修改里面的数据,只能控制数据进出队列和清空队列
queue.Enqueue(1);
queue.Dequeue();
queue.Clear();
总结
Stack和Queue是两个很相似的数据结构类,两者的本质均是object类型的数组,可以用来装载任意类型的数据,但是使用object就会设计装箱和拆箱的概念
两者的区别在于存取数据时遵循的原则不同,此处其实是在存储数据类型时使用的方法不同,一种用头插法,一种使用尾插法,涉及指针的概念