您的位置:首页 > 产品设计 > UI/UE

栈(Stack)和队列(Queue)

2009-10-12 14:24 155 查看
栈和队列是两种重要的线性结构。从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表,因
此,可称为限定性的数据结构。但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型。由于它们广泛应用在各种软件系统中,因此在面向对象
的程序设计中,它们是多型数据类型。本章除了讨论栈和队列的定义、表示方法和实现外,还将给出一些应用的例子。

抽象数据类型栈的定义

  
栈(Stack) 是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。

(1)queue和stack类都是容器适配器(container
adaptor),容器适配器将一些基础容器转化为自身类的容器。容器适配器构造时需要一个容器模板,例如vector,deque,list等,
queue和stack默认的容器模板是deque。这些容器模板也是有一定要求的,需要支持一些基础的方法,比如说vector类就不能做queue的
容器模板(或者叫基础容器),因为vector没有pop_front方法。

(2)队列,queue,满足:1)插入只能从尾部进行;2)删除,检索,修改只允许从头部进行,于是就有先入先出(FIFO)的规律。queue的方法很少,也没有迭代器,而且其唯一可以被访问,修改的量就是queue开头的项。

(3)堆栈,stack,与queue正好相反,后入先出(LIFO)。stack同样没有迭代器,只有堆栈顶部的项才可以被访问。-->可以利用堆栈来实现递归,事实上,编译器实现递归就是通过创建和维护活动对战的代码来实现的


/// <summary>
/// StackTest
/// </summary>
public void StackTest()
{
Stack stack = new Stack();
//System.Collections.Stack の先頭にオブジェクトを挿入します。
stack.Push(11);
stack.Push(22);
//obj1 = 22;
object obj1 = stack.Peek();
}
/// <summary>
/// QueueTest
/// </summary>
public void QueueTest()
{
Queue queue = new Queue();
//System.Collections.Queue の末尾にオブジェクトを追加します。
queue.Enqueue(11);
queue.Enqueue(22);
//obj1 = 11;
object obj1 = queue.Peek();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: