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

C# 队列(Queue) 和堆栈(Stack)的更多相关文章

  1. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  2. c++中队列queue和栈stack的基本操作

    1.queue 模板类的定义在<queue>头文件中. 定义queue 对象的示例代码如下:queue<int> q1;queue<double> q2; queu ...

  3. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  4. STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较

    栈stack  .队列queue  和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...

  5. C++栈(stack)、队列(queue)、链表(list)的常用函数

    C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...

  6. [转载]队列queue和双端Dequeue

    转载自:http://uule.iteye.com/blog/2095650?utm_source=tuicool 注意:这都只是接口而已 1.Queue API 在java5中新增加了java.ut ...

  7. 链表LinkedList、堆栈Stack、集合Set

    链表LinkedList LinkedList 也像 ArrayList 一样实现了基本的 List 接口,但它在 List 中间执行插入和删除操作时比 ArrayList 更高效.然而,它在随机访问 ...

  8. java09 队列Queue与Deque

    队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...

  9. 队列Queue和栈

    1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...

随机推荐

  1. golang channel的使用

    channel常常结合go程使用,作为通信消息队列 var testChan chan int fmt.Println(testChan) // nil 未初始化,没地址 testChan ) fmt ...

  2. Ripple(瑞波币)validator-keys-tool 配置验证器

    目录 Ripple(瑞波币)validator-keys-tool配置验证器 验证器密钥工具指南 验证器密钥 验证器令牌(Validator Keys) public_key撤销 签名 Ripple( ...

  3. JavaScript文档对象模型

    文档对象模型(Document Object Model, DOM)是W3C提出的用于访问和修改文档的接口. JavaScript设计的初衷是为Web提供交互功能,它通过DOM接口来访问和修改文档. ...

  4. 我理解的js中预解释

    浏览器在执行代码前,先找带var和带function的地方,把带var的声明且赋予初始值undefined,把带function的声明且定义. 带var关键字预解释 让我们先看下这段代码执行的结果: ...

  5. tomcat shutdown.sh结束不了,Could not contact localhost:8005

    使用./shutdown.sh关闭Tomcat,有时会关闭成功,有时会出现关闭错误; Jul 06, 2017 10:57:37 AM org.apache.catalina.startup.Cata ...

  6. SQLite菜鸟教程

    学习链接:http://www.runoob.com/sqlite/sqlite-trigger.html

  7. spring下redis使用资料

    参考资料地址: spring集成redis Spring缓存注解@Cacheable.@CacheEvict.@CachePut使用 redis常用命令 redis持久化(RDB与AOF) Redis ...

  8. 上传多张图片imgupload

    <tr> <td class="listtitle-up">尿素箱</td> <td> <div class="co ...

  9. 利用jquery.backstretch插件,背景切换

    //首页自动更换背景特效开始============================================1.引用文件<script src="jquery.js" ...

  10. ArchLinux - 安装指南

    Step 1 将镜像写入u盘 u盘从来不是唯一的选择,但多数人可能喜欢这么做. 我是在OS X上进行操作,如果你用的是windows,也许可以使用Image Writer for Windows或者U ...