使用堆棧實現括號的匹配

//使用堆棧實現括號的匹配
函數

#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;

 }

相關文章
相關標籤/搜索