Stack

栈(Stack)是限定在表尾端进行插入或删除操作的线性表。因此,表尾具有特殊的含义,称之为栈顶(Top),另一端是固定的,称为栈底(Bottom)。不含任何数据元素的栈为空栈(Empty Stack)。 栈通常记为:S= (a1,a2,…,an),S是英文单词stack的第1个字母。栈中元素按a1,a2,a3,...,an的次序进栈,出栈的次序为栈顶元素。即出栈的次序与进栈相反,an第一个出栈,a1最后一个出栈。所以,栈的操作是按照后进先出(Last In First Out,简称LIFO)或先进后出(First In Last Out,简称FILO)的原则进行的,因此,栈又称为LIFO表或FILO表。 对于栈来说,主要的操作有: 1、构造空栈 2、清空栈:ClearStack() 3、求栈长(获得栈中元素的个数):StackLength() 4、返回栈顶元素:GetTop() 5、压栈操作:Push(object e) 6、弹栈操作(出栈操作):Pop() 7、判断栈是否为空:IsEmpty() 8、判断栈是否已满:IsFull()

 

public class Stack
     {
         int maxsize;//顺序栈容量
         object[] data;
         int top;//栈顶
 
         //public object this[int index]
         //{
         //    get { return data[index]; }
         //    set { data[index] = value; }
         //}
 
         public int Maxsize
         {
             get { return maxsize; }
             set { maxsize = value; }
         }
 
         public int Top
         {
             get { return top; }
         }
         /// <summary>
         ///初始栈 
         /// </summary>
         /// <param name="size">初始栈大小</param>
         public Stack(int size)
         {
             data = new object[size];
             maxsize = size;
             top = -1;
         }
         /// <summary>
         /// 求栈长度
         /// </summary>
         /// <returns>返回长度</returns>
         public int StackLength()
         {
             return top + 1;
         }
         /// <summary>
         /// 清空顺序栈
         /// </summary>
         public void ClearStack()
         {
             top = -1;
             Console.WriteLine("栈已清空");
         }
         /// <summary>
         /// 判断栈是否为空
         /// </summary>
         /// <returns></returns>
         public bool isEmpty()
         {
             if (top == -1)
             {
                 return true;
             }
             else
             {
                 return false;
             }
         }
         /// <summary>
         /// 判断栈是否为满
         /// </summary>
         /// <returns></returns>
         public bool isFull()
         {
             if (top == maxsize - 1)
             {
                 return true;
             }
             else
             {
                 return false;
             }
         }
         /// <summary>
         /// 入栈
         /// </summary>
         /// <param name="e">要压入的对象</param>
         public void Push(object e)
         {
             if (isFull())
             {
                 Console.WriteLine("栈已满");
             }
             else
             {
                 data[++top] = e;
             }
         }
 
         /// <summary>
         /// 出栈并返回栈顶元素
         /// </summary>
         /// <returns></returns>
         public object Pop()
         {
             if (isEmpty())
             {
                 Console.WriteLine("栈为空");
                 return null;
             }
             else
             {
                 object temp;
                 temp = data[top--];
                 return temp;
             }
         }
 
         public object GetTop()
         {
             if (isEmpty())
             {
                 Console.WriteLine("栈为空");
                 return null;
             }
             else
             {
                 return data[top];
             }
         }
     }

 

 

 

 原文来自http://blog.163.com/fujl_2008/blog/static/10378107200810972618942/                          

posted @ 2012-09-08 21:48  UncleNull  阅读(333)  评论(0编辑  收藏  举报