簡體   English   中英

用兩個隊列和一個有限的隊列大小實現堆棧

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM