標籤:c++ 棧
剛開始學習資料結構,用桟寫了一個經典的應用,括弧匹配。
演算法思路:
輸入字串時,將 ‘(‘ , ‘[‘ 壓入桟,遇到 ‘)’ ‘]‘ 時,再棧頂出桟,進行括弧匹配,如果成功匹配,則繼續進行,否則,程式結束,輸入不匹配資訊,
如果 ‘)’ ‘]‘ 均匹配,則看判斷桟是否為空白,如果為空白,則輸入匹配,否則,輸出符號數量不匹配。
#include<iostream>using namespace std;#define max 100 struct stack{int Top;int MaxSize;char *element;};typedef struct stack Stack;void Init(Stack *S,int n){if(n>0){S->Top=-1;S->MaxSize=n;S->element=new char [S->MaxSize];}}bool IsFull(Stack *S){return (S->Top==S->MaxSize-1);}bool IsEmpty(Stack *S){return (S->Top==-1);}void push(Stack *S,char x){if(!IsFull(S))S->element[++S->Top]=x;else{cout<<"桟滿"<<endl;}}char pop(Stack *S){if(!IsEmpty(S))return S->element[S->Top--];else{cout<<"桟空"<<endl;return -1;}}int main(){Stack *S=new Stack;Init(S,max);bool flag=true;bool flag_1=true;bool flag_2=true;cout<<"請輸入字串:"<<endl;char ch;while ((ch = getchar()) != '\n'){switch(ch){ case '(': push(S,ch);break; case '[': push(S,ch);break; case ')': { if(pop(S)!='(' && flag_2) { cout<<"')'"<<"不匹配"<<endl; flag_1=false; flag=false; break; } else { continue; } } case ']': { if(pop(S)!='[' && flag_1) { cout<<"']'"<<"符號不匹配"<<endl; flag_2=false; flag=false; break; } else { continue; } }}}if(!IsEmpty(S) && flag){cout<<"數量不匹配"<<endl;}else if(flag){cout<<"匹配"<<endl;}system("pause");return 0;}
都是簡單的定義,簡單的功能。