1. 程式人生 > >棧用於解決括號匹配問題

棧用於解決括號匹配問題

在編寫程式的過程中,我們經常需要對一串括號是否匹配進行判斷。如何判斷呢?我們可以藉助棧來進行判斷。基本思路是:遍歷字串,當發現有右括號而此時的棧頂元素又恰好是與之匹配的左括號時,則棧頂元素出棧;其餘情況全部入棧,程式碼如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 30
typedef int status;
typedef char elemtype;
typedef
struct sqstack{ elemtype data[MAXSIZE]; int top; }stack; status traversestack(sqstack *s){ int i=0; for(i=s->top;i>=0;i--){ printf("%d ",s->data[i]); } printf("\n"); } status initstack(sqstack *s){ s->top=-1;//置空棧 } //將元素壓入棧 status push(sqstack *s,elemtype data) { if
(s->top==MAXSIZE-1){ return ERROR;//判斷棧是否已滿 } else{ s->top++; s->data[s->top]=data; } return OK; } status emptystack(sqstack *s){ if(s->top==-1){ return TRUE; } else{ return FALSE; } } //出棧並返回元素值 status pop(sqstack *s){ if
(s->top==-1){ return ERROR; } else{ elemtype e; e=s->data[s->top]; s->top--; return e; } } //返回棧長 status stacklength (sqstack *s){ return s->top+1; } //出棧 status pop(sqstack *s,elemtype data){ if(s->top==-1){ printf("空棧\n"); return ERROR; } else{ data=s->data[s->top]; s->top--; printf("出棧元素為%d\n",data); } } status main(void){ elemtype ch[MAXSIZE]; stack S; initstack(&S); scanf("%s",ch); int i=0; for(i=0;i<strlen(ch);i++){ if(ch[i]==')'&&S.data[S.top]=='('||ch[i]==']'&&S.data[S.top]=='['||ch[i]=='}'&&S.data[S.top]=='{')/*出棧條件*/ pop(&S); else push(&S,ch[i]); } if(S.top==-1){ printf("YES\n"); } else printf("NO\n"); }