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
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;
}