數(shù)據(jù)結(jié)構(gòu) 棧和隊列

1. 棧 Stack

定義:
限定僅在表尾進(jìn)行插入和刪除操作的線性表。即后進(jìn)先出的線性表(Last In First Out)表尾即棧頂top,表頭即棧低bottom。

存儲方式:
順序棧、鏈棧;

1. 順序棧:

一組地址連續(xù)的存儲單元,依次存放自棧低到棧頂?shù)臄?shù)據(jù)元素。

結(jié)構(gòu):兩個指針top,base,一個int size描述棧的大小;
主要操作:出棧和入棧(壓棧)
空棧:top = base;
非空棧:base指向棧低,top指向棧頂元素的下一個位置上。

有一個元素的棧

C語言的結(jié)構(gòu)體

#define MAXSIZE 100  //順序棧存儲空間的初始分配量
typedef struct{

    SElemtype *base;
    SElemtype *top;
    int  stacksize;

}SqlStack;
2. 鏈棧

采用鏈?zhǔn)酱鎯Y(jié)構(gòu)實現(xiàn)棧,通常用單鏈表表示。

結(jié)構(gòu):stackNode(elemtype data,stackNode next);
主要操作: 對棧頂?shù)牟迦牒蛣h除

鏈棧
typedef struct StackNode{

    SElemtype data;
    struct StackNode  *next;

}StackNode,*LinkStack;

2. 棧的應(yīng)用

  1. 數(shù)制轉(zhuǎn)換
    十進(jìn)制數(shù)據(jù)N和其他進(jìn)制的轉(zhuǎn)換是計算機(jī)實現(xiàn)計算的基本問題,算法基于的原理:

N=(N div d)*d+N mod d
div:整除
mode:取余數(shù)

  1. 括號匹配的檢驗
  2. 表達(dá)式求值

3. 棧與遞歸

1.遞歸:

若在一個函數(shù)、過程或數(shù)據(jù)結(jié)構(gòu)定義的內(nèi)部又直接或間接出現(xiàn)定義本身的應(yīng)用,則稱為遞歸。

通常在3中情況下使用遞歸:

  1. 定義是遞歸的(Fact階乘函數(shù)、Fib二階的Fibonacci數(shù)列)
  2. 數(shù)據(jù)結(jié)構(gòu)是遞歸的(依次輸出鏈表中各個節(jié)點的遞歸)
  3. 問題的解法是遞歸(Hanoi問題)

遞歸過程與遞歸工作棧 暫時沒時間寫,有時間補(bǔ)上
遞歸算法的效率分析 暫時沒時間寫,有時間不上

將遞歸轉(zhuǎn)換為非遞歸方法

  • 遞歸的優(yōu)點:結(jié)構(gòu)清晰,程序易讀;
  • 遞歸的缺點:需要系統(tǒng)提供隱式棧這種結(jié)構(gòu)來實現(xiàn),占用內(nèi)存空間較多,運(yùn)行效率低。

遞歸的目的:提高算法的時間、空間性能,所以使用遞歸算法來分析問題,用非遞歸算法來解決問題;

將遞歸換為非遞歸的方法(兩種)

循環(huán)方法
1.單項遞歸
2.尾遞歸
利用棧消除遞歸

4.隊列 Queue

定義:是一種先進(jìn)先出(First In First Out)FIFO的線性表。
存儲表示:順序表示和鏈?zhǔn)奖硎荆?

隊列的出和入

順序存儲結(jié)構(gòu)
一組地址連續(xù)的存儲單元依次存放隊列頭到隊列尾的元素;
結(jié)構(gòu):兩個指針隊頭front和隊尾rear;
這種存儲會出現(xiàn)假溢出問題;

隊列的存儲

循環(huán)隊列
為了解決假溢出現(xiàn)象,將順序隊列臆造為一個環(huán)狀的空間,稱之為循環(huán)隊列。

循環(huán)隊列

隊頭、尾指針的環(huán)狀增1的操作用“模”運(yùn)算來實現(xiàn)。

區(qū)別隊滿和隊空的方法:

  1. 少用一個空間,隊列有m個空間,當(dāng)有m-1個元素時,就判定隊列已滿。
  • 隊空:Q.font = Q.rear
  • 隊滿:(Q.rear+1) % MAXQSIZE = Q.font
  1. 設(shè)置標(biāo)志位

鏈隊
鏈表表示的隊列即鏈隊;

隊列的應(yīng)用
打印二項式系數(shù)表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,462評論 2 378

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