国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的棧(Stack)

2020-02-22 23:01:23
字體:
來源:轉載
供稿:網友

前言

Python本身已有順序表(List、Tupple)的實現,所以這里從棧開始。

什么是棧

想象一摞被堆起來的書,這就是棧。這堆書的特點是,最后被堆進去的書,永遠在最上面。從這堆書里面取一本書出來,取哪本書最方便?肯定是最上面那本。棧這種數據結構的特點就是如此:后進先出(Last In First Out - LIFO),即最后被堆進去的數據,最先被拿出來。

棧的Python實現

棧可以用順序表方式實現,也可以用鏈表方式實現。我大Python的內建數據結構太強大,可以用list直接實現棧,簡單快捷。人生苦短,我用Python。代碼如下:

class Stack(object):  # 初始化棧為空列表  def __init__(self):    self.items = []  # 判斷棧是否為空,返回布爾值  def is_empty(self):    return self.items == []  # 返回棧頂元素  def peek(self):    return self.items[len(self.items) - 1]  # 返回棧的大小  def size(self):    return len(self.items)  # 把新的元素堆進棧里面(程序員喜歡把這個過程叫做壓棧,入棧,進棧……)  def push(self, item):    self.items.append(item)  # 把棧頂元素丟出去(程序員喜歡把這個過程叫做出棧……)  def pop(self, item):    return self.items.pop()if __name__ == __main__:  # 初始化一個棧對象  my_stack = Stack()  # 把'h'丟進棧里  my_stack.push('h')  # 把'a'丟進棧里  my_stack.push('a')  # 看一下棧的大小(有幾個元素)  print my_stack.size()  # 打印棧頂元素  print my_stack.peek()  # 把棧頂元素丟出去,并打印出來  print my_stack.pop()  # 再看一下棧頂元素是誰  print my_stack.peek()  # 這個時候棧的大小是多少?  print my_stack.size()  # 再丟一個棧頂元素  print my_stack.pop()  # 看一下棧的大小  print my_stack.size  # 棧是不是空了?  print my_stack.is_empty()  # 哇~真好吃~  print 'Yummy~'

Tips:

看完上面的代碼,聰明的同學一定知道了,Python里面實現棧,就是把list包裝成一個類,再添加一些方法作為棧的基本操作。其他的數據結構在Python中也是以類似的方式實現的。
那么,這里有一些有的沒的要說一下~

如果希望items[]是Stack類私有的屬性,這樣做就好了:

def __init__(self):  self.__items = []

沒錯,就是在items前面加兩個下劃線__,在Python中,類的私有成員就是這樣定義噠~

如果希望限定Stack類的成員只有items,不要其他的怪蜀黍亂加成員,那么這樣做就好了:

class Stack(object):  __slots__ = ('__items')  def __init__(self):    self.__items = []

這樣就安全多啦~

Python并沒有Java里的public/private/protected這樣的修飾符,因為Python的設計者認為,“大家都是成年人了”~

總結

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仲巴县| 绥芬河市| 虹口区| 临夏市| 宜君县| 安龙县| 格尔木市| 武宁县| 南安市| 古丈县| 新密市| 建昌县| 车致| 郴州市| 忻州市| 紫阳县| 准格尔旗| 安顺市| 黔南| 三门县| 苏州市| 山阳县| 贺兰县| 堆龙德庆县| 武功县| 集安市| 女性| 习水县| 新乡县| 建阳市| 富蕴县| 枣阳市| 密山市| 尼勒克县| 聊城市| 乃东县| 鹤庆县| 榆社县| 丰宁| 竹山县| 怀远县|