您的位置:首页 > 理论基础 > 数据结构算法

括号匹配

2014-12-30 08:06 369 查看
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef char DataType ;

#define Stack_Size 100          //栈长

typedef struct                   //栈的结构体

{  
DataType *base;
DataType *top;

}SeqStack;

void Init(SeqStack *s)    //初始化栈

{
s->base = (DataType *)malloc(Stack_Size*sizeof(DataType));
if(!s->base)
{
printf("分配内存失败!\n");
exit(0);
}

    s->top=s->base;

}

int IsEmpty(SeqStack *s)   //栈空,返回1;反之,返回0;

{
return s->top==s->base;

}

int IsFull(SeqStack *s)     //栈满,返回1;反之,返回0;

{
return s->top-s->base == Stack_Size;

}

void push(SeqStack *s , DataType ch)

{
if(IsFull(s))
{
printf("栈满!\n");
exit(0);
}
else
*s->top++ = ch;

}

DataType pop (SeqStack *s)

{
if(IsEmpty(s))
{
printf("栈空!\n");
exit(0);
}
else
return *--s->top ;

}

void main()

{
char c[20];
char ch;
char *p=c;
SeqStack s;
Init(&s);
printf("请输入含括号的的表达式:\n");

    gets(c);
while(*p)
{
switch(*p)
{
case '{':
case '[':
case '(': 
push(&s,*p++); break;
case ')':
case ']':
case '}':
ch=pop(&s);
if((ch=='(' && *p== ')')||(ch=='[' && *p== ']')||(ch=='{' && *p== '}'))
p++;
else
{
printf("括号不匹配!\n");
exit(0);
}
break;
default:p++;

}
}
if(IsEmpty(&s))
printf("括号匹配成功!\n");
else
printf("括号不匹配!\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息