棧和佇列 劍指offer

2021-08-21 02:39:50 字數 1851 閱讀 5085

題目:定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的

min函式。

class solution:

def __init__(self):

self._elem =

def push(self, node):

def pop(self):

return self._elem.pop()

def top(self):

return self._elem[-1]

def min(self):

return min(self._elem)

題目:棧的壓入彈出序列

輸入兩個整數序列,第乙個序列表示棧的壓入順序,

請判斷第二個序列是否為該棧的彈出順序。

假設壓入棧的所有數字均不相等。

例如序列1,2,3,4,5是某棧的壓入順序,

序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,

但4,3,5,1,2就不可能是該壓棧序列的彈出序列。

(注意:這兩個序列的長度是相等的)

【思路】借用乙個輔助的棧,遍歷壓棧順序,先講第乙個放入棧中,這裡是1,然後判斷棧頂元素是不是出棧順序的第乙個元素,這裡是4,很顯然1≠4,所以我們繼續壓棧,直到相等以後開始出棧,出棧乙個元素,則將出棧順序向後移動一位,直到不相等,這樣迴圈等壓棧順序遍歷完成,如果輔助棧還不為空,說明彈出序列不是該棧的彈出順序。

舉例:入棧1,2,3,4,5

出棧4,5,3,2,1

首先1入輔助棧,此時棧頂1≠4,繼續入棧2

此時棧頂2≠4,繼續入棧3

此時棧頂3≠4,繼續入棧4

此時棧頂4=4,出棧4,彈出序列向後一位,此時為5,,輔助棧裡面是1,2,3

此時棧頂3≠5,繼續入棧5

此時棧頂5=5,出棧5,彈出序列向後一位,此時為3,,輔助棧裡面是1,2,3

….依次執行,最後輔助棧為空。如果不為空說明彈出序列不是該棧的彈出順序

'''class solution:

def ispoporder(self, pushv, popv):

if len(pushv) != len(popv):

return

if len(pushv)==0 or len(popv)==0:

return false

stack =

popindex = 0

for i in pushv:

while len(stack)!=0 and stack[-1]==popv[popindex]:

stack.pop()

popindex += 1

return stack==

題目:用兩個棧來實現乙個佇列,完成佇列的

push

和pop

操作

思路:棧:後進先出     佇列:先進先出

stacka始終做入隊處理

如果需要出隊,判斷stackb是否為空,如不為空,則直接彈出頂元素;如為空,將stacka的資料全部彈出壓入stackb,然後stackb彈出,

class solution:

def __init__(self):

self.stacka =

self.stackb =

def push(self, node):

def pop(self):

if self.stackb:

return self.stackb.pop()

else:

while self.stacka:

return self.stackb.pop()

《劍指offer》 佇列和棧

一 兩個棧實現乙個佇列 題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 用乙個棧來存,另乙個棧出。需要考慮的情況如下 class solution int pop else if stack1.size 0 出隊 res stack2.top sta...

劍指offer 佇列和棧操作

問題1 兩個棧實現佇列 class queue 出隊 int pop int temp s2.top if s2.empty s2.pop return temp private stack s1 stack s2 問題2 兩個佇列實現棧 class stack int pop int temp q...

劍指offer 棧 佇列類題目

題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 題目中有兩個棧stack1和stack2,用來模擬佇列的操作,我是想把第乙個stack1作為資料儲存,第二個stack2作為中轉。佇列的特點是先進先出,1 入隊操作,因為用stack1作為儲存,首先得判斷上...