zoukankan      html  css  js  c++  java
  • C# 队列(Queue) 和堆栈(Stack)

    队列 (Queue)                                                                                                                                                                                                      

    队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则可使用队列。当能在列表中添加一项,称为入列,当您从列表中移除一项时,称为出列

     

    属性

    属性 描述
    Count 获取 Queue 中包含的元素个数。

     

    方法

    方法 描述
    public virtual void Clear(); 从 Queue 中移除所有的元素。
    public virtual bool Contains( object obj );    判断某个元素是否在 Queue 中。
    public virtual object Dequeue();    移除并返回在 Queue 的开头的对象。
    public virtual void Enqueue( object obj ); 向 Queue 的末尾添加一个对象。
    public virtual object[] ToArray(); 复制 Queue 到一个新的数组中。
    public virtual void TrimToSize();     设置容量为 Queue 中元素的实际个数。

     实例

      static void Main(string[] args)
      {

        Queue q = new Queue();

        q.Enqueue("A");
        q.Enqueue("B");
        q.Enqueue("C");
        q.Enqueue("D");

        Console.WriteLine("当前所有队列: ");
        foreach (string c in q)
        {
          Console.Write(c + " ");
        }
        Console.WriteLine();

        q.Enqueue("K");
        q.Enqueue("P");
        Console.WriteLine("当前所有队列: ");
        foreach (string c in q)
        {
          Console.Write(c + " ");
        }
        Console.WriteLine();
        Console.WriteLine("开始移除部分元素: ");
        string str = (string)q.Dequeue();
        Console.WriteLine("当前移除的元素为:{0}", str);
        str= (string)q.Dequeue();
        Console.WriteLine("当前移除的元素为:{0}", str);

        object[] obj = q.ToArray();

        q.Clear();

        Console.ReadKey();

      }

      上面的代码被编译执行后,输出结果如下:

        当前所有队列: A B C D

        当前所有队列: A B C D K P

        开始移除部分元素:

        当前移除的元素为:A

        当前移除的元素为:B

     

    栈 (Stack)            

      堆栈(Stack)  代表了一个后进先出的对象集合。当您需要对各项进行后进先出访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。

     

    属性

    属性 描述
    Count 获取 Stack 中包含的元素个数。

     

    方法

        

    方法 描述
    public virtual void Clear();  从 Stack 中移除所有的元素。
    public virtual bool Contains( object obj );  判断某个元素是否在 Stack 中。
    public virtual object Peek(); 返回在 Stack 的顶部的对象,但不移除它。
    public virtual object Pop(); 移除并返回在 Stack 的顶部的对象。
    public virtual void Push( object obj ); 向 Stack 的顶部添加一个对象。
    public virtual object[] ToArray(); 复制 Stack 到一个新的数组中。

     

     

    实例

      static void Main(string[] args)
      {

        Stack st = new Stack();
        st.Push('A');
        st.Push('B');
        st.Push('C');
        st.Push('D');

        Console.WriteLine("当前所有堆栈: ");
        foreach (char c in st)
        {
          Console.Write(c + " ");
        }
        Console.WriteLine();
        st.Push('V');
        st.Push('H');
        Console.WriteLine("堆栈中下一个可能执行的值: {0}",st.Peek());
        Console.WriteLine("当前所有堆栈: ");
        foreach (char c in st)
        {
          Console.Write(c + " ");
        }
        Console.WriteLine();
        Console.WriteLine("移除堆栈中顶部的值:{0}", st.Pop());
        //判断是否包含 ‘V’
        bool isContain = st.Contains('V');
        Console.WriteLine("当前所有堆栈: ");
        foreach (char c in st)
        {
          Console.Write(c + " ");
        }
        st.Clear();
        Console.ReadKey();

      }

      上面的代码被编译执行后,输出结果如下:

        当前所有堆栈: D C B A

        堆栈中下一个可能执行的值: H

        当前所有堆栈: H V D C B A

        移除堆栈中顶部的值:H

        当前所有堆栈: V D C B A

    队列(Queue)和栈 (Stack)区别

    相同点

    • 都是线性结构
    • 插入操作都是限定在表尾进行
    • 都可以通过顺序结构和链式结构实现
    • 多链栈和多链队列的管理模式可以相同

    不同点

    • 删除数据元素的位置不同,栈(Stack)的删除操作在表尾进行(先进后出),队列(Queue)的删除操作在表头进行(先进先出)
    • 栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表,队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
    • 顺序栈能够实现多栈空间共享,而顺序队列不能
  • 相关阅读:
    HackingLab-再加密一次你就得到key啦~
    操作系统理论细节 2
    操作系统理论细节 1
    各种调度算法均衡利弊
    Github实现代码高亮
    Oracle 生成一张测试表并插入随机的个人基本信息数据
    一,Spring Boot 入门
    关于IDEA2020年1月新版MAVEN无法自动导入依赖
    操作系统存储管理--虚拟内存地址和物理内存地址
    apache2.4 tomcat 出现502 Proxy Error错误
  • 原文地址:https://www.cnblogs.com/Struggle-xh/p/10370175.html
Copyright © 2011-2022 走看看