棧(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()
using System;
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;}
}
//使用構造器初始化棧
public Stack(int size)
{
data = new object[size];
maxsize = size;
top = -1;
}
//求棧的長度(棧中的元素個數)
public int StackLength()
{
return top+1;
}
//清空順序棧
public void ClearStack()
{
top = -1;
}
//判斷順序棧是否為空
public bool IsEmpty()
{
if (top == -1)
{
return true;
}
else
{
return false;
}
}
//判斷順序棧是否為滿
public bool IsFull()
{
if (top == maxsize-1)
{
return true;
}
else
{
return false;
}
}
//入棧操作
public void Push(object e)
{
if(IsFull())
{
Console.WriteLine("棧已滿!");
return;
}
data[++top] = e;
}
//出棧操作,并返回出棧的元素
public object Pop()
{
object temp = null;
if (IsEmpty())
{
Console.WriteLine("棧為空!");
return temp;
}
temp = data[top];
top --;
return temp;
}
//獲取棧頂數據元素
public object GetTop()
{
if (IsEmpty())
{
Console.WriteLine("棧為空!");
return null;
}
return data[top];
}
}
//定義測試類
class Test
{
static void Main()
{
Stack s = new Stack(10);
Random r = new Random(); //隨機生成數據
int mid;
for(int i = 0;i<10;i++)
{
mid = (int)r.Next(10,100); //獲取10~100之間的整型數據
s.Push(mid); //將數據壓棧
Console.WriteLine("將數據{0}壓棧,現在棧中元素數為:{1}",
mid,s.StackLength());
}
Console.WriteLine("/n準備將數據元素888壓棧:");
s.Push(888);
Console.WriteLine("棧中元素個數為:{0}",s.StackLength());
Console.WriteLine();
for(int j = 0;j<10;j++) //循環出棧
{
Console.WriteLine("將數據{0}彈棧,現在棧中元素數為:{1}",
s.Pop(),s.StackLength());
}
}
}
運行結果如下:
新聞熱點
疑難解答