今天總結棧的順序存儲結構
什麼是棧?
棧是一種線性表,其特點是限定盡在表尾進行插入和刪除操作,表尾棧一段也叫棧頂,另一端就是棧底了。既然棧是線性表,那麼棧也就有兩種存儲數據的方式,順序存儲和鏈式存儲。今天實現的是順序存儲的棧,也就順序棧。
圖示(來自百度圖片):
順序棧的實現:
棧的順序存儲還是比較簡單的,就是對數組進行操作。
<span style="font-family:Courier New;font-size:14px;">#include <iostream>
using namespace std;
const int StackSize = 1024; //棧的最大高度
template <class T>
class SeqStack {
public:
SeqStack() {
top = -1; //空棧時
}
void PushStack(T x); //將元素x入棧
T PopStack(); //出棧
T GetTop(); //得到棧頂元素
bool IsEmpty(); //判斷棧是否爲空
void PrintStack();
private:
int top; //棧頂指針
T data[StackSize];
};
template <class T>
void SeqStack<T>::PushStack(T x) {
data[++top] = x; //將x入棧 將top+1
}
template<class T>
void SeqStack<T>::PrintStack() {
if(IsEmpty()) cout<<"棧爲空"<<endl;
for(int i=top;i>=0;i--) {
cout<<data[i]<<" ";
}
cout<<endl;
}
template<class T>
T SeqStack<T>::PopStack() {
if(IsEmpty()) cout<<"棧爲空";
return data[top--]; //返回棧頂元素後 將指針下移
}
template<class T>
T SeqStack<T>::GetTop() {
if(IsEmpty()) {
return -1;
}else {
return data[top];
}
}
//判斷棧是否爲空 就是判斷top指針是否等於-1
template<class T>
bool SeqStack<T>::IsEmpty() {
if(top==-1)
return true;
else
false;
}
int main()
{
SeqStack<int> stack;
for(int i=0;i<5;i++) {
stack.PushStack(i);
}
cout<<"棧內元素:(按照棧頂到棧底順序)"<<endl;
stack.PrintStack();
cout<<"出棧"<<endl;
stack.PopStack();
stack.PrintStack();
cout<<"獲取棧頂元素"<<endl;
cout<<stack.GetTop()<<endl;
return 0;
}
</span>