Baixe o app para aproveitar ainda mais
Prévia do material em texto
AV1 ESTRUTURA DE DADOS Estrutura de dados lista 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. R = ENVIEI O CODIGO TAMBÉM EM UM BLOCO DE NOTAS, ESTÁ EM UM FORMATO MELHOR. CÓDIGO #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct sNodo{ int info; struct sNodo *prox; } Nodo; typedef struct sListaSimplesEnc{ Nodo *prim; } ListaSimplesEnc; void criarLista(ListaSimplesEnc *pList){ pList->prim = NULL; } void mostrarLista(ListaSimplesEnc *pList){ Nodo *p; printf("Lista: "); for (p = pList->prim; p != NULL; p = p->prox){ printf("%d ->", p->info); } } void inserirIni(ListaSimplesEnc *pList, int v){ Nodo *novo; novo = (Nodo*)malloc(sizeof(Nodo)); if (novo != NULL){ novo->info = v; novo->prox = pList->prim; pList->prim = novo; } else{ printf("Memória Insuficiente\n"); } } void removerIni(ListaSimplesEnc *pList){ Nodo *pAux = pList->prim; if (pAux != NULL){ pList->prim = pList->prim->prox; free(pAux); printf("Valor Removido\n"); } else{ printf("Lista Vazia\n"); } } void inserirOrd(ListaSimplesEnc *pList, int v){ Nodo *novo; novo = (Nodo*)malloc(sizeof(Nodo)); if (novo != NULL){ novo->info = v; Nodo *pAtu, *pAnt; pAnt = NULL; pAtu = pList->prim; while (pAtu != NULL && pAtu->info < v){ pAnt = pAtu; pAtu = pAtu->prox; } novo->prox = pAtu; if (pAnt != NULL){ pAnt->prox = novo; } else{ pList->prim = novo; } } else{ printf("Memória Insuficiente\n"); } } void removerEle(ListaSimplesEnc *pList, int v){ Nodo *pAtu, *pAnt; pAnt = NULL; pAtu = pList->prim; while (pAtu != NULL && pAtu->info != v){ pAnt = pAtu; pAtu = pAtu->prox; } if (pAnt != NULL){ if (pAtu != NULL) { pAnt->prox = pAtu->prox; free(pAtu); printf("Valor Removido\n"); } else{ printf("Valor não encontrado\n"); } } else{ printf("Lista Vazia\n"); } } void removerTudo(ListaSimplesEnc *pList){ Nodo *pAux = pList->prim; if (pAux != NULL){ while (pAux != NULL){ pList->prim = pAux->prox; free(pAux); pAux = pList->prim; } printf("Todos os elementos foram removidos!\n"); } else{ printf("Lista Vazia\n"); } } void alterarEle(ListaSimplesEnc *pList, int v1, int v2){ Nodo *pAtu, *pAnt; pAnt = NULL; pAtu = pList->prim; while (pAtu != NULL && pAtu->info != v1){ pAnt = pAtu; pAtu = pAtu->prox; } if (pAnt != NULL){ if (pAtu != NULL){ pAtu->info = v2; printf("Valor alterado\n"); } else{ printf("Valor não encontrado\n"); } } else{ printf("Lista Vazia\n"); } } int estaVazia(ListaSimplesEnc *pList) { return(pList->prim == NULL); } int main(){ setlocale(LC_ALL, "portuguese"); ListaSimplesEnc minhaLista; int valor, op, valorAlt; criarLista(&minhaLista); printf("Escolha uma opção:\n"); while (1) { printf("\n(1) Inserir elemento no início da Lista\n"); printf("(2) Inserir elemento em ordem (verifique se a lista está ordenada)\n"); printf("(3) Remover elemento no início da Lista\n"); printf("(4) Remover elemento específico da Lista\n"); printf("(5) Mostrar Lista\n"); printf("(6) Apagar todos os elementos da Lista\n"); printf("(7) Alterar elemento da Lista\n"); printf("(0) Sair\n"); printf("?"); scanf("%d", &op); system("cls"); switch (op) { case 1: // inserir elemento no inicio printf("Valor?"); scanf("%d", &valor); inserirIni(&minhaLista, valor); break; case 2: // inserir elemento ordenado printf("Valor?"); scanf("%d", &valor); inserirOrd(&minhaLista, valor); break; case 3: // remover o primeiro removerIni(&minhaLista); break; case 4: // remover determinado elemento printf("Valor?"); scanf("%d", &valor); removerEle(&minhaLista, valor); break; case 5: // mostrar lista if (estaVazia(&minhaLista)) { printf("Lista vazia\n"); } else { mostrarLista(&minhaLista); } break; case 6: // apagar todos os elementos da Lista removerTudo(&minhaLista); break; case 7: // alterar um elemento printf("Valor a ser alterado?"); scanf("%d", &valor); printf("Novo valor?"); scanf("%d", &valorAlt); alterarEle(&minhaLista, valor, valorAlt); break; case 0: // abandonar o programa removerTudo(&minhaLista); exit(0); default: printf("Opção inexistente!\n"); } } }
Compartilhar