问题描述:利用栈的基本操作实现一个判断算术表达式中包含圆括号,方括号是否正确配对的程序.
     基本要求:
    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;    
     }
}     



											
	    

	



											