/*括號匹配算法*/ #include<stdio.h> #define FALSE 0 #define TRUE 1 #define MAXSIZE 100 typedef char DataType; //定義棧 typedef struct stack{ DataType data[MAXSIZE]; int top; }SeqStack; //初始化棧 void InitStack(SeqStack *s) { s->top = -1; } //判斷棧是否爲空 int IsEmpty(SeqStack *s) { if(s->top == -1) return TRUE; return FALSE; } //判斷棧是否已滿 int IsFull(SeqStack *s) { if(s->top == MAXSIZE-1) return TRUE; return FALSE; } //出棧 void PopStack(SeqStack *s, DataType temp) { if(IsEmpty(s)) return; temp = s->data[s->top]; s->top --; } //壓棧 void PushStack(SeqStack *s,DataType temp) { if(IsFull(s)) return; s->top ++ ; s->data[s->top]=temp; } //判斷兩個括號是否匹配 int Match(char chone,char chtwo) { if(chone=='(' && chtwo==')') return TRUE; else if(chone == '{' && chtwo == '}') return TRUE; else if(chone == '[' && chtwo == ']') return TRUE; else return FALSE; } //取棧頂元素 void GetTopStack(SeqStack *s , DataType *temp) { if(IsEmpty(s)) return; *temp = s->data[s->top]; } void BracketMatch(char *str) { SeqStack s; int i; char ch; InitStack(&s); for(i=0 ; str[i]!='\0';i++ ) { switch(str[i]){ case '(': case '[': case '{': PushStack(&s,str[i]); break; case ')': case ']': case '}': if(IsEmpty(&s)) { printf("右括號多餘\n"); return; }else{ GetTopStack(&s,&ch); if(Match(ch,str[i])) PopStack(&s,ch); else{ printf("\n對應的右括號不同類\n"); return; }/*if*/ }/*else*/ }/*for*/ }/*switch*/ if(IsEmpty(&s)) printf("\n括號匹配\n"); else printf("\n左括號多餘\n"); } int main() { char str[MAXSIZE]; int i; printf("Input the bracket string: \n"); scanf("%s",str); BracketMatch(str); return 1; }
用c語言實現括號匹配算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.