Files

110 lines
3.1 KiB
C#
Raw Permalink Normal View History

2025-10-11 11:05:51 +08:00
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
}
}
}