簡體   English   中英

C ++中基於鏈接的堆棧

[英]Link based stack in C++

我一直在嘗試找出如何創建基於鏈接的堆棧,並遇到了一段我不太了解的代碼片段。

int pop()
{
    // If the stack is empty return a sentinel value
    if (isEmpty())
        return -999;

    // Get the data to return from the top of the stack
    int intReturn = top->info;

    // Create a pointer to keep track of the top node
    IntSLLNode *temp;
    temp = top;

    // Move the top of the stack to the next element
    // or null if there is no next element
    top = top->next;

    // Free up memory
    delete temp;

    // Send back the data
    return intReturn;
    ...
}

我了解直到top=top->next

1)如果我們從未真正使用過臨時節點,那么創建臨時節點有什么意義呢?

2)通過將頂部指針移動到下一個節點,我們是否要刪除前一個頂部節點? 這樣彈出嗎?

謝謝

1) temp是必需的,因為在top移動之后我們將需要top的舊值以釋放正在彈出的節點的內存。 我們必須先移到top然后釋放內存。 如果我們嘗試用另一種方法(釋放內存,然后移到top )來執行此操作,那么我們將不得不使用一個臨時變量來保存top->next (在這種情況下會丟失)。 無論哪種情況,都無法避免使用臨時變量。

2)移動top導致將第二個節點提升為頂部節點,並從堆棧中刪除頂部節點(這是我們對pop期望的一半-另一半正在返回popped節點的值)。 直到delete tempdelete temp該節點,這就是我們需要保留它的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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