Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE VEIGA DE ALMEIDA GRADUAÇÃO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA: ESTRUTURA DE DADOS PROF.: PAULO MÁRCIO SOUZA FREIRE EDUARDO FERREIRA TRINDADE TRABALHO DA DISCIPLINA (AVA1) ESTRUTURA DE DADOS - LISTA NITERÓI 2022 2 Trabalho da disciplina – AVA 1 (Transcrição do enunciado) A lista linear é uma estrutura de dados em que todos os elementos são armazenados de forma sequencial, e seu encadeamento pode ocorrer de forma simples ou dupla. Você é programador de computador em linguagem C da empresa Renalf Mega Data e precisa realizar as operações elementares com os dados de uma lista simplesmente encadeada, visando à listagem de todos os dados armazenados nessa estrutura de dados. Procedimentos para elaboração do TD: Desenvolva um programa de computador que permita ao usuário realizar as operações elementares – inclusão, consulta, alteração e remoção – com a estrutura de dados lista simplesmente encadeada.1 1 Enunciado da primeira avaliação disponível em: https://uva.instructure.com/courses/31426/pages/enunciado-da-avaliacao-1?module_item_id=496568 acessado em: 08/11/2022. https://uva.instructure.com/courses/31426/pages/enunciado-da-avaliacao-1?module_item_id=496568 3 ESTRUTURA DE DADOS - LISTA #include <stdio.h> #include <stdlib.h> typedef struct no { int valor; struct no *proximo; } No; typedef struct lista { No *inicio; } Lista; void criar_lista(Lista *lista) { lista->inicio = NULL; } int verificarListaVazia(Lista *lista) { return (lista->inicio == NULL); } void imprimir(Lista lista) { No *no = lista.inicio; printf("\n-------------------------\n"); printf("Lista: "); while (no) { printf("%d ", no->valor); no = no->proximo; } printf("\n-------------------------\n"); } void inserir(Lista *lista, int numero) { No *aux, *novo = malloc(sizeof(No)); if (novo) { novo->valor = numero; novo->proximo = NULL; 4 if (lista->inicio == NULL) { lista->inicio = novo; } else { aux = lista->inicio; while (aux->proximo) { aux = aux->proximo; } aux->proximo = novo; } } else { printf("\n-------------------------\n"); printf("Erro ao alocar memoria!\n"); printf("-------------------------\n"); } } int alterar(Lista *lista, int antigo, int novo) { No *aux = NULL; aux = lista->inicio; while (aux && aux->valor != antigo) { aux = aux->proximo; } if (aux) { aux->valor = novo; return 1; } else { return 0; } } No* remover(Lista *lista, int numero) { No *aux, *remover = NULL; if (lista->inicio) { if (lista->inicio->valor == numero) { remover = lista->inicio; lista->inicio = remover->proximo; } else { aux = lista->inicio; 5 while(aux->proximo && aux->proximo->valor != numero) { aux = aux->proximo; } if (aux->proximo) { remover = aux->proximo; aux->proximo = remover->proximo; } } } } No* buscar(Lista *lista, int numero) { No *aux, *no = NULL; aux = lista->inicio; while (aux && aux->valor != numero) { aux = aux->proximo; } if (aux) { no = aux; } return no; } void limparLista(Lista *lista) { No *aux = lista->inicio; if (aux) { while (aux) { lista->inicio = aux->proximo; free(aux); aux = lista->inicio; } printf("\n-------------------------\n"); printf("A lista foi limpa!\n"); printf("Todos os elementos foram removidos!\n"); printf("-------------------------\n"); } else { printf("\n-------------------------\n"); 6 printf("A lista ja esta vazia!\n"); printf("-------------------------\n"); } } int main() { int opcao, valor, novo, alterado; No *removido, *busca; Lista lista; criar_lista(&lista); while (1) { printf("\n\t[ 1 ] Mostrar Lista\n" "\t[ 2 ] Inserir Valor\n" "\t[ 3 ] Alterar Valor\n" "\t[ 4 ] Remover Valor\n" "\t[ 5 ] Buscar Valor\n" "\t[ 6 ] Limpar Lista\n" "\t[ 0 ] Sair\n\n"); printf("Digite o numero da opcao: "); scanf("%d", &opcao); switch (opcao) { case 1: if (verificarListaVazia(&lista)) { printf("\n-------------------------\n"); printf("Lista Vazia!\n"); printf("-------------------------\n"); } else { imprimir(lista); } break; case 2: printf("Digite um valor: "); scanf("%d", &valor); inserir(&lista, valor); printf("\n-------------------------\n"); printf("Elemento INSERIDO com sucesso!\n"); printf("-------------------------\n"); break; 7 case 3: printf("Digite o valor a ser alterado: "); scanf("%d", &valor); printf("Digite o novo valor: "); scanf("%d", &novo); alterado = alterar(&lista, valor, novo); if (alterado) { printf("\n-------------------------\n"); printf("Elemento ALTERADO com sucesso!\n"); printf("-------------------------\n"); } else { printf("\n-------------------------\n"); printf("Valor Nao Encontrado!\n"); printf("-------------------------\n"); } break; case 4: printf("Digite um valor a ser removido: "); scanf("%d", &valor); removido = remover(&lista, valor); if (removido) { printf("\n-------------------------\n"); printf("Elemento REMOVIDO com sucesso!\n"); printf("-------------------------\n"); } else { printf("\n-------------------------\n"); printf("Valor Nao Encontrado!\n"); printf("-------------------------\n"); } break; case 5: printf("Digite um valor a ser buscado: "); scanf("%d", &valor); busca = buscar(&lista, valor); if (busca) { printf("\n-------------------------\n"); printf("Valor encontrado: %d\n", busca->valor); 8 printf("-------------------------\n"); } else { printf("\n-------------------------\n"); printf("Valor Nao Encontrado!\n"); printf("-------------------------\n"); } break; case 6: limparLista(&lista); break; case 0: printf("\n-------------------------\n"); printf("Programa Finalizado!\n"); printf("-------------------------\n"); exit(0); default: printf("\n-------------------------\n"); printf("Opcao Invalida!\n"); printf("-------------------------\n"); break; } } return 0; } 9 Referências Bibliográficas: BOENTE, Alfredo Nazareno Pereira. Estrutura de dados [livroeletrônico]. Rio de Janeiro: UVA, 2019. 91 p. Disponível em: https://uva.instructure.com/courses/31426/modules/items/496561. Acesso em: 08 nov. 2022. https://uva.instructure.com/courses/31426/modules/items/496561
Compartilhar