Esta série de exercícios repete vários exercícios das séries E21 e E22 que se mostraram inesperadamente difíceis.
E23.1 Suponha dada uma lista encadeada sem cabeça com celulas do tipo celula.
struct cel { int conteudo; struct cel *prox; }; typedef struct cel celula;
Suponha que lis é o endereço da primeira célula da lista. Queremos remover o primeiro nó da lista (suponha que a lista não é vazia). Qual dos dois fragmentos de código está correto? Explique detalhadamente. Faça figuras.
celula **p; p = &lis; lis = lis->prox; free (*p); |
celula *p; p = lis; lis = lis->prox; free (p); |
E23.2 O exercício E21.4 escreveu o código da varredura por níveis (ou busca em largura) de uma árvore binária. O código usava uma fila de (ponteiros para) nós. Escreva agora o código das funções de manipulação da fila. Há cinco funções: entranafila, saidafila, filavazia, criafila e liberafila. Implemente a fila em um vetor com redimensionamento. Imagine que as funções ficarão num módulo à parte.
E23.3 (Repetição de E21.5) Escreva uma função que transforme um heap v[1..n] em uma árvore binária (quase completa, é claro).
E23.4 (Repetição de E22.1) Escreva uma função que decida se uma dada árvore binária é ou não é de busca.