/*简单编译器实现(括号配对检查)。通常在编译源代码时判断左右括号是否匹配也是一个重要环节。采用栈实现
算法描述:随机输入一串数学表达式或者带括弧的语句,然后将其存在数组中,然后遍历整个数组,
遇到做括弧就将其入栈,遇到右括号,则将栈顶元素弹出,最后遍历完数组后,看top是否为0,若为0.则说明括号匹配,
否则不匹配。*/
//不同系统可能会有错误,我在xp上运行时,总是出现内存不能读写的对话框 而在vista上运行正确 不知道为什么?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define m 20
#define elemtype char
typedef struct//栈类型定义
{
elemtype stack[m];
int top;
}stacknode;
stacknode *sp;
/*void init(stacknode *s)//栈初始化
{
s->top=0;
//return ;
} */
void push(stacknode *s,elemtype x)//将x压入栈中
{
if(s->top==m)
printf("栈已满!");
else
{
s->top=s->top+1;
s->stack[s->top]=x;
}
}
void popup(stacknode *s)//弹出栈元素
{
s->top=s->top-1;
}
int main()
{
char s[m];
int i,k;
printf("create an empty stack!/n");
//init(sp);
stacknode *sp;
sp->top=0;
printf("please input an expression:/n");
gets(s);//输入表达式
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')
push(sp,s[i]);
if(s[i]==')')
popup(sp);
}
if(sp->top==0)
printf("括号匹配!/n");
else
printf("括号不匹配!/n");
getchar();
//system("pause");
}