本文目錄一覽:
Python數據結構與算法-利用列表實現棧
概念:
棧:
名稱的由來:這個名字來源於自動售貨機中用彈簧頂住的一堆盤子的隱喻。
概念:這裡提到的棧是一種抽象的數據結構
,而非空間內存分配處涉及的空間存儲的概念。但是大同小異,原理還是來自於對棧空間的理解。這裡的棧是有一系列對象組成的一個集合,這些對象的插入和刪除操作遵循後進先出(LIFO)原則。用戶可以在任意時刻向棧中插入一個對象,但只能取得或者刪除最後一個插入的對象(即所謂的棧頂)。
目的:通過列表實現棧
有些同學可能認為,是不是還有其他操作沒有完成,為什麼不能在中間插入或者其他操作,因為棧不具備這些功能,所以實現的都是棧的常規功能。
利用棧實現數據的逆置
由於LIFO協議的限制,棧可以用作一種通用的工具,用於實現一個數據序列的逆置,這一思想可以用於很多方面,例如以降序
的方式顯示一個數據集,我們可以通過先逐行讀取數據,然後壓如一個棧中,在按照從棧中彈出的順序來寫入。這個方法的實現過程如下:
python有沒有堆和棧的概念
堆與棧是C/C++語言內存管理和編譯優化時使用的。
後來JAVA通常只考慮堆,棧偶爾考慮一下。
python與C密切結合。不過大部分時間你都不需要考慮堆與棧。
因為內存超過500MB會變慢。超過2GB,幾乎不可能。
棧基本上不用考慮。不過,在遞歸時,這個短板就出來了。所以在python里,遞歸層次太多,要改用堆棧,而不能用遞歸。
Python語言如何實現包含min函數的棧
僅供參考
# coding=utf8
”’
題目:定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的min函數。
在該棧中,調用min、push及pop的時間複雜度都是O(1)。
”’
class Stack():
def __init__(self):
self.main_stack = []
# 輔助棧,每次次最小的元素壓入輔助棧
self.assist_stack = []
# 記錄棧中的最小元素
self._min = None
def min(self):
return self._min
def push(self, data):
self.main_stack.append(data)
if self._min is None:
self._min = data
else:
if data self._min:
self._min = data
# 將最小的元素壓入輔助棧
self.assist_stack.append(self._min)
def pop(self):
if len(self.main_stack) == 0:
raise Exception(‘no data’)
elif len(self.main_stack) == 1:
self.assist_stack.pop()
self._min = None
return self.main_stack.pop()
else:
self.assist_stack.pop()
self._min = self.assist_stack[-1]
return self.main_stack.pop()
if __name__ == ‘__main__’:
s = Stack()
s.push(3)
s.push(4)
s.push(2)
s.push(1)
print s.min()
s.pop()
s.pop()
print s.min()
s.pop()
print s.min()
s.pop()
print s.min()
s.pop()
python中的堆棧什麼意思
堆棧是一種執行“後進先出”算法的數據結構。
設想有一個直徑不大、一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到
竹筒裡面,可以發現一種規律:先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以“先進後出”就是這種結構的
特點。
堆棧是計算機中最常用的一種數據結構,比如函數的調用在計算機中是用堆棧實現的。 堆棧可以用數組存儲,也可以用以後會介紹的鏈
表存儲。
堆棧就是這樣一種數據結構。它是在內存中開闢一個存儲區域,數據一個一個順序地存入(也就是“壓入——push”)這個區域之中。
有一個地址指針總指向最後一個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫
做“棧底”。數據一個一個地存入,這個過程叫做“壓棧”。在壓棧的過程中,每有一個數據壓入堆棧,就放在和前一個單元相連的後面
一個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這
個過程叫做“彈出pop”。如此就實現了後進先出的原則。
推薦學習《python教程》。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200673.html