您的位置:首页 > 其它

使用堆栈实现括号的匹配

2013-07-18 23:40 423 查看
#include <string.h>

#include<stdio.h>

typedef char DataType;

#define MaxSize 10

typedef struct

{

DataType stack [MaxSize];

int top;

}sstack;

//堆栈的初始化

void StackInit(sstack *s)

{

s->top=0; //定义指针变量,他指向的变量的成员变量为0;

}

//插入数据

int StackInsert(sstack*s,DataType x)

{

if(s->top>MaxSize)

{

printf("堆栈已满不能插如");

return 0;

}

else

{

s->stack[s->top]=x;

s->top++;

return 1;

}

}

//判断堆栈是否为空

int StackNe(sstack s)

{

if(s.top<=0)

{

return 0;

}

else

{

return 1;

}

}

//出栈

int StackDelete(sstack *s,DataType *x)

{

if(s->top<=0)

{

printf("堆栈为空");

return 0;

}

else

{ s->top--;

*x=s->stack[s->top];

return 1;

}

}

//取出栈顶元素

int StackGet(sstack s, DataType *x)

{

if(s.top<0)

{

printf("堆栈为空");

return 0;

}

else

{

*x=s.stack[s.top-1];

return 1;

}

}



//函数实现括号的匹配

void pipei(char ele[],int n)

{ int i;

sstack mystack;

char c;

//初始化栈

StackInit(&mystack);

for(i=0;i<n;i++)

{

//如果是左括号则入栈

if((ele[i]=='{')||(ele[i]=='[')||(ele[i]=='('))

{

StackInsert(&mystack,ele[i]) ;

}

//如果是有括号则进行匹配,如果不是空的而且是在栈顶则出栈,说明他们是匹配的。

else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='(')

{

//如果是匹配的则出栈

StackDelete(&mystack,&c);

printf("()\t");

}

else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='(')

{

printf("括号匹配不正确\n");

return ;

}

//[][][][][][]]]]]]]][[[[[[[[[[[[[[]]]]]]]]]]]]][[[[[[[[[[]]]]]



else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='[')

{

//如果是匹配的则出栈

StackDelete(&mystack,&c);

//printf("括号是匹配的");

printf("[] \t");

}

else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='[')

{

printf("括号匹配不正确 \n");

return ;

}

//{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}

else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='{')

{

//如果是匹配的则出栈

StackDelete(&mystack,&c);

//printf("括号匹配真确 \n");

printf("{} \t");

}

else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='{')

{

printf("括号匹配不正确 \n");

return ;

}

else if((ele[i]==')')||(ele[i]==']')||(ele[i]=='}')&&!StackNe(mystack))

{

printf("右括号多于左括号! \n");

}

}

if(StackNe(mystack))

{

printf("左括号多于右括号! \n");

}



else

{

printf("括号匹配正确!\n");

}

}

int main ()

{

char a[]={'{','[','(',')',']','}'} ;

char b[]={'{','{','[','(',')',']','}'};

pipei(b,10);

return 0;

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