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++).