Informática, perguntado por AbyssWallker, 1 ano atrás

Devido ao seu conhecimento de estrutura de dados e linguagem C, sua primeira tarefa é analisar o código legado
deixado pela equipe anterior e escrever um relatório sobre todas as funções que não tem comentários ou
documentação. Conforme o trecho de código apresentado abaixo, explique o que faz e qual é objetivo da função
lista_operacao( )?
01 - struct no {
02 - int dado;
03 - struct no *proximo;
04 - };
05 -
06 - typedef no *ptr_no;
07 -
08 - ptr_no lista;
09 -
10 - void lista_operacao (ptr_no lista, int valor){
11 - while(lista->proximo != NULL){
12 - lista = lista->proximo;
13 - }
14 - lista->proximo = (ptr_no) malloc(sizeof(no));
15 - lista = lista->proximo;
16 - lista->dado = valor;
17 - lista->proximo = NULL;
18 - }

Soluções para a tarefa

Respondido por jucemarcandido
10

Resposta:

Em poucas palavras:

=> O objetivo principal da função é inserir elementos no final da lista.

   • Como parâmetro a função recebe a Lista existente (ptr_no lista) e (Int Valor) que representará o valor (inteiro) que será armazenado na lista;

   • O Loop (while) se encarregará de posicionar o ponteiro na última posição;

   • A posição onde será inserido o elemento será alocada pelo comando malloc.

   Complemento: - A lista_operacao recebe um noh de uma lista encadeada junto com um valor a ser atribuído ao final dela

                - A função percorre toda a lista até encontrar o ultimo noh (aquele que não possui mais filho)

                - Em seguida aloca memoria para o próximo noh, acessa e atribuiu o 'valor' a ele

                - O valor atribuído vira uma folha (um noh que não tem filho, ou seja, o ultimo noh da lista)

Explicação:

Em poucas palavras:

=> O objetivo principal da função é inserir elementos no final da lista.

   • Como parâmetro a função recebe a Lista existente (ptr_no lista) e (Int Valor) que representará o valor (inteiro) que será armazenado na lista;

   • O Loop (while) se encarregará de posicionar o ponteiro na última posição;

   • A posição onde será inserido o elemento será alocada pelo comando malloc.

   Complemento: - A lista_operacao recebe um noh de uma lista encadeada junto com um valor a ser atribuido ao final dela

                - A funcao percorre toda a lista ateh encontrar o ultimo noh (aquele que nao possui mais filho)

                - Em seguida aloca memoria para o proximo noh, acessa e atribuiu o 'valor' a ele

                - O valor atribuido vira uma folha (um noh que nao tem filho, ou seja, o ultimo noh da lista)

Trecho de um programa completo com a função:

#include <stdio.h>

#include <stdlib.h>

typedef struct no  

{

   int dado;

   struct no *proximo;

}   *ptr_no;

ptr_no lista;

// Função para inserir elementos no final da lista

void lista_inserir(ptr_no lista, int num)  

{

   while (lista->proximo != NULL)  

{

       lista = lista->proximo;

   }

   

lista->proximo = (ptr_no) malloc(sizeof(struct no));

   lista = lista->proximo;

   lista->dado = num;

   lista->proximo = NULL;

}

// Remove elementos da lista existente

void lista_remover(ptr_no lista)  

{

    int dado;

    ptr_no atual;

    atual = (ptr_no) malloc(sizeof(struct no));

    printf("\n\nEscolha um dos itens:\n");

    scanf("%d", &dado);

    while (lista->dado != dado)  

 {

       if (lista->proximo == NULL)  

    { break; }

       atual = lista;

       lista = lista->proximo;

   }

   if (lista->dado == dado)  

{

       atual->proximo = lista->proximo;

   }

}

// Função para mostrar a lista existente

void lista_mostrar(ptr_no lista) {

if((lista->proximo == NULL) && (lista->dado == -1)) {

 printf("A lista esta vazia!");

} else {  

    while (lista->proximo != NULL) {

     if(lista->dado >= 0) {

         printf("%d, ", lista->dado);

        }

        lista = lista->proximo;

    }

    printf("%d\n\n", lista->dado);

}

}

int main() {

   int op, num;

   lista = (ptr_no) malloc(sizeof(struct no));

   lista->dado = -1;

   lista->proximo = NULL;

   do {

       system("cls");

       

    // Mostra a lista existente

 lista_mostrar(lista);

    printf("\n\nEscolha uma das opcoes:\n");

    printf("1 - Inserir no final da lista\n");

    printf("2 - Remover um item da lista\n");

    printf("0 - Sair\n\n");        

       

       scanf("%d", &op);

       if(op == 1) {

        do {

         printf("\nDigite um numero inteiro ou -1 para encerrar: ");

         scanf("%d", &num);

         if(num >= 0) {

          lista_inserir(lista, num);

         }

  } while(num != -1);

 } else if(op ==2 ){

  lista_remover(lista);

 }

   } while(op != 0);

   

   system("pause");

   return 0;

}

Perguntas interessantes