堆棧(Stack)是一種後進先出(LIFO)的線性數據結構,對堆棧的插入和刪除操做都只能在棧頂(top)進行。python
堆棧ADT(抽象數據類型)通常提供如下接口:算法
Stack()
建立堆棧push(item)
向棧頂插入項pop()
返回棧頂的項,並從堆棧中刪除該項clear()
清空堆棧empty()
判斷堆棧是否爲空size()
返回堆棧中項的個數top()
返回棧頂的項堆棧操做的示意圖以下:markdown
使用Python的內建類型list列表,能夠很方便地實現堆棧ADT:數據結構
#!/usr/bin/env python # -*- coding: utf-8 -*- class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def clear(self): del self.items[:] def empty(self): return self.size() == 0 def size(self): return len(self.items) def top(self): return self.items[self.size()-1]
十進制轉二進制 是一個應用堆棧的典型案例。十進制轉二進制 採用「除2取餘,逆序排列」的方法,如圖所示:app
藉助Stack類,能夠很方便地實現上述轉換算法:ide
#!/usr/bin/env python # -*- coding: utf-8 -*- def divideBy2(decNumber): remstack = Stack() while decNumber > 0: rem = decNumber % 2 remstack.push(rem) decNumber = decNumber // 2 binString = "" while not remstack.empty(): binString = binString + str(remstack.pop()) return binString if __name__ == '__main__': print(divideBy2(42))
運行結果:code
$ python dec2bin.py 101010