C# 队列(Queue)和 堆栈(Stack)

C# 队列(Queue)

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

Queue 类的方法和属性

下表列出了 Queue 类的一些常用的 属性

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

下表列出了 Queue 类的一些常用的 方法

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

实例

下面的实例演示了队列(Queue)的使用:

 1 using System;
2 using System.Collections;
3
4 namespace CollectionsApplication
5 {
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 Queue q = new Queue();
11
12 q.Enqueue('A');
13 q.Enqueue('M');
14 q.Enqueue('G');
15 q.Enqueue('W');
16
17 Console.WriteLine("Current queue: ");
18 foreach (char c in q)
19 Console.Write(c + " ");
20 Console.WriteLine();
21 q.Enqueue('V');
22 q.Enqueue('H');
23 Console.WriteLine("Current queue: ");
24 foreach (char c in q)
25 Console.Write(c + " ");
26 Console.WriteLine();
27 Console.WriteLine("Removing some values ");
28 char ch = (char)q.Dequeue();
29 Console.WriteLine("The removed value: {0}", ch);
30 ch = (char)q.Dequeue();
31 Console.WriteLine("The removed value: {0}", ch);
32 Console.ReadKey();
33 }
34 }
35 }

当上面的代码被编译和执行时,它会产生下列结果:

Current queue:
A M G W
Current queue:
A M G W V H
Removing values
The removed value: A
The removed value: M

C# 堆栈(Stack)

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

Stack 类的方法和属性

下表列出了 Stack 类的一些常用的 属性

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

下表列出了 Stack 类的一些常用的 方法

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

实例

下面的实例演示了堆栈(Stack)的使用:

 1 using System;
2 using System.Collections;
3
4 namespace CollectionsApplication
5 {
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 Stack st = new Stack();
11
12 st.Push('A');
13 st.Push('M');
14 st.Push('G');
15 st.Push('W');
16
17 Console.WriteLine("Current stack: ");
18 foreach (char c in st)
19 {
20 Console.Write(c + " ");
21 }
22 Console.WriteLine();
23
24 st.Push('V');
25 st.Push('H');
26 Console.WriteLine("The next poppable value in stack: {0}",
27 st.Peek());
28 Console.WriteLine("Current stack: ");
29 foreach (char c in st)
30 {
31 Console.Write(c + " ");
32 }
33 Console.WriteLine();
34
35 Console.WriteLine("Removing values ");
36 st.Pop();
37 st.Pop();
38 st.Pop();
39
40 Console.WriteLine("Current stack: ");
41 foreach (char c in st)
42 {
43 Console.Write(c + " ");
44 }
45 }
46 }
47 }

当上面的代码被编译和执行时,它会产生下列结果:

Current stack:
W G M A
The next poppable value in stack: H
Current stack:
H V W G M A
Removing values
Current stack:
G M A

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

  1. C# 队列(Queue) 和堆栈(Stack)

    队列 (Queue)                                                                                          ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. java09 队列Queue与Deque

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

  10. 队列Queue和栈

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

随机推荐

  1. 2018/05/07 Linux find命令中{}的作用

    首先抛出一个问题,如果你在文件中建立了一个 -a.txt 的文件,你会怎么删除它? 我之前的回答是 rm -a.txt 实验结果很明显,不能删除. 因为在 Linux 下,会把 -a.txt 前面的 ...

  2. Win10系统桌面右键新建没有内容怎么恢复

    Win10系统桌面右键新建没有内容怎么恢复 添加txt文本文档 运行->regedit,打开注册表编辑器 展开HKEY_CLASSES_ROOT 找到.txt 选中.txt,修改右侧窗格的“默认 ...

  3. SpringBoot-@async异步执行方法

    启动加上@EnableAsync ,需要执行异步方法上加入  @Async 在方法上加上@Async之后 底层使用多线程技术 演示代码: @RestController @Slf4j public c ...

  4. 【SQL】group by 和order by 的区别。

    group by 分组,比如group by name.那么重复name就显示一遍,即同样内容归类显示一遍. group by ……having……——(where 后不可以接聚合函数,而having ...

  5. jvm - 类的初始化过程

    我们知道,我们写的java代码称为源码,想要能够被jvm执行首先需要编译成.class文件,那么编译完到使用又都经理的哪些阶段呢?主要分为以下三个阶段: 加载:查找并加载类的二进制数据(.class文 ...

  6. strlen函数细节

    strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值. 原型: ...

  7. JDK 1.8源码阅读 ArrayList

    一,前言 ArrayList是Java开发中使用比较频繁的一个类,通过对源码的解读,可以了解ArrayList的内部结构以及实现方法,清楚它的优缺点,以便我们在编程时灵活运用. 二,ArrayList ...

  8. js动态规划---最少硬币找零问题

    给定钱币的面值 1.5.10.25 需要找给客户 36 最少找零数为: 1.10.25 function MinCoinChange(coins){ var coins = coins; var ca ...

  9. conda常用命令

    1. conda基本命令 检查Anaconda是否成功安装 conda --version 检测目前安装了哪些环境 conda info --envs 检查目前有哪些版本的python可以安装: co ...

  10. js--script和link中的 integrity 属性

    <link crossorigin="anonymous" integrity="sha256-+hDz/gVbhp24mhOmoIT4Du4F3K5fs9fjjo ...