C#使用Object类实现栈的方法详解
作者:丛晓男 发布时间:2021-08-03 17:36:16
标签:C#,栈
本文实例讲述了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#程序设计有所帮助。
0
投稿
猜你喜欢
- 前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作,需要计算一个校验位。一
- goto在Java中是一个保留字,但在语言中并没有用到它;Java没有goto。但是,Java也能完成一些类似于跳转的操作,主要是依靠:标签
- 微信公众平台(map.weixin.qq.com)/开放平台(open.weixin.qq.com)/商户平台(pay.weixin.qq.
- 在Spring Boot Actuator中提供很多像health、metrics等实时监控接口,可以方便我们随时跟踪服务的性能指标。Spr
- 配置Thymeleaf的模板路径众所周知,Thymeleaf的模板文件默认是在项目文件夹的src\main\resources\templa
- Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需
- 前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。追查原因之后发现,这个事情没想象中简单,可以说一
- 简述在学着使用Java的命令行来编译java文件的时候,遇到了这个问题Windows操作系统报错“‘
- 本文实例讲述了Java自定义注解用法。分享给大家供大家参考,具体如下:一 自定义注解语法[public] @interface Annota
- 本文介绍了Maven+Tomcat8 实现自动化部署的方法,分享给大家,具体如下:1.配置tomcat-users.xml首先在Tomcat
- 什么是FTPFTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以
- 前言Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient。WebClie
- java抠图片文字或签名运行原理第一步 遍历像素点BufferedImage image = ImageIO.read(new File(i
- 1、找奇数:public static boolean isOdd(int i){ return i % 2 == 1; }上面的方法真
- 哈希表(HashMap)hash查询的时间复杂度是O(1)按值传递Character,Short,Integer,Long, Float,D
- Android ListView的Item点击效果的定制
- 本文实例讲述了Java网络编程实现的简单端口扫描器。分享给大家供大家参考,具体如下:在计算机网络的学习中,不由得觉得这门课的零碎知识点异常之
- log4j2支持日志的异步打印,日志异步输出的好处在于,使用单独的进程来执行日志打印的功能,可以提高日志执行效率,减少日志功能对正常业务的影
- 本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下:这两天做java项目,用到属性文件,到网上
- 1.编写核心类MainApp:package com.yiidian.gson;import com.google.gson.Gson;im