python實現(xiàn)堆棧數(shù)據(jù)結(jié)構(gòu)及其基本方法

棧(stack)又名堆棧斋配,它是一種運算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運算灌闺。這一端被稱為棧頂艰争,相對地,把另一端稱為棧底桂对。向一個棧插入新元素又稱作進(jìn)棧甩卓、入棧或壓棧蕉斜,它是把新元素放到棧頂元素的上面逾柿,使之成為新的棧頂元素;從一個棧刪除元素又稱作出椪耍或退棧机错,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素父腕。

椚醴耍可以用來在函數(shù)調(diào)用的時候存儲斷點,做遞歸時要用到棧璧亮,其基本模型如下:

image

在python中已經(jīng)有實現(xiàn)棧的數(shù)據(jù)結(jié)構(gòu)萧诫,在queue庫中的LifoQueue就是一種堆棧斥难,堆棧的實現(xiàn)也是線性表,在Python的queue中是通過列表這一線性順序表實現(xiàn)的帘饶,其LifoQueue源碼如下:

class LifoQueue(Queue):
    '''Variant of Queue that retrieves most recently added entries first.'''

    def _init(self, maxsize):
        self.queue = []

    def _qsize(self):
        return len(self.queue)

    def _put(self, item):
        self.queue.append(item)

    def _get(self):
        return self.queue.pop()

下面我們實現(xiàn)一個自定義的堆棧結(jié)構(gòu)哑诊,首先定義一個堆棧類:

class Stack:
    """堆棧結(jié)構(gòu)類"""
    def __init__(self):
        self._item = []

接著我們實現(xiàn)基本的方法:添加元素、彈出棧頂及刻、返回棧頂镀裤、判斷是否為空、返回堆棧大小提茁。

class Stack:
    """堆棧結(jié)構(gòu)類"""
    def __init__(self):
        self._item = []

    def push(self, item):
        """
        添加新元素
        :param item:
        :return:
        """
        self._item.append(item)

    @property
    def size(self):
        """
        返回堆棧大小
        :return:
        """
        return len(self._item)

    @property
    def is_empty(self):
        """
        判斷是否為空
        :return:
        """
        return not self._item

    def pop(self):
        """
        彈出棧頂元素
        :return:
        """
        return self._item.pop()

    def peek(self):
        """
        返回棧頂元素
        :return:
        """
        return self._item[-1]

上面實現(xiàn)的只是基礎(chǔ)模型淹禾,缺少異常處理和其他相關(guān)的機(jī)制,用列表實現(xiàn)堆棧茴扁,安全性不是很高铃岔,但是如果使用鏈表使用的話一次只能按序獲取一個元素,從鏈表一端到另一端峭火,這樣安全性會更高毁习。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卖丸,隨后出現(xiàn)的幾起案子纺且,更是在濱河造成了極大的恐慌,老刑警劉巖稍浆,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件载碌,死亡現(xiàn)場離奇詭異,居然都是意外死亡衅枫,警方通過查閱死者的電腦和手機(jī)嫁艇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弦撩,“玉大人步咪,你說我怎么就攤上這事∫媛ィ” “怎么了猾漫?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長感凤。 經(jīng)常有香客問我悯周,道長,這世上最難降的妖魔是什么俊扭? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任队橙,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捐康。我一直安慰自己仇矾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布解总。 她就那樣靜靜地躺著贮匕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪花枫。 梳的紋絲不亂的頭發(fā)上刻盐,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音劳翰,去河邊找鬼敦锌。 笑死,一個胖子當(dāng)著我的面吹牛佳簸,可吹牛的內(nèi)容都是我干的乙墙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼生均,長吁一口氣:“原來是場噩夢啊……” “哼听想!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起马胧,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤汉买,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佩脊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛙粘,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年威彰,在試婚紗的時候發(fā)現(xiàn)自己被綠了组题。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡抱冷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梢褐,到底是詐尸還是另有隱情旺遮,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布盈咳,位于F島的核電站耿眉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鱼响。R本人自食惡果不足惜鸣剪,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筐骇,春花似錦债鸡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至告唆,卻和暖如春棺弊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擒悬。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工模她, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懂牧。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓侈净,卻偏偏與公主長得像,于是被迫代替她去往敵國和親归苍。 傳聞我的和親對象是個殘疾皇子用狱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

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

  • 考取證書已經(jīng)一年多了夏伊,現(xiàn)在證書已經(jīng)注冊成功了,很感謝之前努力的自己吻氧,考證的漫漫長路溺忧,看到了成長的自己,作為一個大專...
    黑白書簽閱讀 54,758評論 48 50
  • 如盲人般舉著火把 青天白日中尋找 光與熱 那無時無刻的照耀 打在我臉上 是一個又一個呼嘯而過響亮的掌聲 透不過...
    過街的貓閱讀 705評論 14 9
  • 剛進(jìn)入暑期,各地就發(fā)生多起學(xué)生溺水事故振惰。僅6月10日當(dāng)天歌溉,就發(fā)送三起溺水事故,導(dǎo)致10人死亡骑晶,其中有4人還是剛...
    小雨點123閱讀 208評論 0 0
  • 李小婉思忖著痛垛,這么晚了,好久不聯(lián)系的林佳怎會突然發(fā)信息桶蛔。她猶猶豫豫著打開圖片匙头。映入眼簾的是在林佳的車內(nèi),神志不清的...
    深山女巫一閱讀 1,910評論 54 35