C# Stack

发布于:2024-08-22 ⋅ 阅读:(125) ⋅ 点赞:(0)

Stack本质

Stack(栈)是一个C#为我们封装好的类
            它的本质也是object[]数组,只是封装了特殊的存储规则

            Stack是栈存储容器,栈是一种先进后出的数据结构
            

栈无法改变其中的元素 只能压(存)和弹(取)
            实在要改 只有清空

申明

需要引用命名空间 System.Collections


            Stack stack = new Stack();

压栈

stack.Push(1);
stack.Push("123");
stack.Push(true);
stack.Push(1.2f);
stack.Push(new Test());

出栈

object v = stack.Pop();
Console.WriteLine(v);

查看栈顶元素 查看元素是否存在

栈无法查看指定位置的 元素
  只能查看栈顶的内容
            v = stack.Peek();
            Console.WriteLine(v);
            v = stack.Peek();
            Console.WriteLine(v);

            查看元素是否存在于栈中


            if( stack.Contains("123") )
            {
                Console.WriteLine("存在123");
            }
 

遍历

1.长度
Console.WriteLine(stack.Count);

2.用foreach遍历
遍历出来的顺序 是从栈顶到栈底
 foreach(object item in stack)
 {
     Console.WriteLine(item);
 }

 3.还有一种遍历方式
  将栈转换为object数组
 遍历出来的顺序 也是从栈顶到栈底
 object[] array = stack.ToArray();
 for (int i = 0; i < array.Length; i++)
 {
     Console.WriteLine(array[i]);
 }

 Console.WriteLine(stack.Count);


 4.循环弹栈


 while( stack.Count > 0 )
 {
     object o = stack.Pop();
     Console.WriteLine(o);
 }
 Console.WriteLine(stack.Count);
 


class Program
{
    Stack stack = new Stack();
    public   static void Main()
    {
        Console.WriteLine("请输入10进制的正整数");
        int a;
       a=int.Parse( Console.ReadLine());
        Program program = new Program();
            program. To2Form(a);

         Console.Write("转换结果");
        while (program.stack.Count > 0)
        {
            Console.Write(program.stack.Pop());
        }

        
    }
    protected  void To2Form(int  a)
    {
        
        int y;
        while (a>=1) 
        {
            y=a % 2;
            a= a / 2;
            
            stack.Push(y);
        }

    }
}