首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 棧隊列回文判斷:修改代碼後陷入死循環的原因與修復

     編輯:程式設計綜合問答

初學 C++ 時實現「利用棧與隊列判斷回文」是經典練習。原帖代碼在比較出棧與出隊元素時,因未在循環內更新判斷條件變量 e,導致 while(e==0) 永遠為真,陷入死循環。

錯誤代碼片段

e = S.empty();
while (e == 0) {          // e 永不變化
    p = S.pop();
    d = Q.dequeue();
    if (p != d) break;
    // 缺少 e = S.empty();
}

修正後代碼

e = S.empty();
while (e == 0) {
    p = S.pop();
    d = Q.dequeue();
    if (p != d) break;
    e = S.empty();        // 每次迭代更新棧狀態
}

知識點延伸

  • 棧(LIFO)與隊列(FIFO)特性差異:回文判斷利用兩者出序列相反/相同的特性。
  • 內存洩漏風險:原代碼 pop()/dequeue() 中註釋掉的 delete 若不恢復,會導致節點內存未釋放。
  • 現代 C++ 寫法:建議改用 std::stack、std::queue 與智能指針,簡化資源管理。

調試技巧:遇到死循環優先檢查循環條件變量是否在循環體內正確更新。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved