[英]Implementing stack with two queues and a finite queue size
跟進此問題: 使用兩個隊列實現堆棧
我正在尋求實現答案的A版(高效推送),但是我還需要考慮隊列的大小,即我無法“永遠排隊”,但在某些時候,隊列將耗盡空間。
我需要確保所有推送操作都以恆定的時間復雜度完成。
我將如何繼續執行呢? 一旦隊列滿就復制該隊列顯然會導致O(n)的復雜性。
我可以創建一個新的空隊列,然后開始推送到該隊列,但是它需要表示一個堆棧,並在彈出操作的某個位置,它將到達新隊列的末尾,並且不知道其余項在舊隊列。
同意確定要排隊的項目數的上限。 同樣的事情也適用於Stack。 我們有一個“堆棧溢出”異常-可能在運行時在@ push操作中發生,以處理這種情況。 同樣,彈出操作有一個“堆棧下溢”異常。
檢查取決於DataStructure的大小(可以存儲的項目數)。 在這種情況下,它將是隊列的大小。 讓我們將其稱為“ n”。
帶有異常的偽代碼如下所示:
n = QUEUE_SIZE
def push()
if len(queue1) >= n:
print 'Stack Overflow'
return
else:
#enqueue in queue1
def pop()
if len(queue1) == 0:
print 'Stack Underflow'
return
#while size of queue1 is bigger than 1, pipe dequeued items from queue1 into queue2
#dequeue and return the last item of queue1, then switch the names of queue1 and queue2
在這里,在任何時間點,您的Stack DataStructure(使用隊列實現)將具有最多'n'個項目,並且所有推送操作均為O(1)。
它還會引發“堆棧溢出”和“堆棧溢出”異常
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.