劍指offer(9) 用兩個棧實現佇列

2021-10-02 10:31:26 字數 2421 閱讀 3002

首先佇列是「先進先出」原則,棧是「先進後出」的原則

接下來設計兩個棧,分為別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...