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

括号匹配

2014-04-13 15:58 239 查看
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define ADD 10
typedef struct
{
char *top;
char *base;
int stacksize;
}Stack;

void CreatStack(Stack *S)
{
S->base=(char *)malloc(MAX*sizeof(char));
if(!S)
{
printf("申请失败\n");
}
else
{
S->top=S->base;
S->stacksize=MAX;
}
}

void Push(Stack *S, char ch)
{
char *newbase;
if(S->top-S->base>=S->stacksize)
{
newbase=(char*)realloc(S->base, (S->stacksize+ADD)*sizeof(char));
if(!newbase)
{
printf("申请失败\n");
}
else
{
S->top=S->base+S->stacksize;
S->stacksize+=ADD;
}
}
*(S->top++)=ch;
}

char Pop(Stack *S)
{
return *(S->top-1);
}

void Delete(Stack *S)
{
S->top--;
}
int cmp(Stack *S)
{
char ch;
int tag=1;
scanf("%c", &ch);
while(ch!='#'&&tag)
{
switch(ch)
{
case '(':
case '[':
case '{':
Push(S,ch);
break;
case ')':
if(Pop(S)=='(')
{
Delete(S); break;
}
else
{
tag=0;
break;
}
case ']':
if(Pop(S)=='[')
{
Delete(S);break;
}
else
{
tag=0;
break;
}
case '}':
if(Pop(S)=='{')
{
Delete(S); break;
}
else
{
tag=0;
break;
}
}
scanf("%c", &ch);
}
return tag;
}
void main()
{
int tag;
Stack S;
CreatStack(&S);
printf("括号匹配,以#结束\n");
tag=cmp(&S);
if(tag)
{
printf("匹配成功\n");
}
else
{
printf("匹配失败\n");
}
}


学完数据结构的括号匹配,发上源代码,请大家多多指教啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构