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)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
- 顺序栈能够实现多栈空间共享,而顺序队列不能
C# 队列(Queue) 和堆栈(Stack)的更多相关文章
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- c++中队列queue和栈stack的基本操作
1.queue 模板类的定义在<queue>头文件中. 定义queue 对象的示例代码如下:queue<int> q1;queue<double> q2; queu ...
- python基本数据结构栈stack和队列queue
1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
栈stack .队列queue 和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...
- C++栈(stack)、队列(queue)、链表(list)的常用函数
C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...
- [转载]队列queue和双端Dequeue
转载自:http://uule.iteye.com/blog/2095650?utm_source=tuicool 注意:这都只是接口而已 1.Queue API 在java5中新增加了java.ut ...
- 链表LinkedList、堆栈Stack、集合Set
链表LinkedList LinkedList 也像 ArrayList 一样实现了基本的 List 接口,但它在 List 中间执行插入和删除操作时比 ArrayList 更高效.然而,它在随机访问 ...
- java09 队列Queue与Deque
队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...
- 队列Queue和栈
1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...
随机推荐
- Python -- 网络编程 -- Socket发送文件
客户端如果直接send两次,一次发文件名,一次发文件内容 服务端接受的时候会一起接收,不知怎么分开发送,或者分开接收, 或者全部接收再解析内容 今天发现传送mp3文件的时候没问题,传送文本文件的话,以 ...
- Python——可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
Python 的内建标准类型有一种分类标准是分为可变类型与不可变类型: 可变类型:列表.字典 不可变类型:数字.字符串.元组 因为变量保存的实际都是对象的引用,所以在给一个不可变类型(比如 int)的 ...
- crontab的用法
转载于:点击打开链接 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业. 由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: / ...
- 生成类似于MongoDB产生的ObjectId
package com.jt.boot.utils; import com.google.common.base.Objects; import java.net.NetworkInterface; ...
- PTA (Advanced Level) 1024 Palindromic Number
Palindromic Number A number that will be the same when it is written forwards or backwards is known ...
- [作业] Python入门基础--三级菜单
用字典存储数据 可以随时返回上一级,随时退出程序 只能用循环判断等内置方法,不得导入模块 menu = { '广东':{ '广州':{ '越秀区':{ '面积':'33.80', '人口':'115万 ...
- 使用Java设计验证码生成程序
我们来设计一个简单的验证码生成程序:验证码一个由4位的数字.字母随机组合而成图像,为了避免被光学字元识别(OCR,Optical Character Recognition)之类的程序识别出图片中的数 ...
- Node.js进程管理之子进程
一.理论 之前看多进程这一章节时发现这块东西挺多,写Process模块的时候也有提到,今天下午午休醒来静下心来好好的看了一遍,发现也不是太难理解. Node.js是单线程的,对于现在普遍是多处理器的机 ...
- awk把第1列相同的第2列按“;”拼起来,最后输出第1列和拼起来的结果
[root@localhost cc]# cat 2.txt adc 3 5 a d aa 3 adfa d ba 3 adf 第1列相同的第2列按";"拼起来,最后输出第1列和拼 ...
- 安装完xampp启用时,计算机中丢失api-ms-win-crt-conio-l1-1-0.dll怎么办?
安装完xampp启用时,计算机中丢失api-ms-win-crt-conio-l1-1-0.dll怎么办 api-ms-win-crt-conio-l1-1-0.dll 第一步:我们需要下载缺失的这个 ...