using System.Collections; namespace Lesson2_Stack { class Test() { } class Program { static void Main(string[] args) { #region 知识点一 Stack本质 //stack是C#是为我们封装好的类 //本质是一个Object数组,只是封装了特殊的存储规则 //stack是栈存储容器,栈是一种先进后出的数据结构 //先存入的数据后取出,后存入的数据先取出 //栈的存储规则:后进先出 #endregion #region 知识点二 声明 //需要引用命名空间system.collections Stack stack = new Stack(); #endregion #region 知识点三 增取查改 #region 增 //压栈 stack.Push(1); stack.Push("123"); stack.Push(true); stack.Push(3.14f); stack.Push(new Test()); #endregion #region 取 //栈中不存在删除的概念 //只能取出栈顶的数据 //弹栈 object v = stack.Pop();//弹出栈顶元素,下次弹出的是下一个元素 Console.WriteLine(v); v = stack.Pop(); Console.WriteLine(v); #endregion #region 查 //栈无法查看指定位置的元素,栈没有提供索引器 //只能查看栈顶的元素 v = stack.Peek();//只看不弹出 Console.WriteLine(v); v = stack.Peek(); Console.WriteLine(v); //查看元素是否存在于栈中 if (stack.Contains(3.14f)) { Console.WriteLine("存在3.14"); } if (stack.Contains("123")) { Console.WriteLine("存在123"); } #endregion #region 改 //栈无法修改指定位置的元素 //只能修改栈顶的元素或清空 stack.Clear();//清空栈 stack.Push("1"); stack.Push(2); stack.Push("gfjd"); #endregion #endregion #region 知识点四 遍历 //1.长度 Console.WriteLine(stack.Count); //2.遍历 foreach(Object o in stack) { Console.WriteLine(o); } //3.还有一种遍历方式 //先将栈转换为数组 //注意转换后的数组是倒序的 object[] arr = stack.ToArray(); for(int i = 0;i < arr.Length; i++) { Console.WriteLine(arr[i]); } //4.循环弹栈 while(stack.Count > 0) { Console.WriteLine(stack.Pop()); } #endregion #region 知识点五 //由于用object来存储数据,所以存储值类型时会装箱,取出时需要拆箱 //Push值类型时装箱 //弹出时拆箱 #endregion } } }