博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 队列(Queue) 和堆栈(Stack)
阅读量:4969 次
发布时间:2019-06-12

本文共 2930 字,大约阅读时间需要 9 分钟。

队列 (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)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
  • 顺序栈能够实现多栈空间共享,而顺序队列不能

 

转载于:https://www.cnblogs.com/Struggle-xh/p/10370175.html

你可能感兴趣的文章
jvm(13)-线程安全与锁优化
查看>>
网络流24题——太空飞行计划问题(最大权闭合图)
查看>>
HTTP状态码
查看>>
RunLoop(运行循环)-002-加载大图
查看>>
eclipse中修改tomcat的配置,解决全局性的get提交乱码问题
查看>>
UI: 使用 UIViewController 展现和管理视图
查看>>
编译器会强制没有数据成员的对象长度非零
查看>>
二叉树深度
查看>>
六种方式读取properties资源文件
查看>>
gradient css
查看>>
构建之法阅读笔记03
查看>>
合并两个排序的链表
查看>>
SQL语言之概述(一)
查看>>
数据库表 copy
查看>>
LinkedList源码解析
查看>>
SignalR循序渐进(一)简单的聊天程序
查看>>
MyServer
查看>>
Learning Cocos2d-x for XNA(2)——深入剖析Hello World
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>
Http协议
查看>>