#include"stdio.h"
#define STACK_INIT_SIZE 100/*储存空间初始分配量*/
#define STACKINCREMENT 10/*存储空间分配增量*/
#define OK 1
#define OVERFLOW -1
#define ERROR 0
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
int initstack(sqstack *s)/*初始化*/
{
s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
void pop(sqstack *s)/*出栈*/
{
if(s->top==s->base)
return ERROR;/*若栈为空,则提示出错*/
s->top--;
}
void push(sqstack *s,char e)/*入栈*/
{
if(s->top-s->base>=s->stacksize)/*判断栈是否满*/
{s->base=(int*)realloc(s->base,(s-> stacksize+STACKINCREMENT)*sizeof(int));
if (!s->base)
exit(OVERFLOW);/*存储分配失败*/
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*(s->top++)=e;
}
void gettop(sqstack *s,char e)/*取栈顶元素 */
{
if(s->top==s->base)
return ERROR;
e=*(s->top-1);
return e;
}
main()
{
sqstack s;
int i;
char e;
initstack(&s);
clrscr();
char x[10];
for(i=0;i<10;i++)
scanf("%c",&x[i]);
for(i=0;i<10;i++)
{
printf("%c",x[i]);/*向屏幕输出被读出的字符*/
switch(x[i])/*对读到的各种括号分情况处理*/
{
case'{':
case'[':
case'(':
push(&s,x[i]);/*出现以上三种情况则进栈*/
break;
case'}':
gettop(&s,e);
if(e=='{')
pop(&s);/*栈顶的左花括号出栈*/
else return 0;
break;
case']':
gettop(&s,e);
if(e=='[')
pop(&s);/*栈顶的中花括号出栈*/
else return 0;
break;
case')':
gettop(&s,e);
if(e=='(')
pop(&s);/*栈顶的圆花括号出栈*/
else return 0;
break;
}
}
if(s->top==s->base)/*栈最后为空时返回1,否则返回0*/
printf("OK");
else
printf("ERROR");
}
main函数当中
char x[10];
应当先定义在
initstack(&s);
// clrscr();
system("cls") ;之前
其中“// clrscr();”中的
//为手误多打了……抱歉