我有三個堆疊。第一個里面有元素。其他的只是為了幫助。我如何只用推、彈、偷和空運算子對堆疊進行排序?這就是我所做的。
def sort(stack1, stack2, stack3)。
while not stack1.empty()。
temp = stack1.pop()
while not stack2.empty() and stack2.peek() > temp:
stack1.push(stack2.pop())
stack2.push(temp)
return stack1
uj5u.com熱心網友回復:
看來你沒有使用stack3,它的作用是為stack2中大于temp的專案提供一個臨時的持有人。另外,不要修改stack1,除了它只是包含了未排序的源專案外,你還在向它推送然后彈出,這將是一個無盡的回圈。
為了給您提供指導,以下是堆疊的作用:
stack1- 包含原始資料。就這樣,沒有別的了。你應該只是彈出它的專案,直到空為止。當然,在獲取每一個專案時,要確保你的其他堆疊保持一個排序的專案集。stack2- 包含排序后的資料。這是你應該回傳的一個。強制要求這里的專案保持排序。stack3- 包含排序的資料。stack3- 臨時存放stack2中已排序的專案。假設stack2有1->4->5項。對于我們來說,要插入3同時保持順序,我們不能只是把它推到上面,因為這將使它成為1->4->5->3。相反,我們將繼續彈出已經排序的資料,并把它暫時放到stack3,直到我們已經可以插入3的時候。因此,stack2將是1,而stack3將是5->4(這也將是按照順序,尤其是降序)。一旦我們推送了3,使得stack2成為1->3,我們就可以將我們暫時存放在這里的專案回傳到stack3,從而使它回到1->3->4->5。
class Stack(list)。
def empty(self)。
return len(self) == 0
def push(self, value)。
self.append(value)
def peek(self) 。
returnself[-1]
def sort(stack1, stack2, stack3) 。
while not stack1.empty()。
temp = stack1.pop()
while not stack2.empty() and stack2.peek() > temp:
stack3.push(stack2.pop())
stack2.push(temp)
while not stack3.empull():
stack2.push(stack3.pop())
return stack2
print(sort(Stack([1,5, 4,2,3]), Stack(), Stack())
print(sort(Stack([5,4, 3,1,2]), Stack(), Stack())
print(sort(Stack([1,2, 3,5,4] ), Stack(), Stack())
輸出:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308820.html
標籤:
上一篇:MySQL MHA 運行狀態監控
下一篇:以下關于O(n)的說法是否正確?
