判断一个括号串中的括号是否为匹配。

发布时间:2024年01月12日

/** * 判断一个括号串中的括号是否为匹配。

* @param exp: 括号串 * @param n: 括号串的长度 */?Status?matchBracketSequence(char*?exp,?int n);

?有以下数据结构及其操作可用:

#define MAXSIZE?20?

#define INCREMENT?5?

typedef int Status;?

typedef char ElemType;?

typedef struct?{

?ElemType?*elem;?// 存储空间的基址?

int top;?// 栈顶元素的下一个位置,简称栈顶位标?

int size;?// 当前分配的存储容量?

int increment;?// 扩容时,增加的存储容量?

}?SqStack;?// 顺序栈?

// 初始化一个栈,size为栈的初始容量,inc为栈增容时的容量。一般而言,可令size为MAXSIZE,inc为INCREMENT?

Status?InitStack_Sq(SqStack?&S,?int size,?int inc);?// 销毁?

Status?DestroyStack_Sq(SqStack S);?//检查栈是否为空。如果为空,则返回TRUE,否则返回FALSE?Status?StackEmpty_Sq(SqStack S)?;?//将元素e进栈?Status?Push_Sq(SqStack?&S,?ElemType e)?;?//出栈,并且栈顶元素赋给e?Status?Pop_Sq(SqStack?&S,?ElemType?&e);?//将栈顶元素赋给e,但栈顶元素不出栈?Status?GetTop_Sq(SqStack&?S,?ElemType&?e);

#include "allinclude.h"

Status matchBracketSequence(char* exp, int n)
{  // Add your code here
 
    SqStack S;
    InitStack_Sq(S,20,5);
    
    ElemType temp;
    for(int i=0;i<n;i++)
      {
        switch(exp[i])
            {
              case '('  :
              case '['  :
              case '{'  :   {
                              Push_Sq(S,exp[i]);
                              break;
                             }
              
              case ')'  :
              case ']'  :
              case '}'  :   {
                              if(StackEmpty_Sq(S)==true)
                                return false;
                              
                              GetTop_Sq(S,temp);
                                if(temp=='(' && exp[i]==')'  ||  temp=='{' && exp[i]=='}'  ||  temp=='[' && exp[i]==']'     )
                                    Pop_Sq(S,temp);
                                    
                            }
            }
      }    
           if(StackEmpty_Sq(S))   
              return true;
              
            return false;
}

文章来源:https://blog.csdn.net/laocooon/article/details/135544663
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。