平衡符號用於編譯器檢查程式的語法錯誤,每乙個
右括號( }、]、))
必然對應其相應的
左括號(eg: [()] 合法;[(])不合法)
演算法描述:
·做乙個空棧,讀入字元直到檔案尾;演算法分析:·如果字元是乙個左括號則將其壓入棧,
如果字元是乙個右括號:如此時棧空,報錯;否則,彈出棧頂元素,若與相應的左括號不匹配,報錯;
·到檔案尾,棧非空則報錯;
時間複雜度為o(n),且對於輸入進行一趟檢驗,是聯機的;
**實現
(只滿足 {} 、 、()):
void balancemark(string s)
mark.pop();
break;
case ']':
if (mark.size() == 0 || mark.top() != '[')
mark.pop();
break;
case '}':
if (mark.size() == 0 || mark.top() != '";
return;
}mark.pop();
break;
default:
break;
} }if (mark.size() != 0)
return;
} cout << "get a balance mark";
}
加上main函式可以加以實驗:
int main()
棧的應用 平衡符號
僅對圓括號 方括號 花括號 進行校驗 演算法 建立乙個空棧,讀入字元至檔案尾,如果是 開放字元將其壓棧,如果是閉合字元,此時棧空則 報錯,否則從棧中彈出乙個字元,如果不是對應的開 放字元,則報錯,在檔案尾棧非空報錯。include include struct node typedef struct...
基於棧的平衡符號匹配問題
棧的實現 基於vector順序容器的棧的實現 ifndef weiwei h define weiwei h includeusing std vector templateclass stack void push const object val object pop object top bo...
棧的應用 左右符號匹配
在編譯器中,都有這麼乙個左右符號匹配的功能,這裡通過棧來模擬實現這一功能 這裡採用了 復用的方法,即使用了linkstack鏈棧,詳見 linkstack鏈棧 main.c include include include linkstack.h 判斷是否為左符號 int isleft char c ...