Atividades analfebetas
980 palavras
4 páginas
Critique a função abaixo. Ao receber uma lista encadeada com cabeça e um inteiro x, ela promete devolver o endereço de uma célula com conteúdo x. Se tal célula não existe, promete devolver NULL. celula *busca (int x, celula *ini) { int achou; celula *p; achou = 0; p = ini->prox; while (p != NULL && !achou) { if (p->conteudo == x) achou = 1; p = p->prox; } if (achou) return p; else return NULL; }Escreva uma versão da função busca para listas sem cabeça.
[Mínimo] Escreva uma função que encontre uma célula de conteúdo mínimo. Faça duas versões: uma iterativa e uma recursiva.
Escreva uma função que faça um busca em uma lista crescente. Faça versões para listas com e sem cabeça. Faça versões recursiva e iterativa.
[Ponto médio de uma lista] Escreva uma função que receba uma lista encadeada e devolva o endereço de um nó que esteja o mais próximo possível do meio da lista. Faça isso sem contar explicitamente o número de nós da lista.
Verificação do tamanho. Compile e execute o seguinte programa: typedef struc cel celula; struct cel { int conteudo; celula *prox; }; int main (void) { printf ("sizeof (celula) = %d\n", sizeof (celula)); return 0; }
Inserção em uma lista
Quero inserir (= insert) uma nova célula com conteúdo x entre a posição apontada por p e a posição seguinte [por que seguinte e não anterior?] em uma lista encadeada. É claro que isso só faz sentido se p é diferente de NULL.
// Esta função insere uma nova celula em uma
// lista encadeada. A nova celula tem conteudo
// x e é inserida entre a celula apontada por
// p e a seguinte. Supõe-se que p != NULL.
void insere (int x, celula *p)
{
celula *nova; nova = mallocX (sizeof (celula)); nova->conteudo = x; nova->prox = p->prox; p->prox = nova;
}
Veja que maravilha! Não é preciso movimentar células para "criar espaço" para um nova célula, como fizemos