括号匹配检验程序#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef char SElemType;typedef int Status;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{SElemType *base;SElemType *top;int stacksize;
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 09:31:39
括号匹配检验程序#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef char SElemType;typedef int Status;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{SElemType *base;SElemType *top;int stacksize;
括号匹配检验程序
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef char SElemType;
typedef int Status;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!S.base) return FALSE;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack S,SElemType &e)
{
if(S.base == S.top) return ERROR;
e = *(S.top-1);
return OK;
}
Status Push(SqStack &S,SElemType e)
{
*S.top++ = e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top == S.base)return ERROR;
e = *--S.top;
return OK;
}
Status StackEmpty(SqStack &S)
{
if(S.base == S.top)return TRUE;
else return FALSE;
}
main()
{
SqStack S;
SElemType e,f;
InitStack(S);
// e=getchar();
e='[';
Push(S,e);
while(e = ']'){
// e=getchar();
e=']';
if(e-*(S.top-1) == 1 || e-*(S.top-1) == 2)Pop(S,f);
else Push(S,e);
}
if(StackEmpty(S)) return TRUE;
else return FALSE;
}
我是数据结构初学者 这个检验括号匹配程序不知道出现什么问题 总是得不到预期结果 请高手帮我看看
清华大学出的
括号匹配检验程序#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef char SElemType;typedef int Status;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{SElemType *base;SElemType *top;int stacksize;
从你的代码可以看出,你想在开始将‘[’压栈,作为结束条件.
在循环中采集每次的输入字符,如果不匹配,则压栈输入字符;如果匹配,为‘]’字符,则将栈中所有字符全部出栈.
上面代码的主要问题是循环条件的判断的问题,你可以分析下.
下面是我在你的代码基础上进行了小小修改后的代码,提供给你参考下.(保存为CPP文件,用C++编译测试通过).
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef char SElemType;
typedef int Status;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct _SqStack{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!S.base)
return FALSE;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S, SElemType e)
{
*S.top++ = e;
printf("0x%.8x: PUSH %c\n", S.top, e);
return OK;
}
Status Pop(SqStack &S, SElemType &e)
{
if(S.top == S.base)
return ERROR;
e = *--S.top;
printf("0x%.8x: POP %c\n", S.top, e);
return OK;
}
Status StackEmpty(SqStack &S)
{
if(S.base == S.top)
return TRUE;
else
return FALSE;
}
main()
{
SqStack S;
SElemType e;
//初始化栈
InitStack(S);
//将[ 压入栈底,作为结束条件
e='[';
Push(S, e);
//循环接收键盘字符,
//不匹配则将字符压栈,
//匹配则将[ 与 ] 之间字符全部出栈,只到栈底结束
while(S.top > S.base)
{
fflush(stdin);
e = getchar();
if (e != ']')
{
Push(S, e);
}
else
{
printf("\n");
printf("----Get matched char ']'\n");
printf("----POP Stack----\n");
S.top --;
while(*(S.top)!= '[')
{
Pop(S, e);
}
}
fflush(stdout);
}
Pop(S, e);
printf("\n");
//释放栈
if(StackEmpty(S))
return TRUE;
else
return FALSE;
}