前言
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的設計者認為,“大家都是成年人了”~