好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#使用Object类实现栈的方法详解

本文实例讲述了C#使用Object类实现栈的方法。分享给大家供大家参考,具体如下:

Stack类的代码:

?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 使用Object类实现后进先出队列

{

  class Stack

  {

   private Object[] _items;

   public Object[] Items

   {

    get { return this ._items; }

    set { this ._items = value; }

   }

   //将对象压入

   public void Push(Object obj)

   {

    //第一次压入时,进行初始化,长度为1

    if ( this ._items == null )

    {

     this ._items = new Object[1];

     this ._items[0] = obj;

    }

    else

    {

     int count = this ._items.Length;

     Object[] objTemp = this ._items;

     this ._items = new Object[count + 1];

     int i = 0;

     foreach (Object o in objTemp)

     {

      this ._items[i++] = o;

     }

     this ._items[i] = obj;

    }

   }

   //按后入先出取出

   public Object Pop()

   {

    //为初始化或长度为0时,无法取出任何元素

    if ( this ._items == null || this ._items.Length == 0)

     return null ;

    else

    {

     Object obj = this ._items[ this ._items.Length - 1];

     //删除最后一个元素

     this .DeleteLastObj();

     return obj;

    }

   }

   private void DeleteLastObj()

   {

    Object[] objTemp = new Object[ this ._items.Length - 1];

    for ( int i = 0; i < this ._items.Length - 1; i++)

    {

     objTemp[i] = this ._items[i];

    }

    this ._items = objTemp;

   }

  }

}

窗体检测代码:

?

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace 使用Object类实现后进先出队列

{

  public partial class Form1 : Form

  {

   public Form1()

   {

    InitializeComponent();

   }

   private Stack stack = new Stack();

   private Stack< string > stackGeneric= new Stack< string >();

   private void button1_Click( object sender, EventArgs e)

   {

    stack.Push( this .textBox1.Text);

   }

   private void button2_Click( object sender, EventArgs e)

   {

    Object[] objs = stack.Items;

    foreach (Object o in objs)

    {

     Console.WriteLine(o.ToString());

    }

   }

   private void button1_Click_1( object sender, EventArgs e)

   {

    try

    {

     Console.WriteLine( this .stack.Pop().ToString());

    }

    catch

    {

     Console.WriteLine( "null" );

    }

   }

   private void button3_Click( object sender, EventArgs e)

   {

    this .stackGeneric.Push( this .textBox2.Text);

   }

   private void button4_Click( object sender, EventArgs e)

   {

    try

    {

     Console.WriteLine( this .stackGeneric.Pop());

    }

    catch (InvalidOperationException)

    {

     Console.WriteLine( "null" );

    }

   }

  }

}

1.使用Stack类的时候形成很多不可控的资源占用,等待GC回收;

2.类型不安全,任何类型的数据都可以装入object

3.可以设置Object数组的一个初始长度,而不必每次压入或者取出的时候都去临时改变数组的长度,具体做法是,通过Stack的构造函数生成一个指定长度的数组,在压入和取出的时候,并不对这个初始化的长度进行调整,而只是用一个int数值intPoint记录目前所拥有的值的位置,对已经取出的object,实际并没有把它删除,只是不去管它而已。这样做的好处是,一次设定数组长度,使用一个类似指针的东西定位[有效]元素,这种方法更可取。

实际上,.net2.0以上提供了Stack<>泛型类可以直接完成栈,使用非常方便,而且避免了强制类型转换带来的损耗,实现了类型安全。第二段代码中已经给出使用方式,非常简单。

希望本文所述对大家C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#使用Object类实现栈的方法详解的详细内容...

  阅读:36次