注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淡忘邻人

二十七,始发愤

 
 
 

日志

 
 
 
 

堆栈 C#  

2010-06-02 09:47:50|  分类: 数据结构 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天讲的是堆栈。 这个堆栈是自增长型的。

什么是自增长?

就是 不需要设置堆栈大小, 堆栈会根据你的输入内容来设置堆栈大小。

堆栈默认大小为10, 以10的步长增长。

也就是 如果你的数据为11个,那么堆栈大小为10+10=20。

我们先设计一个堆栈的接口。

namespace DateStructrue  
{  
    public interface IDateStructrue  
    {  
        int Count { get; }  
        void Clear();  
        bool IsEmpty { get; }  
    }  
 
    public interface IStack<T> : IDateStructrue  
    {  
        T GetTop();  
        T Pop();//pop a data from stack.  
        void Push(T item);//push data in stack  
        bool Contains(T item);  
        bool IsFull { get; }  
    }  

namespace DateStructrue
{
    public interface IDateStructrue
    {
        int Count { get; }
        void Clear();
        bool IsEmpty { get; }
    }

    public interface IStack<T> : IDateStructrue
    {
        T GetTop();
        T Pop();//pop a data from stack.
        void Push(T item);//push data in stack
        bool Contains(T item);
        bool IsFull { get; }
    }
}

我们开始设计堆栈类

namespace DateStructrue  
{  
    public class Stack<T>:IStack<T>  
    {  
        private T[] _array;  
        private int _top;  
 
        public Stack() : this(10) { }//default the size of stack is 10;  
 
        public Stack(int size)  
        {  
            _array = new T[size];  
            _top = -1;  
        } 
 
        #region IDateStructrue Members  
 
        public int Count  
        {  
            get { return this._top + 1; }  
        }  
 
        public void Clear()  
        {  
            this._top = -1;  
        }  
 
        public bool IsEmpty  
        {  
            get { return this._top == -1; }  
        } 
 
        #endregion 
 
        #region IStack<T> Members  
 
        public T GetTop()  
        {  
            if (IsEmpty) { return default(T); }  
            return _array[this._top];  
        }  
 
        public T Pop()  
        {  
            T data = default(T);//if T is value(数值型),data is 0.is object(引用),data is NULL  
            if (IsEmpty) { return data; }  
            return data = _array[this._top--];  
        }  
 
        public void Push(T item)  
        {  
            if (IsFull)   
            {  
                T[] destinationArray = new T[this._array.Length + 10];//extend the size of 10;  
                Array.Copy(this._array, 0, destinationArray, 0, this._array.Length);  
                this._array = destinationArray;  
            }  
 
            this._array[++this._top] = item;  
        }  
 
        public bool Contains(T item)  
        {  
            int index = this._top;  
            EqualityComparer<T> compare = EqualityComparer<T>.Default;  
            if (IsEmpty && item == null) return false;  
            while (index-- >=0)  
            {  
                if (compare.Equals(_array[index], item))  
                { return true; }  
            }  
            return false;  
        }  
 
        public bool IsFull  
        {  
            get { return this._top == this._array.Length - 1; }  
        } 
 
        #endregion  
    }  

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fan158/archive/2010/04/07/5457709.aspx

  评论这张
 
阅读(783)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017