相關概念
棧(Stack)是隻允許在一端進行插入或刪除操作的線性表。
棧頂(Top):線性表允許插入刪除的那一端。
棧底(Bottom):固定的,不允許進行插入和刪除的另一端。
棧的基本操作
InitStack(&S)
:初始化一個空棧S。StackEmpty(S)
:判斷一個棧是否為空,若棧S為空則返回true,否則返回false。Push(&S,x)
:進棧,若棧S未滿,則將x加入使之成為新棧頂。Pop(&S,&x)
:出棧,若棧S非空,則彈出棧頂元素,並用x返回。GetTop(S,&x)
:讀棧頂元素,但不出棧,若棧S非空,則用X返回棧頂元素。DestoryStack(&S)
:銷燬棧,並釋放棧S所佔用的儲存空間。
棧的數學性質:當\(n\)個不同元素進棧時,出棧元素的不同排列的個數為\(C^n_{2n}/(n+1)\)。該公式稱為卡特蘭數(Catalan)公式,可採用數學歸納法證明。
順序棧
#define MaxSize 50
typedef int Elemtype;
typedef struct {
Elemtype data[MaxSize];
int top;
} SqStack;
void InitStack(SqStack& S) {
S.top = -1;
}
bool StackEmpty(SqStack S) {
if (S.top = -1)
return true;
else
return false;
}
bool Push(SqStack& S, Elemtype x) {
if (S.top == MaxSize - 1)
return false;
S.data[++S.top] = x;
return true;
}
bool Pop(SqStack& S, Elemtype& x) {
if (S.top == -1)
return false;
x = S.data[S.top--];
return true;
}
bool GetTop(SqStack& S, Elemtype& x) {
if (S.top == -1)
return false;
x = S.data[S.top];
return true;
}