集合和泛型4-----集合3 Stack类,类Queue

 

l         Stack类是数据结构栈的实现,栈是一个具有先进后出特点的数据结构,在Stack类中没有容量Capacity的属性,只有用来表示栈中数据元素个数的Count属性,而且因为栈操作的特点,在Stack类中,只有3个比较有特点的方法。表10-4列出了类Stack具有特点的操作。

10-4 Stack具有特点的操作

方法名称

功能解释

Peek

返回位于Stack顶部的对象但不将其移除

Push

将对象插入Stack的顶部

Pop

移除并返回位于Stack顶部的对象

PopPeek操作返回的对象类型都是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所示:

1

 

10-12

l         Queue是数据结构队列的实现,队列是一个具有先进先出的数据结构。类Queue具有特点的3个操作分别是EnqueuePeekDequeue。表10-5列出了3中操作,并进行了功能说明

10-5

方法名称

功能说明

Enqueue

将对象添加到Queue对象的结尾处

Dequeue

移除并返回位于Queue开始处的对象

Peek

返回位于Queue开始处的对象但不将其移除

例子QueueSample演示了队列的一些操作,在该例中依然采用例子ArrayListPoint类的对象作为操作的对象。

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所示:

2

 

10-13

注意比较该例中打印所有元素的结果与例子StackSample中相应代码,打印出的结果不同,这些不同点是因为栈与队列的实现原理的不同造成的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值