l Stack类是数据结构栈的实现,栈是一个具有“先进后出”特点的数据结构,在Stack类中没有容量Capacity的属性,只有用来表示栈中数据元素个数的Count属性,而且因为栈操作的特点,在Stack类中,只有3个比较有特点的方法。表10-4列出了类Stack具有特点的操作。
表10-4 类Stack具有特点的操作
方法名称 | 功能解释 |
Peek | 返回位于Stack顶部的对象但不将其移除 |
Push | 将对象插入Stack的顶部 |
Pop | 移除并返回位于Stack顶部的对象 |
Pop、Peek操作返回的对象类型都是Object类型,如果Stack对象中存储的是你自定义类型的对象,在对这些返回的对象操作前,需要你强制把它们从Object对象转换成自定义类型的对象。
例子StackSample演示了类Stack的操作。
using System;
using System.Collections;
using System.Linq;
using System.Text;
namespace StackSample
{
class Program
{
static void Main(string[] args)
{
//建立一个新的栈对象
Stack stack = new Stack();
//开始添加数据
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("第{0}个进入栈的点的坐标是({1},{2})", i, i, i + 2);
stack.Push(new Point { X = i, Y = i + 2 });
}
//打印栈中所有的对象
Console.WriteLine("打印栈中所有的对象");
foreach (Object obj in stack)
{
Point p = (Point)obj;
Console.WriteLine("({0},{1})", p.X, p.Y);
}
for (int i = 1; i <= 5; i++)
{
Point p = (Point)stack.Peek();
Console.WriteLine("栈顶的元素是({0},{1})",p.X,p.Y);
p = (Point)stack.Pop();
Console.WriteLine("第{0}个出栈的元素是({1},{2})", i, p.X, p.Y);
}
Console.ReadKey();
}
}
}
例中使用的类Point的代码与例子ArrayListSample中的代码完全相同。程序运行的结果如图10-12所示:
图10-12
l 类Queue是数据结构队列的实现,队列是一个具有“先进先出”的数据结构。类Queue具有特点的3个操作分别是Enqueue、Peek、Dequeue。表10-5列出了3中操作,并进行了功能说明
表10-5
方法名称 | 功能说明 |
Enqueue | 将对象添加到Queue对象的结尾处 |
Dequeue | 移除并返回位于Queue开始处的对象 |
Peek | 返回位于Queue开始处的对象但不将其移除 |
例子QueueSample演示了队列的一些操作,在该例中依然采用例子ArrayList中Point类的对象作为操作的对象。
using System;
using System.Collections;
using System.Linq;
using System.Text;
namespace QueueSample
{
class Program
{
static void Main(string[] args)
{
//建立一个新的队列对象
Queue queue = new Queue();
//开始添加数据
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("第{0}个进入队列的点的坐标是({1},{2})", i, i, i + 2);
queue.Enqueue(new Point { X = i, Y = i + 2 });
}
//打印队列中所有的对象
Console.WriteLine("打印队列中所有的对象");
foreach (Object obj in queue)
{
Point p = (Point)obj;
Console.WriteLine("({0},{1})", p.X, p.Y);
}
for (int i = 1; i <= 5; i++)
{
Point p = (Point)queue.Peek();
Console.WriteLine("队列的第一个元素是({0},{1})", p.X, p.Y);
p = (Point)queue.Dequeue();
Console.WriteLine("第{0}个出队列的元素是({1},{2})", i, p.X, p.Y);
}
Console.ReadKey();
}
}
}
程序的运行结果如图10-13所示:
图10-13
注意比较该例中打印所有元素的结果与例子StackSample中相应代码,打印出的结果不同,这些不同点是因为栈与队列的实现原理的不同造成的。