Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230501
  • 博文数量: 55
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 17:59
文章分类

全部博文(55)

文章存档

2015年(2)

2011年(1)

2010年(1)

2009年(18)

2008年(16)

2007年(17)

我的朋友

分类: 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();

}

阅读(1405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~