思想: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。現在小明想讓你構造出原始的佇列,你能做到嗎?輸入描述 第一行乙個...