问题描述:利用栈的基本操作实现一个判断算术表达式中包含圆括号,方括号是否正确配对的程序.
基本要求:
1.定义栈的顺序存取结构.
2.分别定义栈的基本操作(初始化,判空,入,出栈等)
3.定义一个函数来判断算术表达式,出现4种情况:左右括号配对次序不正确,右括号多于左括号,
左括号多于右括号,左右括号匹配成功,
4.设计测试函数进行测试
程序如下:
#include "stdio.h"
#include "stdlib.h"
#define MAX 100
typedef struct { char abc[MAX];
int top;
}stack;
int m,n;
int sign;
void initstack(stack *s)
{ s->top=-1; }
void push(stack *s,char ch)
{
if(s->top==MAX-1)
{ printf("stack is full!");}
else
s->abc[++s->top]=ch;
}
void pop(stack *s,char *ch)
{
if(s->top==-1)
{ printf("stack is empty!"); }
else
{ *ch=s->abc[s->top--];
}
int empty(stack s)
{
if(s.top==-1)
return(1);
else
return(0);
}
int test()
{ stack s;
char ch;
initstack(&s);
while((ch=getchar())!='\n')
{ switch(ch)
{ case'(' :
m++;
push(&s,ch);
break;
case'[':
m++;
push(&s,ch);
break;
case'{':
m++;
push(&s,ch);
break;
case(ch==')'):
if(emptyy(s))
sign=1;
else
{ pop(&s,&ch);
if(ch!='(')
sign=1;
}
break;
case(ch==']'):
if(empty(s)
sign=1;
else
{ pop(&s,&ch);
if(ch!=']')
sign=1;
}
break;
case(ch=='}'):
if(empty(s))
sign=1;
else
{ pop(&s,&ch);
if(ch!='}')
sign=1;
}
break;
default:break;
}
}
if(sign==1)
return(2);
if(empty(s))
return(3);
}
main()
{ m=0;
n=0;
sign=0;
int i;
printf("please input the equation:\n");
i=test();
switch(i)
{ case(2):
if(m>n)
printf(" zuo > you \n");
if((m==n)
printf(" zuo != you \n");
if(m<n)
printf(" zuo < you \n");
break;
case(3):printf("you !=zuo \n");break;
default:break;
}
}