首页 > 编程 > C# > 正文

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

2020-01-24 01:04:49
字体:
来源:转载
供稿:网友

本文实例讲述了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#相关内容感兴趣的读者可查看本站专题:《C#数据结构与算法教程》、《C#遍历算法与技巧总结》、《C#程序设计之线程使用技巧总结》、《C#操作Excel技巧总结》、《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数组操作技巧总结》及《C#面向对象程序设计入门教程

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表