E17.1 O fragmento de programa abaixo manipula uma pilha de caracteres. As funções de manipulação da pilha são
int pilhavazia (); void empilha (char); char desempilha (); char espiapilha ();
A primeira devolve 1 se pilha está vazia e 0 em caso contrário. A segunda empilha um caracter. A terceira desempilha um caracter. A quarta devolve uma cópia do item que está no topo da pilha, mas não retira o item da pilha. Diga, em português, o que o fragmento abaixo faz.
char x;
if (pilhavazia ()) empilha ('B');
else {
if (espiapilha () != 'A')
empilha ('B');
else {
while (!pilhavazia () && espiapilha () == 'A')
desempilha ();
empilha ('B');
}
}
Escreva um fragmento equivalente que seja bem mais curto e mais simples.
E17.2 Escreva uma versão especial de countingsort para o caso em que R vale 2. Procure simplificar o código.
E17.3 Aplique o algoritmo de ordenação digital ao vetor de strings
no is th ti fo al go pe to co to th ai of th pa
E17.4 No algoritmo ordenaDigital(), diga o que acontece se trocarmos a linha for (d = W-1; d >= 0; d--) por for (d = 0; d < W; d++).