Utilizando a estrutura de pilhas dinâmica, resolva o problema de decidir se uma dada sequência de parênteses e colchetes está bem-formada (ou seja, parênteses e colchetes são fechados na ordem inversa àquela em que foram abertos). Por exemplo, a sequência ( ( ) [ ( ) ] ) está bem formada, enquanto que a sequência ( [ ) ] está malformada.
Soluções para a tarefa
Resposta:
#define N 100
char pilha[N];
int t;
// Esta função devolve 1 se a string ASCII s
// contém uma sequência bem-formada de
// parênteses e colchetes e devolve 0 se
// a sequência é malformada.
int bemFormada (char s[])
{
criapilha ();
for (int i = 0; s[i] != '\0'; ++i) {
char c;
switch (s[i]) {
case ')': if (pilhavazia ()) return 0;
c = desempilha ();
if (c != '(') return 0;
break;
case ']': if (pilhavazia ()) return 0;
c = desempilha ();
if (c != '[') return 0;
break;
default: empilha (s[i]);
}
}
return pilhavazia ();
}
void criapilha (void) {
t = 0;
}
void empilha (char y) {
pilha[t++] = y;
}
char desempilha (void) {
return pilha[--t];
}
int pilhavazia (void) {
return t <= 0;
}
Explicação: