堆疊
堆疊(stack
)是一種後進先出(
lifo
)的線性資料結構,對堆疊的插入和刪除操作都只能在棧頂(
top)進行。
棧和佇列主要用於計算過程中儲存臨時資料。 堆疊
adt(抽象資料型別)一般提供以下介面:
stack()
建立堆疊
push(item)
向棧頂插入項
pop()
返回棧頂的項,並從堆疊中刪除該項
clear()
清空堆疊
empty()
判斷堆疊是否為空
size()
返回堆疊中項的個數
top()
返回棧頂的項
堆疊操作的示意圖如下:
python實現
使用python的內建型別list列表,可以很方便地實現堆疊adt:
#!/usr/bin/envpython
# -*- coding: utf-8-*-
class stack:
def __init__(self):
self.items =
#入棧def push(self, 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]
4.應用
十進位制轉二進位制
是乙個應用堆疊的典型案例。十進位制轉二進位制 採用「除2取餘,逆序排列」的方法,如圖所示:
借助stack
類,可以很方便地實現上述轉換演算法:
#!/usr/bin/envpython
# -*- coding: utf-8-*-
#建立棧
defdivideby2(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))
執行結果:
$ python dec2bin.py
101010
原文參考:
用Python 學習資料結構與演算法 三 選擇排序
選擇排序是將陣列從開始按順序找出相應位置上合適的元素,到達n位置時則不用再尋找該位置元素,因為這時所有元素已經就位。上 coding utf 8 defselectsort array i 0 只用選n 1個數進行排序,因為選到最後第n個數是不用排序的 for x in range 0,len ar...
用Python 學習資料結構與演算法 四 歸併排序
歸併排序主要的過程是將大陣列拆分為小陣列,再將小陣列問題解決,然後歸併處理組成新無問題的陣列再次歸併。上 coding utf 8 歸併運算 array 陣列 lpos 左座標 mpos 中座標 rpos 右座標 defmerge array,lpos,mpos,rpos 切片左右陣列 leftar...
用Python 學習資料結構與演算法 六 最大子串行
實現最大子串行,其主要需要注意的是 連續 一詞。然而我在檢視 演算法導論 書本時,發現 本身無問題,同樣的遞迴 在c 中是可以正常執行的,在python當中卻無法正常執行,需要新增哨兵才可以正常的使用。注 本身無問題 上 coding utf 8 class infotype def init se...