棧應用 平衡符號

2021-08-06 05:43:51 字數 1019 閱讀 1289

平衡符號用於編譯器檢查程式的語法錯誤,每乙個

右括號( }、]、))

必然對應其相應的

左括號(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 ...