分类: C/C++
2008-10-27 16:02:23
#define STACKINCREAMENT 10
#define STACK_INIT_SIZE 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int status ;
#include
//#include
#include
#include
typedef struct
{
char *base;
char *top;
status stacksize;
}sqstack;
status InitStack(sqstack &s)
{
s.base = (char*)malloc(STACK_INIT_SIZE * sizeof(char));
if(!s.base) exit(OVERFLOW);
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
return OK ;
}
status GetTop(sqstack s,char &e)
{
if(s.top == s.base) return ERROR;
e = *(s.top - 1);
return OK;
}
status Push(sqstack &s,char e)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (char*)malloc(s.base,(s.stacksize + STACKINCREMENT) *sizeof(char));
if(!s.base) exit(OVERFLOW);
s.top = s.base + s.stacksize;
s.stacksize += STACKINCREMENT;
}
*s.top++ = e;
return OK;
}
status Pop(sqstack &s,char&e)
{
if(s.top == s.base) return ERROR;
e = * --s.top;
return OK;
}
status IsEmpty(sqstack &s)
{
if(s.top == s.base)
return OK;
return ERROR;
}
status ClearStack(sqstack &s)
{
if(s.top == s.base) return ERROR;
s.top == s.base;
return OK;
}
status Parenthesis_match(sqstack *s,char *str)
{int i=0,flag=0;
char e;
while(str[i]!='\0')
{
switch(str[i])
{
case '(':push(s,str[i]);break;
case '[':push(s,str[i]);break;
case ')':{pop(s,&e);if(e!='(') flag=1;}break;
case ']':{pop(s,&e);if(e!='[')flag=1;}break;
default:break;
}
if(flag)break;
i++;
}
if(!flag&&IsEmpty(s))
printf(" Parenthesis is match!\n");
else
printf("Parenthesis isn't match!\n");
return OK;
}
void main()
{
char str[100],enter;
sqstack s;
InitStack(&s);
printf("input string chars:");
scanf("%s",str);
Parenthesis_match(&s,str);
getchar();
}