[英]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 temp
才delete temp
該節點,這就是我們需要保留它的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.