C#实现顺序栈

(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,称为栈底(Bottom)。

栈相当与生活中洗盘子一样,把洗净的盘子一个接一个地往上放(相当于把元素入栈);取用盘子的时候,则从最上面一个接一个地往下拿(相当于把元素出栈)。

下面为栈的接口:

(IDS为各种数据结构的公共接口,包含Count(),IsEmpty(),Clear()三个操作,前面顺序表已经定义过)

using System;
using System.Collections.Generic;
using System.Text;

namespace DateStructrues
{
    /// <summary>
    /// 栈接口
    /// </summary>
    /// <typeparam name="T">泛型</typeparam>
    public interface IStack<T> : IDS<T>
    {
        /// <summary>
        /// 入栈操作
        /// </summary>
        /// <param name="item">泛型:要入栈的元素</param>
        void Push(T item);
        /// <summary>
        /// 出栈操作
        /// </summary>
        /// <returns>出栈的元素</returns>
        T Pop();
        /// <summary>
        /// 取栈顶元素
        /// </summary>
        /// <returns>取出的元素</returns>
        T GetTop();

    }
}

 

 

下面为栈的逻辑实现:

 

using System;
using System.Collections.Generic;
using System.Text;

namespace DateStructrues
{
    /// <summary>
    /// 顺序栈
    /// </summary>
    /// <typeparam name="T">泛型</typeparam>
    class SeqStack<T> : IStack<T>
    {
        #region

        //
        //数组,存入数据
        //
        private T[] data;

        //
        //最大值
        //
        private int maxsize;

        //
        //栈顶
        //
        private int top;

        /// <summary>
        /// <value>
        /// 获取或设置数组元素
        /// </value>
        /// </summary>
        public T[] Data
        {
            get
            {
                return data;
            }
        }

        /// <summary>
        /// <value>
        /// 获取或设置最大值
        /// </value>
        /// </summary>
        public int Maxsize
        {
            get
            {
                return maxsize;
            }
            set
            {
                maxsize = value;
            }
        }

        /// <summary>
        /// <value>
        /// 获取或设置栈顶元素
        /// </value>
        /// </summary>
        public int Top
        {
            get
            {
                return top;
            }
            set
            {
                top = value;
            }
        }

        /// <summary>
        /// 无参构造器
        /// </summary>
        public SeqStack() : this(10) { }

        /// <summary>
        /// 构造器
        /// </summary>
        /// <param name="size">初始大小</param>
        public SeqStack(int size)
        {
            data = new T[size];
            maxsize = size;
            top = -1;

        }
        #endregion

        #region Method

        /// <summary>
        /// 判断栈是否为满
        /// </summary>
        public bool IsFull
        {
            get
            {
                return top == maxsize - 1;
            }
        }

        #endregion

        #region IStack<T> 成员

        /// <summary>
        /// 出栈操作
        /// 如果data已满,top = maxsize - 1
        /// data[++top] = item
        /// </summary>
        /// <returns>出栈的元素值</returns>
        public T Pop()
        {
            T tmp = default(T);
            //判断表是否为空
            if (top == -1)
            {
                Console.WriteLine("栈为空");
                return tmp;
            }
            tmp = data[top--];

            return tmp;

        }

        /// <summary>
        /// 入栈操作
        /// </summary>
        /// <param name="item">将入栈的值</param>
        public void Push(T item)
        {
            if (top == maxsize - 1)
            {
                Console.WriteLine("栈为满");
                return;
            }

            data[++top] = item;

        }

        /// <summary>
        /// 获取栈顶元素
        /// </summary>
        /// <returns>栈顶元素值</returns>
        public T GetTop()
        {
            if (top == -1)
            {
                Console.WriteLine("栈为空!");
                return default(T);
            }
            return data[top];

        }

        #endregion

        #region IDS<T> 成员

        /// <summary>
        /// 获取栈的长度
        /// </summary>
        public int Count
        {
            get
            {
                return top + 1;
            }
        }

        /// <summary>
        /// 清空操作
        /// </summary>
        public void Clear()
        {
            top = -1;
        }

        /// <summary>
        /// <value>
        /// 判断栈是否为空
        /// 如果为top为-1,返回true
        /// 否则,返回false
        /// </value>
        /// </summary>
        public bool IsEmpty
        {
            get
            {
                return top == -1;
            }
        }

        #endregion
    }
}

posted @ 2008-08-21 15:53  逍遥帆帆  阅读(990)  评论(0编辑  收藏  举报