主题:括号匹配 程序
#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("表达式中的括号匹配!");
}
调试通过了,但是得不出结果,不知错别儿了?高手们说说你们的高见
#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("表达式中的括号匹配!");
}
调试通过了,但是得不出结果,不知错别儿了?高手们说说你们的高见