牛客網 棧與佇列(python實現)

2021-10-21 03:17:49 字數 2919 閱讀 6780

思想:push的時候正常, pop的時候,我們先把棧1的元素全部pop到棧2中, 然後棧2中pop出頂端的元素,最後再把棧2剩餘的元素pop到棧1中去。

class

solution

:def

__init__

(self)

: self.stack1 =

self.stack2 =

defpush

(self, node)

:def

pop(self)

:while

(self.stack1):)

) res = self.stack2.pop(

)while

(self.stack2):)

)return res

思想:入佇列的時候,直接入佇列1;出佇列的時候,一直pop(0)到佇列2中,直到佇列1中只有乙個。然後交換佇列1和佇列2。

class

stock

:def

__init__

(self)

: self.queuea=

self.queueb=

defpush

(self, node)

:def

pop(self):if

len(self.queuea)==0

:return

none

while

len(self.queuea)!=1

:0))

self.queuea,self.queueb=self.queueb,self.queuea #交換是為了下一次的pop

return self.queueb.pop(

)

思想:使用乙個字典儲存左右括號(根據右括號能夠查詢到左括號), 然後遍歷字串。如果這個棧存在元素,或者字元在字典中,然後判斷棧的頂端是不是等於字典中的那個值,如果是則棧頂出棧。如果不是則直接returnfalse。如果棧是空的,或者在字典中查詢不到(也就是左括號),則進行入棧。最終如果棧中還有元素則返回false,如果不存在了則返回true。

class

solution

:def

isvalid

(self , s )

: my_dict =':

' stack =

list()

for i in s:

if stack and i in my_dict:

if stack[-1

]== my_dict[i]

: stack.pop(

)else

:return

false

else

:return

not stack

實現乙個特殊功能的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操作。

思路: 使用兩個棧來實現: stack_min 和my_satck兩個棧, my_satck正常進棧和出棧, 而stack_min用來儲存與my_satck中對應位置的最小值。

過程:開始的時候兩個分別進棧乙個元素,當再次進棧的時候,my_satck正常進棧,而stack_min要看看這個元素是否小於棧頂的元素,如果小於棧頂元素則進棧,如果大於棧頂元素則說明最小的還是棧頂的元素,則棧頂元素再次進棧。對於出棧的時候,兩個棧同時出棧即可。

class

solution

:def

__init__

(self)

: self.my_stack =

# 正常棧

self.stack_min =

# 最小棧

defpush

(self, num)

:# 如果是第一次入棧則直接賦值

iflen

(self.my_stack)==0

:else

:# 正常棧入棧

if self.stack_min[-1

]> num:

# 如果最小棧棧頂元素比增加這個大,需要增加新元素

else

:# 如果不是則,將棧頂元素重複加入-1

])defpop

(self)

: num = self.my_stack.pop(

) self.stack_min.pop(

)return num

defget_min

(self)

:return self.stack_min[-1

]def

getminstack

(self , op )

:# 遍歷二維陣列

res =

for i in op:

if i[0]

==1: self.push(i[1]

)if i[0]

==2: self.pop(

)if i[0]

==3:)

)return res

如果遇到數字,直接將該數字輸出到字尾表示式

如果遇到左括號,入棧;

如果遇到右括號,不斷輸出棧頂元素,直至遇到左括號(左括號出棧,但不輸出);

如果遇到其他運算子,不斷去除所有運算優先順序大於等於當前運算子的運算子,輸出。最後,新的符號入棧;

把棧中剩下的符號依次輸出,表示式轉換結束。

請寫乙個整數計算器,支援加減乘三種運算和括號。

思路: 先將中綴表示式轉換成字尾表示式,然後根據字尾表示式進行計算。

牛客網刷題 用兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。棧 先進後出 佇列 先進先出 push 1,2,3 pop 3,2,1 因為棧跟佇列出入的順序是相反的,所以我們可以借助兩個棧解決問題,stack1負責儲存push的資料,stack2負責在pop操作的時候,將stat...

棧與佇列 python實現

棧 class stack object def init self self.items def enstack self,item def destack self self.items.pop 1 def isempty self return self.items def clear sel...

牛客網答題筆記 構造佇列

小明同學把1到n這n個數字按照一定的順序放入了乙個佇列q中。現在他對佇列q執行了如下程式 while q.empty 佇列不空,執行迴圈 做取出隊頭的值操作的時候,並不彈出當前隊頭。小明同學發現,這段程式恰好按順序輸出了1,2,3,n。現在小明想讓你構造出原始的佇列,你能做到嗎?輸入描述 第一行乙個...