//使用堆棧實現括號的匹配
函數
#include <string.h> spa
#include<stdio.h> 指針
typedef char DataType; ip
#define MaxSize 10 string
typedef struct it
{ pip
DataType stack [MaxSize]; io
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;
}