队列 (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. Google Guava--基础工具用法

    Optional 优雅的解决Null(java 8 提供了Optional类) Guava用Optional表示可能为null的T类型引用.一个Optional实例可能包含非null的引用(我们称之为 ...

  2. manjaro开启sdd trim

      $ sudo systemctl enable fstrim.timer; $ sudo systemctl start fstrim.service; $ sudo systemctl stat ...

  3. ggplot2基础学习

    前言 ggplot2是R语言最流行的第三方扩展包,是RStudio首席科学家Hadley Wickham读博期间的作品,是R相比其他语言一个独领风骚的特点.包名中“gg”是grammar of gra ...

  4. Prim算法和Kruskal算法求最小生成树

    Prim算法 连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的.最小生成树是连通图的一个连通分量,且所有边的权值和最小. 最小生成树中,一个顶点最多与两个顶点邻接:若连通图有n个顶点,则最小 ...

  5. Node.js进程管理之Process模块

    在前面Node.js事件运行机制也有提到,Node.js应用在单个线程运行,但是现在大部分服务器都是多处理器,为了方便使用多个进程,Node.js提供了3个模块.Process模块提供了访问正在运行的 ...

  6. ASP.NET MVC 学习笔记-3.面向对象设计原则

    在设计程序.系统框架或者类时,最主要考虑的事情就是代码的可扩展性,而不是完成功能即可.因此,提倡使用面向对象设计的最佳实践和基本原则. 1.       单一职责原则(SRP:The Single R ...

  7. 关于在web端运行项目,eclipse报PermGen space错误

    之前在网上也查到过许多解决的方法,但可能因为本人脸黑........也修改过eclipse文件目录中的相关配置文件,并没有得到相应的帮助,因此把自己的改正方法分享下: window-->pref ...

  8. centos7下安装sublime text3并配置环境变量

    注意:我解压完把sublime_text全改成了sublime,如果未改就是sublime_text 1.官网下载sublime,保存到指定目录,例如/home 2.解压 tar xjf sublim ...

  9. Mac Supervisor 管理进程

    无论是在日常工作中还是平时玩代码中,我总是离不开 Supervisor,其实很久之前我就写过一篇文章:supervisord 部署 Flask,在里面,我仔细讲解了如何在 Linux 环境下安装并且配 ...

  10. sum() 求和用法

    def func(*args): # sum = 0 # for el in args: # sum += el # return sum return sum(args) # sum() 求和 de ...