解题思路:
同样是括号匹配的算法,首先通过字符的读取函数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;
}

京公网安备 11010502036488号