首先佇列是「先進先出」原則,棧是「先進後出」的原則
接下來設計兩個棧,分為別positive和negative
當最初有元素要入佇列的時候,我們讓其進入positive棧中
如果需要出佇列了,那麼我們可以採取將positive中除了最底層的所有元素依次pop出來放進negative中
然後再將positive中剩下的乙個元素彈出,即為最初入佇列元素了
最後需要的時候再將negative中的元素依次放回positive中
class
stack
:def
__init__
(self)
: self.memory =
defpush
(self, element)
:def
pop(self)
:return self.memory.pop()if
(len
(self.memory)!=0
)else
'none'
defstack_test()
: a = stack(
) stack.push(a,1)
stack.push(a,2)
b = stack(
) stack.push(b,3)
print
(stack.pop(a)
) stack.push(a,3)
print
(a.memory)
class
queue
:def
__init__
(self)
: self.positive = stack(
) self.negative = stack(
)def
display
(self)
:if self.positive.memory:
print
(self.positive.memory)
else
:while
len(self.negative.memory)!=0
: pop_element = stack.pop(self.negative)
stack.push(self.positive,pop_element)
print
(self.positive.memory)
defpress
(self,element)
:if self.positive.memory:
stack.push(self.positive,element)
else
:while
len(self.negative.memory)!=0
: pop_element = stack.pop(self.negative)
stack.push(self.positive,pop_element)
stack.push(self.positive, element)
defout
(self):if
(len
(self.positive.memory)==0
)and
(len
(self.negative.memory)==0
):return
none
iflen
(self.positive.memory)==1
:return stack.pop(self.positive)
else
:while
len(self.positive.memory)!=1
: pop_element = stack.pop(self.positive)
stack.push(self.negative,pop_element)
return stack.pop(self.positive)
defqueue_test()
: a = queue(
) queue.press(a,1)
queue.press(a,2)
a.display(
)print
(queue.out(a)
) a.display(
) queue.press(a,2)
a.display(
)if __name__ ==
'__main__'
:# stack_test()
queue_test(
)
執行效果:
[1,
2]1[
2][2
,2]
劍指Offer 9 用兩個棧實現佇列
準備兩個棧,稱為a和b,加元素的時候加進a,刪除元素時要考慮情況 假如a中已經有了幾個元素,而b中沒有元素 此時想要刪除元素並且滿足佇列的特性,只需要把a中的元素逐個彈出壓入到bb.push a.pop 直到a為空 此時b中元素的順序和之前的a就是反過來的,此時彈出b的元素即可 如果要刪除資料時,b...
劍指offer 9 用兩個棧實現佇列
用兩個棧實現乙個佇列。佇列的宣告如下,尾部插入整數和在佇列頭部刪除整數的功能。若佇列中沒有元素,deletehead 操作返回 1 leetcode 示例 1 輸入 3 輸出 null,null,3,1 示例 2 輸入 5 2 輸出 null,1,null,null,5,2 題目理解 輸入 cque...
劍指 9 用兩個棧實現佇列
題目描述 演算法分析 stack1只用來插入元素,stack2只用來刪除元素 每次刪除元素時,若stack2為空,則將stack1中所有元素依次壓入stack2中 否則,直接從stack2中刪除站頂元素。提交 class solution int pop result stack2.top stac...