数据结构 C#版 栈 (链式) 有原代码

  
在前面的文章中我们实现了链表,下面给大家一个C#语言栈的链式实现,类中的每个方法都有注释,有不明白的问题,大家给我发EMAIL: warensoft@foxmail.com 或者 warensoft@sina.com

如果想了解更多关于DotNet方面的技术资料,文章以及视频,请到本团队的主页:www.warensoft.cn
 
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace 链式栈
{
    ///<summary>
    /// 用于表示栈中的一个结点
    ///</summary>
    public class CSStackNode:IDisposable
    {
        private object element;
        ///<summary>
        /// 用于表示该结点中存储的元素值
        ///</summary>
        public object Element
        {
            get { return element; }
            set { element = value; }
        }
 
        private CSStackNode nextNode;
        ///<summary>
        /// 用于表示对下一个结点的引用
        ///</summary>
        public CSStackNode NextNode
        {
            get { return nextNode; }
            set { nextNode = value; }
        }
 
 
        #region IDisposable 成员
 
        public void Dispose()
        {
            this.element = null;
        }
 
        #endregion
    }
 
 
 
 
    ///<summary>
    /// 用于表示栈
    ///</summary>
    public class CSStack
    {
        ///<summary>
        /// 用于指向栈顶元素
        ///</summary>
        private CSStackNode top = null;
       
       
 
 
        ///<summary>
        /// 构造方法
        ///</summary>
        public CSStack()
        {
            this.InitStack();
        }
 
 
        private int count;
        ///<summary>
        /// 获取 Stack 中包含的元素数。
        ///</summary>
        public int Count
        {
            get
            {
                return this.count ;
            }
        }
 
        private void InitStack()
        {
            // 在初始化的时候让栈顶和栈底指向同一个位置
            if (this.top !=null)
            {
                CSStackNode tmpnode = this.top.NextNode;
                // 释放所有占用的资源
                while (tmpnode != null)
                {
                    CSStackNode node = tmpnode.NextNode;
                    tmpnode.NextNode = null;
                    tmpnode.Dispose();
 
                    tmpnode = node;
 
                }
                this.top.NextNode = null;
                this.top.Dispose();
            }
            this.top = new CSStackNode();
            this.count = 0;
        }
        ///<summary>
        /// 从 Stack 中移除所有对象。
        ///</summary>
        public void Clear()
        {
            this.InitStack();
        }
 
        ///<summary>
        /// 确定某元素是否在 Stack 中。
        ///</summary>
        ///<param name="obj"> 要在 Stack 中查找的 Object。 </param>
        ///<returns> 如果在 Stack 中找到 obj,则为 true;否则为 false。 </returns>
        public bool Contains(object obj)
        {
            CSStackNode tmpnode = this.top;
            while (tmpnode !=null )
            {
                if (tmpnode .Equals (obj ))
                {
                    return true;
                }
                tmpnode = tmpnode.NextNode;
            }
            return false;
        }
 
        ///<summary>
        /// 返回位于 Stack 顶部的对象但不将其移除。
        ///</summary>
        ///<returns> 位于 Stack 顶部的 Object。 </returns>
        public object Peek()
        {
            return this.top.Element;
        }
 
        ///<summary>
        /// 移除并返回位于 Stack 顶部的对象。
        ///</summary>
        ///<returns> 从 Stack 的顶部移除的 Object。 </returns>
        public object Pop()
        {
            if (this.count ==0)
            {
                return null;
            }
 
            CSStackNode node = this.top;
            this.top = this.top.NextNode;
            this.count--;
            return node.Element;
        }
 
        ///<summary>
        /// 将对象插入 Stack 的顶部。
        ///</summary>
        ///<param name="obj"> 要推入到 Stack 中的 Object。 </param>
        public void Push(object obj)
        {
            if (this.count ==0)
            {
                this.top.Element = obj;
                this.count = 1;
 
            }
            else
            {
                CSStackNode node = new CSStackNode();
                node.Element = obj;
                node.NextNode = this.top;
                this.top = node;
                this.count++;
            }
        }
 
        ///<summary>
        /// 将 Stack 复制到新数组中。
        ///</summary>
        public object[] ToArray()
        {
            object []list=new object [this.count ];
            CSStackNode node = this.top;
            for (int i = 0; i < this.count ; i++)
            {
                list[i] = node.Element;
                node = node.NextNode;
            }
            return list;
        }
    }
}
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值