數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)第二彈 棧與隊(duì)列(1)

棧和隊(duì)列其實(shí)是一種特殊的線性表,他們是限定只能在表的一端或兩端進(jìn)行插入夕春、刪除元素,所以狞甚,這些被統(tǒng)稱為限定性數(shù)據(jù)結(jié)構(gòu)

定義:

検诎裕可以說是線性表的具體形式巡验,僅允許在表尾進(jìn)行插入刪除操作,我們把允許進(jìn)行插入刪除操作的一端碘耳,稱為棧頂显设,另一端稱為棧底。

對于棧來說辛辨,最主要的操作就是插入和刪除操作捕捂,插入操作稱為,入椨溲郑或進(jìn)棧绞蹦,刪除操作稱為,出棸竦或退棧幽七。由于只能在棧頂進(jìn)行插入和刪除操作,所以棧有一個(gè)特點(diǎn)就是棧里的元素一般都是是先進(jìn)后出(后進(jìn)先出)溅呢,就好像手槍的彈夾澡屡,最先壓進(jìn)去的子彈,最后才打出來咐旧。

棧的基本操作:

  • InitStack(S): 構(gòu)造一個(gè)空棧
  • ClearStack(S): 將棧S清為一個(gè)空棧
  • EmptyStack(S): 判斷棧S是否為空
  • LengthStack(S): 求棧S的長度(棧中元素的個(gè)數(shù))
  • GetTop(S,e): 獲取棧頂元素
  • Push(S,e): 入棧操作
  • Pop(S,e): 出棧操作

因?yàn)闂5谋举|(zhì)是一個(gè)線性表驶鹉,所以棧也分為順序棧和鏈棧

棧的順序存儲(chǔ)結(jié)構(gòu)的類型定義

#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
    ElemType data[MAXSIZE]; //用數(shù)組來模擬順序棧,下標(biāo)從零開始
    int top;                //棧頂?shù)闹羔槪簿褪菞m數(shù)奈恢孟聵?biāo)
}SeqStack;

棧的順序存儲(chǔ)結(jié)構(gòu)的具體操作

#define OK 1
#define ERROR 0
typedef int Status;
Status InitStack(SeqStack *S)
{
    S->top = -1;            //因?yàn)閿?shù)組下標(biāo)從零開始铣墨,所以-1為空
    return OK;
}
Status ClearStack(SeqStack *S)
{
    S->top = -1;
    return OK;
}
int EmptyStack(SeqStack S)
{
    if(S.top==-1)
        return 1;
    else
       return 0;  
}
int LengthStack(SeqStack S)
{
    return S.top+1;
}
Status GetTop(SeqStack S,ElemType *e)
{
    if(EmptyStack(S))       //棧為空
        return ERROR;
    *e = S.data[S.top];
    return OK;
}
Status Push(SeqStack *S,ElemType e)
{
    if(S->top == MAXSIZE-1) //棧滿了
        return ERROR;
    else
    {
        S->top++;
        S->data[S->top] = e;
    }
    return OK;
}
Status Pop(SeqStack *S,ElemType *e)
{
    if(ElemType(S))         //棧為空
        return ERROR;
    *e = S->data[S->top];
    S->top--;
    return OK;
}

鏈棧

鏈棧其實(shí)就是利用單鏈表作為棧的存儲(chǔ)結(jié)構(gòu)室埋,單鏈表的第一個(gè)結(jié)點(diǎn)為棧頂,最后一個(gè)結(jié)點(diǎn)為棧底。鏈椧ο可以有頭結(jié)點(diǎn)也可以沒有孕蝉,不帶頭結(jié)點(diǎn),棧頂指針就指向棧頂結(jié)點(diǎn)腌逢,帶頭結(jié)點(diǎn)就指向頭結(jié)點(diǎn)降淮。

棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)描述:

typedef struct node
{
    ElemType data;          //數(shù)據(jù)域
    struct node *next;      //指針域
}StackNode,*LinkStack;

基礎(chǔ)操作

//這里只描述棧的三個(gè)重要操作,其他操作可與單鏈表進(jìn)行類比
Status GetTop(LinkStack top,ElemType *e)
{
    if(!top->next)          //棧為空
        return ERROR;
    *e = top->next->data;   //有頭結(jié)點(diǎn)的棧
    return OK;
}
Status Push(LinkStack top,e)
{
    StackNode *p;
    p = (StackNode*)malloc(sizeof(StackNode));  //為新結(jié)點(diǎn)開辟存儲(chǔ)空間
    s->data = e;            //數(shù)據(jù)域賦值
    s->next = top->next;    //將s插入到棧頂
    top->next = s;
    return OK;
}
Status Pop(LinkStack top,*e)
{
    if(!top->next)          //空棧
        return ERROR;
    StackNode *p;
    *e = top->next->data;   //用e來返回棧頂元素
    p = top->next;
    top->next = p->next;    //刪除棧頂結(jié)點(diǎn)并更新棧頂
    free(p);                //釋放空間
    return OK;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搏讶,一起剝皮案震驚了整個(gè)濱河市佳鳖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媒惕,老刑警劉巖系吩,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吓笙,居然都是意外死亡淑玫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門面睛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來絮蒿,“玉大人,你說我怎么就攤上這事叁鉴⊥晾裕” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵幌墓,是天一觀的道長但壮。 經(jīng)常有香客問我,道長常侣,這世上最難降的妖魔是什么蜡饵? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮胳施,結(jié)果婚禮上溯祸,老公的妹妹穿的比我還像新娘。我一直安慰自己舞肆,他們只是感情好焦辅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著椿胯,像睡著了一般筷登。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哩盲,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天前方,我揣著相機(jī)與錄音狈醉,去河邊找鬼。 笑死惠险,一個(gè)胖子當(dāng)著我的面吹牛舔糖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莺匠,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼十兢!你這毒婦竟也來了趣竣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對情侶失蹤旱物,失蹤者是張志新(化名)和其女友劉穎遥缕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宵呛,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡单匣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宝穗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片户秤。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逮矛,靈堂內(nèi)的尸體忽然破棺而出鸡号,到底是詐尸還是另有隱情,我是刑警寧澤须鼎,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布鲸伴,位于F島的核電站,受9級(jí)特大地震影響晋控,放射性物質(zhì)發(fā)生泄漏汞窗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一赡译、第九天 我趴在偏房一處隱蔽的房頂上張望仲吏。 院中可真熱鬧,春花似錦捶朵、人聲如沸蜘矢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽品腹。三九已至,卻和暖如春红碑,著一層夾襖步出監(jiān)牢的瞬間舞吭,已是汗流浹背泡垃。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羡鸥,地道東北人蔑穴。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像惧浴,于是被迫代替她去往敵國和親存和。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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