1. 程式人生 > 其它 >基於順序棧的括號匹配演算法

基於順序棧的括號匹配演算法

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 100
typedef struct{
    char data[MaxSize];
    int top;
}SqStack;

//順序棧的初始化
bool InitStack(SqStack &S)
{
    for(int i=0;i<MaxSize;i++)S.data[i]='\0';
    S.top=-1;
    return true;
}
//判斷棧空:
bool StackEmpty(SqStack S)
{
    
if(S.top==-1)return true; else return false; } //順序棧入棧操作: bool Push(SqStack &S,char x) { if(S.top==(MaxSize-1))return false; S.data[++S.top]=x; return true; } //順序棧出棧操作: bool Pop(SqStack &S,char &x) { if(S.top==-1)return false; x=S.data[S.top--]; return true; }
//括號匹配演算法: bool bracketCheck(char str[],int length) { SqStack S; InitStack(S); for(int i=0;i<length;i++) { if(str[i]=='('||str[i]=='{'||str[i]=='[') { Push(S,str[i]); } else{ if((str[i]==')'||str[i]=='}'||str[i]==']')&&StackEmpty(S))return
false; char topElem; Pop(S,topElem); if(str[i]==')'&&topElem!='(')return false; if(str[i]=='}'&&topElem!='{')return false; if(str[i]==']'&&topElem!='[')return false; } } return StackEmpty(S); } int main() { char str[6] = {'{','{','}','}'}; int length = sizeof(str)/sizeof(str[0]); // 整個陣列的長度除以單個元素的長度,得到陣列元素個數 //printf("%d",length); // if(bracketCheck(str,length)) printf("括號匹配成功,沒有錯誤"); else printf("括號匹配失敗,存在錯誤"); }