栈应用——平衡符号

来源:互联网 发布:linux cdn服务器搭建 编辑:程序博客网 时间:2024/05/17 08:02

平衡符号用于编译器检查程序的语法错误,每一个右括号( }、]、))必然对应其相应的左括号(eg: [()] 合法;[(])不合法)


算法描述:

·做一个空栈,读入字符直到文件尾;

·如果字符是一个左括号则将其压入栈,

 如果字符是一个右括号:如此时栈空,报错;否则,弹出栈顶元素,若与相应的左括号不匹配,报错;

·到文件尾,栈非空则报错;


算法分析:

时间复杂度为O(N),且对于输入进行一趟检验,是联机的;


代码实现 (只满足 {} 、[] 、())


void balanceMark(string s){stack mark;for (size_t i = 0; i < s.length(); ++i) {switch (s[i]) {case '{':mark.push('{');break;case '[':mark.push('[');break;case '(':mark.push('(');break;case ')':if (mark.size() == 0 || mark.top() != '(') {cout<<"error with ()";return ;}mark.pop();break;case ']':if (mark.size() == 0 || mark.top() != '[') {cout << "error with []";return;}mark.pop();break;case '}':if (mark.size() == 0 || mark.top() != '{') {cout << "error with {}";return;}mark.pop();break;default:break;}}if (mark.size() != 0) {cout << "error with: ";while (!mark.empty()) {cout << mark.top();mark.pop();}return;}cout << "get a balance mark";}

加上main函数可以加以实验:
int main(){string s;char c;while (cin >> c) s.push_back(c);balanceMark(s);system("pause");}



原创粉丝点击