括号匹配检验程序

来源:百度知道 编辑:UC知道 时间:2024/09/25 09:31:51
#include<stdio.h>
#include<malloc.h>

#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

从你的代码可以看出,你想在开始将‘[’压栈,作为结束条件。
在循环中采集每次的输入字符,如果不匹配,则压栈输入字符;如果匹配,为‘]’字符,则将栈中所有字符全部出栈。
上面代码的主要问题是循环条件的判断的问题,你可以分析下。

下面是我在你的代码基础上进行了小小修改后的代码,提供给你参考下。(保存为CPP文件,用C++编译测试通过)。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#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: PUS