栈的应用之括号匹配code_legend
2014-06-03 13:47
197 查看
/*
(1)问题:假设表达式中有三种括号:圆括号,方括号,大括号。设计一个算法判断表达式
中的括号是否匹配。
(2)思想:设置一个stack ,扫描表达式exp,遇到(,[,或{,则将其入栈;
遇到)时,判断栈顶是否为(,如果是,则出栈,否则不匹配;
同理对于[ 以及 { .并且最终栈为空。
*/
#include <iostream>
using namespace std;
#define Maxsize 20
/*
input : 表达式数组:
output: 匹配返回1,否则返回0.
*/
int match(char * expression ,int length){
char stack[Maxsize];
int top=-1;/*初始化栈顶*/
int state=1;
for(int i=0;i<length && state;i++){
if( ( '('==expression[i]) || ( '['==expression[i]) || ('{'==expression[i]) ){
top++;
stack[top]=expression[i];/*进栈*/
}
else if(')'==expression[i]){
if('('==stack[top]){
top--;/*出栈*/
}
else state=0;
}
else if(']'==expression[i]){
if('['==stack[top]){
top--;
}
else state=0;
}
else if('}'==expression[i]){
if('{'==stack[top]){
top--;
}
else state=0;
}
}
if(top>=0) state=0;
/*栈非空*/
return state;
}
int main()
{
char expression1[]={'[',']','{','}','\0'};
int length1=sizeof(expression1)/(sizeof(expression1[0]));
char expression2[]={'[',']','(','{',')','}','\0'};
/*显然在表达式中不匹配*/
int length2=sizeof(expression2)/sizeof(expression2[0]);
cout<<"expression1 bracket match is "<<match(expression1,length1)<<endl;
cout<<"expression2 bracket match is "<<match(expression2,length2)<<endl;
cout << "Hello world!" << endl;
return 0;
}
(1)问题:假设表达式中有三种括号:圆括号,方括号,大括号。设计一个算法判断表达式
中的括号是否匹配。
(2)思想:设置一个stack ,扫描表达式exp,遇到(,[,或{,则将其入栈;
遇到)时,判断栈顶是否为(,如果是,则出栈,否则不匹配;
同理对于[ 以及 { .并且最终栈为空。
*/
#include <iostream>
using namespace std;
#define Maxsize 20
/*
input : 表达式数组:
output: 匹配返回1,否则返回0.
*/
int match(char * expression ,int length){
char stack[Maxsize];
int top=-1;/*初始化栈顶*/
int state=1;
for(int i=0;i<length && state;i++){
if( ( '('==expression[i]) || ( '['==expression[i]) || ('{'==expression[i]) ){
top++;
stack[top]=expression[i];/*进栈*/
}
else if(')'==expression[i]){
if('('==stack[top]){
top--;/*出栈*/
}
else state=0;
}
else if(']'==expression[i]){
if('['==stack[top]){
top--;
}
else state=0;
}
else if('}'==expression[i]){
if('{'==stack[top]){
top--;
}
else state=0;
}
}
if(top>=0) state=0;
/*栈非空*/
return state;
}
int main()
{
char expression1[]={'[',']','{','}','\0'};
int length1=sizeof(expression1)/(sizeof(expression1[0]));
char expression2[]={'[',']','(','{',')','}','\0'};
/*显然在表达式中不匹配*/
int length2=sizeof(expression2)/sizeof(expression2[0]);
cout<<"expression1 bracket match is "<<match(expression1,length1)<<endl;
cout<<"expression2 bracket match is "<<match(expression2,length2)<<endl;
cout << "Hello world!" << endl;
return 0;
}
相关文章推荐
- 括号匹配(栈的应用code)
- 栈的应用之括号匹配
- 栈的简单应用(数制转换、括号匹配检验、行编辑、迷宫求解)
- 3.2栈的应用举例----数制转换、括号匹配及行编辑
- 括号匹配问题 栈的应用 C语言实现
- 括号匹配——栈的基础应用1
- 栈和队列应用之括号匹配
- 数据结构之 栈的应用 括号匹配
- 堆栈应用括号匹配实验
- 简单括号匹配code
- 第三章:顺序栈及其应用之二---括号匹配
- stack应用 POJ 2929&3704 括号匹配
- 数据结构应用-----------括号匹配的检验
- 栈应用--括号匹配的检验
- 栈的应用2:检查括号匹配
- (学习笔记)C++括号匹配----栈的应用
- 数据结构之SeqStack---堆栈应用---括号匹配问题
- 数据结构题典021:栈的应用——括号匹配的检验(C++)
- 堆栈数据结构应用之括号匹配检查(算法3.2.2)
- COJ 1065括号匹配:栈的简单应用