title: 括号匹配
栈的简单应用之进制转换、括号匹配
大家好,这篇博客介绍一下栈的简单应用之进制转换、括号匹配,用两个函数实现的,当中用到了栈的初始化(InitStack)、出栈(Pop)、入栈(Push)操作,需要了解的可以去我的博客小白莲的数据结构day06查看这些操作,这里不再赘述。好啊,废话少说,直接往下看看这两个简单操作吧。
1.进制转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
void conversion(ElemType N,int n) { int x = N; Stack stack; InitStack(stack); ElemType data; while (N) { if (Push(stack, N % n)) N /= n; else printf("入栈操作失败!\n"); } printf("%d转换为%d进制为: ", x, n);
while (stack.top != stack.base) { if(Pop(stack, data)) printf("%d", data); else printf("入栈操作失败!\n"); } printf("\n"); }
|
1.1对进制转换的测试
1 2 3 4 5 6
| int main() {
conversion(1348,8);
return 0; }
|
1.2对进制转换的测试结果

2.括号匹配
这里对括号的匹配只包含了“[ ]” “()”这两种括号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
void match_bracket() { char s[100]; gets_s(s);
Stack stack; InitStack(stack); ElemType e; bool flag = false;
for (int i = 0; i < strlen(s); i++) { if (s[i] == '(' || s[i] == '[') { Push(stack, s[i]=='('?1:0); } else if (s[i] == ')' || s[i] == ']') { if (stack.top == stack.base) { Push(stack, -1); break; } Pop(stack, e); if (e != (s[i] == ')' ? 1 : 0)) { Push(stack, -1); break; } } } if (stack.top == stack.base) flag = true; if (flag) printf("括号能正常匹配!\n"); else printf("括号不能正常匹配!\n"); }
|
2.1对括号匹配的测试
1 2 3 4 5 6 7 8 9 10
| int main() {
while (1) { match_bracket(); }
return 0; }
|
2.1对括号匹配的测试结果
