数据结构(C语言版)page49 3.22括号匹配的检验——用栈来实现。请各位品评品评。
#include <iostream>
#define stack_size 100
#define stackent 10
using namespace std;
typedef struct{
char *top;
char *base;
int stacksize;
}sqstack;
//对栈初始化
char initstack(sqstack &s){
s.base=(char *)malloc(stackent*sizeof(char));
if(!s.base)return 0;
s.top=s.base;
s.stacksize=stack_size;
return 1;
}
//插入元素
char push(sqstack &s,char e){
if(s.top-s.base>=s.stacksize)
{
s.base=(char*)realloc(s.base,(s.stacksize+stackent)*sizeof(char));
if(!s.base)exit(-2);
s.top=s.base+s.stacksize;
s.stacksize+=stackent;
}
*(++s.top)=e;
return 1;
}
//对插入的元素判断是否匹配,匹配则对栈里的元素进行出栈处理,不匹配则插入
char pop(sqstack &s,char ch){
if(s.top!=s.base){
if((ch==']'&&*s.top=='[')||(ch==')'&&*s.top=='(') )
--s.top;
else
push(s,ch);
}
else
push(s,ch);
return 1;
}
int main(){
int n;
char ch;
sqstack s;
initstack(s);
scanf("%c",&ch);//或者用ch=getchar();可以输入一个字符
//scanf("%d",&n);
while(ch!='\n') {
pop(s,ch);
scanf("%c",&ch);//不能用空格或者换行符来当做输入结束,因为这样也算一个字符,用cin来就可以用换行符,或用ch=getchar();
}
if(s.top==s.base)//如果
printf("ok");
else
printf("error");
printf("\n");
return 0;
}