數(shù)據(jù)結(jié)構(gòu)和算法(Python實(shí)現(xiàn))-03-棧和隊(duì)列

1舱呻、棧

1.1、棧的基本介紹

??棧(Stack)是一個項(xiàng)的有序集合悠汽。添加項(xiàng)和移除項(xiàng)都發(fā)生在同一“端”箱吕。這一端通常被稱為 ,另一端的頂部被稱為 柿冲。
??棧的 是有標(biāo)志性的茬高,因?yàn)榇鎯υ跅V懈拷? 的項(xiàng)就是棧中儲存時間最長的項(xiàng)。最新添加的項(xiàng)在移除項(xiàng)時也會第一個被移除姻采。這種排序原則有時也稱為LIFO法雅采,也就是 后進(jìn)先出 爵憎。
??棧很重要慨亲,因?yàn)樗鼈兛梢杂糜诜崔D(zhuǎn)項(xiàng)的順序。如下圖所示:

棧.png

1.2宝鼓、棧的Python實(shí)現(xiàn)

本文采用Python語言中的列表(list)這種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)棧刑棵。首先定義一個 Stack 類,類中包含 進(jìn)棧愚铡、出棧蛉签、棧是否為空、棧的大小 等基本方法沥寥,具體代碼如下:

class Stack():
    
    def __init__(self):
        self.stack = []
        
    # 進(jìn)棧
    def push(self, item):
        self.stack.append(item)
        
    # 出棧
    def pop(self):
        if self.is_empty() == True:
            return None
        else:
            return self.stack.pop()
    
    # 棧是否為空
    def is_empty(self):
        return self.stack == []
    
    # 棧的大小
    def size(self):
        return len(self.stack)

2碍舍、隊(duì)列

2.1、隊(duì)列的基本介紹

??隊(duì)列(Queue)是一系列有順序的元素的集合邑雅,新元素的加入在隊(duì)列的一端片橡,這一端叫做 隊(duì)尾 (rear),已有元素的移除發(fā)生在隊(duì)列的另一端淮野,叫做 隊(duì)首 (front)捧书。當(dāng)一個元素被加入到隊(duì)列之后,它就從隊(duì)尾開始向隊(duì)首前進(jìn)骤星,直到它成為下一個即將被移出隊(duì)列的元素经瓷。
??最新被加入的元素必須處于隊(duì)尾,在隊(duì)列停留最長時間的元素處于隊(duì)首洞难。這種原則有時候叫做 先進(jìn)先出 (FIFO, first-in first-out)舆吮,進(jìn)出隊(duì)列的過程如下圖所示:

隊(duì)列.png

2.2、隊(duì)列的Python實(shí)現(xiàn)

本文采用Python語言中的列表(list)這種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列。首先定義一個 Queue 類歪泳,類中包含 進(jìn)隊(duì)萝勤、出隊(duì)、隊(duì)列是否為空呐伞、隊(duì)列的大小 等基本方法敌卓,具體代碼如下:

class Queue():
    
    def __init__(self):
        self.queue = []
        
    # 進(jìn)隊(duì)
    def push(self, item):
        self.queue.append(item)
        
    # 出隊(duì)
    def pop(self):
        if self.is_empty() == True:
            return None
        else:
            return self.queue.pop(0)
    
    # 隊(duì)列是否為空
    def is_empty(self):
        return self.queue == []
    
    # 隊(duì)列的長度
    def size(self):
        return len(self.queue)

備注:Python中的 collections 模塊中實(shí)現(xiàn)了隊(duì)列這種數(shù)據(jù)結(jié)構(gòu),可以直接調(diào)用伶氢。

參考https://www.icourse163.org/course/PKU-1206307812

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趟径,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子癣防,更是在濱河造成了極大的恐慌蜗巧,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾盯,死亡現(xiàn)場離奇詭異幕屹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)级遭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門望拖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挫鸽,你說我怎么就攤上這事说敏。” “怎么了丢郊?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵盔沫,是天一觀的道長。 經(jīng)常有香客問我枫匾,道長架诞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任干茉,我火速辦了婚禮谴忧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘等脂。我一直安慰自己俏蛮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布上遥。 她就那樣靜靜地躺著搏屑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粉楚。 梳的紋絲不亂的頭發(fā)上辣恋,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天亮垫,我揣著相機(jī)與錄音,去河邊找鬼伟骨。 笑死饮潦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的携狭。 我是一名探鬼主播继蜡,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逛腿!你這毒婦竟也來了稀并?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤单默,失蹤者是張志新(化名)和其女友劉穎碘举,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搁廓,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡引颈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了境蜕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝙场。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汽摹,靈堂內(nèi)的尸體忽然破棺而出李丰,到底是詐尸還是另有隱情苦锨,我是刑警寧澤逼泣,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站舟舒,受9級特大地震影響拉庶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秃励,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一氏仗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夺鲜,春花似錦皆尔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至食呻,卻和暖如春流炕,著一層夾襖步出監(jiān)牢的瞬間澎现,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工每辟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剑辫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓渠欺,卻偏偏與公主長得像妹蔽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挠将,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354