棧的基本概念

棧(stackios

 

棧是一種先進後出(FILO,即first-in-last-out)的數據結構,你能夠把它想象成一個只開一個口的乒乓球筒,每次只能從最頂端處放置或取出數據。算法

通常在OI中咱們用一個數組和棧頂指針(用int表示的下標)來模擬一個棧。數組

棧支持兩個操做:1.向棧頂加入一個元素 2.從棧頂取出一個元素這兩個操做的時間複雜度都是O(1)。數據結構

那麼它所維護的這個數據集合中,數據之間有什麼樣的關係呢?spa

很簡單,就是fisrt-in-last-out,或者更具體一點:若是一個元素在另外一個元素以前加入這個集合中,那麼它必定在那個元素以後退出這個集合。指針

  總之,棧是一種只能在某一端插入和刪除的特殊線性表。用桶堆積物品,先堆進來的壓在底下,隨後一件一件往上堆,最後取走時,只能從上面一件一件取。code

  棧就是一種相似桶堆積物品的數據結構,進行刪除和插入的一端稱爲棧頂,另外一端稱爲棧底。blog

  插入通常稱爲進棧(PUSH),刪除則稱爲退棧(POP)。io

一個棧能夠用定長爲n的數組s來表示,用一個棧指針top指向棧頂。若top=0,表示棧空,top=n時棧滿。進棧時top加一。退棧時top減一。當top<0時下溢,棧指針在運算中永遠指向棧頂。ast

          具體算法::
1.進棧算法(PUSH)

(1)                  若top>=n時,則給出上溢信息,作出錯處理(進棧前首先檢查是否已經爲棧滿,滿則溢出,不滿則做(2))。

(2)              top++(棧指針加一,指向進棧地址)。

(3)              s[top]=x,結束(x爲新進棧元素)。

 

2.退棧算法(POP):

(1)          若top<=0時,則給出下溢信息,作出錯處理(進棧前首先檢查是否已經爲空棧,空則溢出,不滿則做(2))。

(2)      x=s[top],(退棧後的元素賦給x)

(3)      top--,結束(棧指針-1,指向棧頂)。

 

下面附上代碼:

#include<iostream> #include<cstdio>
using namespace std; #define n 100
void push(int s[],int top,int x)//進棧 
{ if(top==n) cout<<"overflow"; else { top++; s[top]=x; } } void pop(int s[],int top,int y)//退棧
{ if(top==0) cout<<"underflow"; else { y=s[top]; top--; } } int main() { ......//省略 
}
相關文章
相關標籤/搜索