用python學習資料結構與演算法 堆疊

2021-07-26 21:01:01 字數 1807 閱讀 4923

堆疊

堆疊(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...