棧作為一種特殊的線性表,在計算機中有順序儲存結構和鏈式存儲結構兩種存儲結構,根據這個我們把棧分為順序棧和鏈棧
順序棧
棧頂:用top來動態地表示棧頂元素在順序棧中的位置,當top=-1時表示棧為空
這個是棧這個數據類型的定義
typedef char ElemTypeStack;
typedef struct{
ElemTypeStack elem[MAXSIZE];
int top;
}FirStack;
用一個數組來存儲數據,對應的下標表示他在棧中的位置,top表示棧頂元素對應的下標,若棧為空,則top=-1
棧的初始化
void Init(FirStack *s)
{
s->top=-1;
}
我們用一個順序棧指針來表示一個順序棧,初始化一個順序棧為空時,我們設置他的top值為-1
順序棧的入棧操作
//入棧
bool PushStack(FirStack *s,ElemTypeStack x)
{
if(s->top==MAXSIZE-1)
return false;
else
{
(s->top)++;
s->elem[s->top]=x;
return true;
}
}
入棧時,首先應檢查棧是否已滿,若未滿,則top自增,並將x置入棧頂
上溢:若棧已滿,還要進棧
順序棧的出棧
bool PopStack(FirStack *s,ElemTypeStack x)
{
if(s->top==-1)
return false;
else
{
x=s->elem[s->top];
s->top--;
return true;
}
}
首先應檢查棧是否為空,若未空,則將棧頂元素的值賦給x,然后top自減
下溢:若棧為空還要出棧,則會發生棧的下溢
順序棧之讀棧頂元素
//讀棧頂元素
bool GetTop(FirStack *s,ElemTypeStack x)
{
if(s->top==-1)
return false;
else
{
x=s->elem[s->top];
return true;
}
}
讀棧頂元素之前,先判斷棧是否為空,若不為空,則將棧頂元素賦值給x

