解题思路:

同样是括号匹配的算法,首先通过字符的读取函数getchar()进行读取字符串,之后压入到主栈s中,之后对主栈s进行遍历,将压入到辅助栈中,之后更新辅助栈的栈顶指针,之后如果主栈为b与辅助栈进行对比,如果辅助栈的栈顶元素为a之后主栈的栈顶元素为b,辅助栈的栈顶指针--,但是如果辅助栈与主栈的栈顶元素相同的话将valid字段更新为0,同样如果辅助栈的栈顶指针为-1的话也将valid字段更新为0。

代码实现:

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10001

typedef struct {
    char ch[Maxsize];
    int top;
}Stack;

int main() {
    //初始化栈
    Stack s;
    s.top = -1;
    //初始化栈中的元素
    char c;
    while((c = getchar())!=EOF&&c != '\n'){
        s.ch[++s.top] = c;
    }
    Stack t;
    t.top = -1;
    int valid = 1;
    for(int i = 0;i <= s.top;i++){
        char ch = s.ch[i];
        if(ch == 'a'){
            t.ch[++t.top] = ch;
        }else{
            if(t.top == -1){
                valid = 0;
                break;
            }
            char cht = t.ch[t.top];
            if(ch == 'b'&&cht == 'a'){
                t.top--;
            }else{
                valid = 0;
                break;
            }
        }
    }

    if(valid == 1&&t.top==-1){
        printf("Good");
    }else{
        printf("Bad");
    }
    return 0;
}