順序棧
1、基本概念
棧是限定僅在表尾進行插入或刪除操作的線性表,表末端為棧頂(Top),表頭稱為棧頂(Bottom),不含元 素稱為空戰 (用順序表儲存的棧更常見) 因此棧又稱為後進先出(Last in First out, LIFO)的線性表。
2、資料型別定義
//順序棧ADT
typedef struct SequenceStack
{
// 棧底
int *base;
// 棧頂
int *top;
}SequenceStack;
3、功能實現
bool InitStack(SequenceStack &S){
S.base=new int[Maxsize]; //為順序棧分配一個最大容量為Maxsize的空間
if(!S.base) //空間分配失敗
return false;
S.top=S.base; //top初始為base,空棧
return true;
}
bool Push(SequenceStack &S,int e){
if(S.top-S.base==Maxsize) //棧滿
return false;
*(S.top++)=e; //元素e壓入棧頂,然後棧頂指標加1,等價於*S.top=e; S.top++;
return true;
}
bool Pop(SequenceStack &S,int e){
if(S.top == S.base) //棧空
return false;
e = *(--S.top); //元素e壓入棧頂,然後棧頂指標加1,等價於*S.top=e; S.top++;
return true;
}
int GetTop(SequenceStack S){ //取棧頂
if(S.top!=S.base) //棧非空
return *(S.top-1); //返回棧頂元素的值,棧頂指標不變
else
return -1;
}
3、測試程式碼
int main(){
int n,x;
SequenceStack S;
InitStack(S);//初始化一個順序棧S
cout<<"請輸入元素個數n:"<<endl;
cin>>n;
cout<<"請依次輸入n個元素,依次入棧:"<<endl;
while(n--){
cin>>x; //輸入元素
Push(S,x);
}
cout<<"元素依次出棧:"<<endl;
while(S.top!=S.base){//如果棧不空,則依次出棧
cout<<GetTop(S)<<"\t";//輸出棧頂元素
Pop(S,x); //棧頂元素出棧
}
return 0;
}