/********************************************
题目:假设表达式中允许包含三种括号,圆括号,方括号和大括号,编写一个算法判断表达式中的括号是不是匹配 实践:狼影 时间: include <> # include <> # define size 256
//定义节点 typedef struct {
char ex[size]; int top;
}STACK;
//函数声明
STACK *init_stack(void); bool is_match(char *exp);
bool pop_stack(STACK *stack, char *ch); void push_stack(STACK *stack, char e); main() {
char exp[256];
printf(\输入表达式\\n\ scanf(\
}
//栈的初始化
STACK *init_stack(void) { }
//判断是不是匹配 bool is_match(char *exp) {
int i = 0;
STACK *stack = (STACK *)malloc(sizeof(STACK)); if(NULL == stack) { }
stack->top = -1; return stack;
printf(\内存分配失败\\n\ exit(-1); if(is_match(exp)) { } else { }
printf(\此表达式不匹配\\n\ printf(\此表达式匹配\\n\
char ch; STACK *stack; stack = init_stack();
while(exp[i] != '\\0') {
if('('==exp[i] || '['==exp[i] || '{'==exp[i]) { }
else if(')'==exp[i] || ']'==exp[i] || '}'==exp[i]) {
//线面是匹配的三种情况, switch(exp[i]) {
push_stack(stack, exp[i]);
case ')':
if(pop_stack(stack, &ch)) { } else
return false; if(ch != '(')
return false;
break;
case ']':
if(pop_stack(stack, &ch))
}
}
}
}
{ } else
return false; if(ch != '[')
return false;
break;
case '}':
if(pop_stack(stack, &ch)) { } else
return false; if(ch != '{')
return false;
break;
default:break;
i++;
if(-1 == stack->top)
return true;
else
return false;
//入栈的操作
void push_stack(STACK *stack, char e) { }
//出栈的操作
bool pop_stack(STACK *stack, char *ch) { }
/*********************************************** 输入表达式
(((1+2+3*5{{{[[[234]]]}}}))) 此表达式匹配
Press any key to continue
**********************************************/
if(-1 == stack->top)
return false; stack->top++;
stack->ex[stack->top] = e;
else { }
return true;
*ch = stack->ex[stack->top]; stack->top--;