回 帖 发 新 帖 刷新版面

主题:括号匹配 程序

#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{int *base;
 int *top;
 int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
 s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
 if(!s.base) return ERROR;
 s.top=s.base;
 s.stacksize=STACK_INIT_SIZE;
 return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
 if(s.top-s.base>=s.stacksize)
 {s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
  if(!s.base) return ERROR;
  s.top=s.base+s.stacksize;
  s.stacksize+=STACKINCREMENT;
 }
 *s.top++=e;
 return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
    if(s.base==s.top) return ERROR;
    e=*--s.top;
    return OK;
}
Status StackEmpty(SqStack s)
{if(s.base==s.top) return 1;
 else return 0;
}
main()
{char ch1,ch2,c[100];int i;
 SqStack s;
 printf("请输入包括括号表达式:");
 scanf("%s",c);
 i=0;
 while(ch1=c[i])
 {if(ch1=='('||ch1=='{'||ch1=='[')
    push(s,ch1);
  if(ch1==')' ||ch1==']' ||ch1=='}')
      if(StackEmpty(s)) {return ERROR;printf("表达式中的括号不匹配!");}
        else {pop(s,ch2);
              if(ch1=='(' && ch2!=')') {return ERROR;printf("表达式中的括号不匹配!");}
              if(ch1=='[' && ch2!=']') {return ERROR;printf("表达式中的括号不匹配!");}
              if(ch1=='{' && ch2!='}') {return ERROR;printf("表达式中的括号不匹配!");}
        }
        i++;
 }
 if(!StackEmpty(s)) return ERROR;
 printf("表达式中的括号匹配!");
}

调试通过了,但是得不出结果,不知错别儿了?高手们说说你们的高见

回复列表 (共2个回复)

沙发


很明显就是ch1和ch2反了

板凳

//对不起,我把你的很多东西都改了,顺序栈一般用一个数组和一个栈顶指针来实现的,你定义的栈没有存储
//字符的位置啊,所以相应的一些栈的函数也就做了相应的修改//
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct{
    int top;
    char stack[100];
}SqStack;
Status pop(SqStack &s,char &e);
Status push(SqStack &s,char e);
Status InitStack(SqStack &s);
Status StackEmpty(SqStack s);
Status main()
{
    char ch1,ch2,c[100];
    int i;
    SqStack s;
    InitStack(s);
    printf("请输入包括括号表达式:");
    scanf("%s",c);
    i=0;
    ch1=c[i];
    while(i<100){        
        if(ch1=='('||ch1=='{'||ch1=='[')push(s,ch1);
        if(ch1==')' ||ch1==']' ||ch1=='}'){
            if(StackEmpty(s)) {printf("表达式中的括号不匹配!");return ERROR;}
            else{
                pop(s,ch2);
                if(ch2=='(' && ch1!=')') {printf("表达式中的括号不匹配!");return ERROR;}
                if(ch2=='[' && ch1!=']') {printf("表达式中的括号不匹配!");return ERROR;}
                if(ch2=='{' && ch1!='}') {printf("表达式中的括号不匹配!");return ERROR;}
            }
        }
        ch1=c[++i];
    }//while
    if(StackEmpty(s))printf("表达式中的括号匹配!");
    else printf("表达式中的括号不匹配!");
}
Status InitStack(SqStack &s)
{//初始化
 s.top=-1;
 return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
 s.top+=1;
 s.stack[s.top]=e;
 return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
    if(s.top==-1) return ERROR;
    e=s.stack[s.top];
    s.top--;
    return OK;
}
Status StackEmpty(SqStack s)//判空
{if(s.top==-1) return OK;
 else return ERROR;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册