數據結構與算法——順序棧

今天總結棧的順序存儲結構

什麼是棧?

是一種線性表,其特點是限定盡在表尾進行插入和刪除操作,表尾棧一段也叫棧頂,另一端就是棧底了。既然棧是線性表,那麼棧也就有兩種存儲數據的方式,順序存儲和鏈式存儲。今天實現的是順序存儲的棧,也就順序棧。

圖示(來自百度圖片):


順序棧的實現:

棧的順序存儲還是比較簡單的,就是對數組進行操作。

<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>


發佈了46 篇原創文章 · 獲贊 63 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章