栈(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/