棧與隊列

棧與隊列

棧是一種限定僅在一端進(jìn)行插入和刪除的 線性表 馋贤,無論是往棧中插入元素還是刪除棧中的元素,或者讀取棧中的元素畏陕,都只能固定在線性表的一端進(jìn)行配乓。通常,棧的這一端被稱為棧頂(top)惠毁,與此相對犹芹,棧的另一端叫做棧底(bottom)。由此可知鞠绰,最后插入棧中的元素是最先被刪除或讀取的元素腰埂,而最先壓入的元素則被放在棧的底部,要到最后才能取出蜈膨。換言之屿笼,棧的修改是按后進(jìn)先出的原則進(jìn)行的。因此翁巍,通常棧被稱為后進(jìn)先出(last in first out)表驴一,簡稱LIFO表。

圖1 棧的具體流程

棧的抽象數(shù)據(jù)類型

下面的C++類模版給出了棧類(名字為Stack灶壶,模版參數(shù)為元素類型T)的一個抽象數(shù)據(jù)類型定義肝断。

棧的抽象定義

template <class T>
class Stack
{
public:
    void clear();
    bool push(const T item);
    bool pop(T & item);
    bool top(T & item);
    bool isEmpty();
    bool isFull();
};

棧的具體定義程序

該程序由C++編輯,可以實現(xiàn) 順序棧 的存儲和彈出
具體的棧程序

#include <iostream>  
#define MAX 100//定義數(shù)組長度  
using namespace std;  

struct Stack//建立棧  
{  
    int value[MAX];  
    int top;//棧頂?shù)臄?shù)組序號  
};  

void Init(Stack &s)//初始化棧  
{  
    s.top=-1;  
}  

int Push(Stack &s,int e)//把元素e壓入棧頂  
{  
    if(s.top>MAX-1)//如果超出棧的容量驰凛,返回0  
        return 0;  
    s.top++;//棧頂加1  
    s.value[s.top]=e;//把e賦給棧頂  
    return 1;  
}  

int IsEmpty(Stack s)//判定棧是否為空  
{  
    if(s.top==-1)  
        return 1;  
    else  
        return 0;  
} 

int Pop(Stack &s,int &m)//取出棧頂元素胸懈,并刪除棧頂  
{  
    if(s.top==-1)//top等于-1,棧為空  
    {
        cout<<"棧為空恰响,不能讀取棧頂元素"<<endl;
        return 0; 
    }
    else
    {
        m=s.value[s.top]; //先取出top元素趣钱,再使top-1
        s.top--;
        return 1;  
    }  
} 

int main()  
{  
    Stack slist;  
    Init(slist);
    cout<<"棧是否為空(1為空,0為不空)"<<endl;
    cout<<IsEmpty(slist)<<endl;  
    cout<<"輸入"<<endl;  
    int e;
    int m;  
    cin>>e;
    while (e!=0)
    {
            Push(slist,e);
            cout<<"棧是否為空(1為空渔隶,0為不空)"<<endl;
            cout<<IsEmpty(slist)<<endl;
            cout<<"獲取并彈出棧頂元素:";
            Pop(slist,m);
            cout<<m<<endl;
            cout<<"棧是否為空(1為空羔挡,0為不空)"<<endl;
            cout<<IsEmpty(slist)<<endl;
            cin>>e;
    }

    return 0;  
}  

棧的特點

  • 先進(jìn)后出
  • 具有記憶功能
  • 對棧的插入與刪除操作中,不需要改變棧底指針
  • 椉浒Γ可以使用順序存儲也可以使用鏈?zhǔn)酱鎯?/li>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绞灼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呈野,更是在濱河造成了極大的恐慌低矮,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件被冒,死亡現(xiàn)場離奇詭異军掂,居然都是意外死亡轮蜕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蝗锥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跃洛,“玉大人,你說我怎么就攤上這事终议』憬撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵穴张,是天一觀的道長细燎。 經(jīng)常有香客問我,道長皂甘,這世上最難降的妖魔是什么玻驻? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮偿枕,結(jié)果婚禮上璧瞬,老公的妹妹穿的比我還像新娘。我一直安慰自己益老,他們只是感情好彪蓬,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捺萌,像睡著了一般档冬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桃纯,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天酷誓,我揣著相機與錄音,去河邊找鬼态坦。 笑死盐数,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伞梯。 我是一名探鬼主播玫氢,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谜诫!你這毒婦竟也來了漾峡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤喻旷,失蹤者是張志新(化名)和其女友劉穎生逸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡槽袄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年烙无,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遍尺。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡截酷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狮鸭,到底是詐尸還是另有隱情合搅,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布歧蕉,位于F島的核電站,受9級特大地震影響康铭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜从藤,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一催跪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夷野,春花似錦懊蒸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妒貌,卻和暖如春通危,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灌曙。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工菊碟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人在刺。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓逆害,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚣驼。 傳聞我的和親對象是個殘疾皇子魄幕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容