順序棧的基本操作:初始化、進棧、出棧、讀棧頂元素

順序棧:利用一組地址連續的存儲單元依次存放自棧底到棧頂的數據元素,同時由於棧操作的特殊性,還必須附設一個位置指針top(棧頂指針)來動態地指示棧頂元素在順序棧中的位置。通常以top=-1表示空棧。

代碼如下:

#include<iostream>

using namespace std;

#define  TRUE 1

#define  FALSE 0

//順序棧的存儲結構

#define Stack_Size 50 //設棧中元素個數爲50

typedef struct

{

int elem[Stack_Size];//用來存放棧中元素的一維數組

int top;//用來存放棧頂元素的下標,top=-1表示空棧

}SeqStack;


//初始化順序棧

void InitStack(SeqStack *S)

{

S->top = -1;//構造一個空棧

}


//順序棧進棧運算,首先判斷棧是否已滿,若棧已滿,還要進棧就會發生上溢

int Push(SeqStack *S,int x)//將x置入S棧新棧頂

{

if (S->top == Stack_Size - 1)//棧已滿

{

return FALSE;

}

S->top++;

S->elem[S->top] = x;//把x入棧

return TRUE;

}


//順序棧出棧運算,首先判斷棧是否爲空,若棧空,還要出棧就會發生下溢

int Pop(SeqStack *S, int *x)//將S棧頂元素彈出,放到x所指的存儲空間中帶出

{

if (S->top == - 1)//棧爲空

{

return FALSE;

}

else

{

*x = S->elem[S->top];

S->top--;//修改棧頂指針

return TRUE;

}

}


//順序棧讀棧頂元素運算

int GetPop(SeqStack *S, int *x)//將棧S棧頂元素讀出,放到x所指的存儲空間中,棧頂指針保持不變

{

if (S->top == -1)//棧爲空

{

return FALSE;

}

else

{

*x = S->elem[S->top];

return TRUE;

}

}

注意:在實現GetPop操作時,也可將參數SeqStack *S改爲SeqStack S,將傳地址方式改爲傳值方式。傳值比傳地址容易理解,但傳地址比傳值更節省空間與時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章