Prévia do material em texto
UVA – Universidade Veiga de Almeida
Curso: Sistemas de Informação
Nomes: Pedro de Souza Pereira Garrido
Avaliação AVA1 – Estrutura de Dados
Cabo Frio
2023
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.
Resolução:
#include <stdio.h>
#include <stdlib.h>
// Definição da estrutura do nó
struct Node {
int data;
struct Node* next;
};
// Função para inserção no início da lista
void insertAtBeginning(struct Node** head, int newData) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = newData;
newNode->next = *head;
*head = newNode;
}
// Função para exibição da lista
void displayList(struct Node* head) {
struct Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// Função para consulta na lista
int searchInList(struct Node* head, int searchData) {
struct Node* current = head;
while (current != NULL) {
if (current->data == searchData) {
return 1; // Encontrado
}
current = current->next;
}
return 0; // Não encontrado
}
// Função para atualização na lista
void updateInList(struct Node* head, int oldData, int newData) {
struct Node* current = head;
while (current != NULL) {
if (current->data == oldData) {
current->data = newData;
return;
}
current = current->next;
}
}
// Função para remoção na lista
void removeFromList(struct Node** head, int dataToRemove) {
struct Node* current = *head;
struct Node* prev = NULL;
// Caso o nó a ser removido seja o primeiro
if (current != NULL && current->data == dataToRemove) {
*head = current->next;
free(current);
return;
}
// Busca pelo nó a ser removido
while (current != NULL && current->data != dataToRemove) {
prev = current;
current = current->next;
}
// Se o nó não estiver presente
if (current == NULL) {
printf("Elemento %d não encontrado na lista.\n", dataToRemove);
return;
}
// Desvincula o nó da lista
prev->next = current->next;
// Libera a memória do nó removido
free(current);
}
// Função principal
int main() {
struct Node* head = NULL;
int choice, data, searchData, newData, dataToRemove;
do {
printf("\n1. Inclusao\n2. Consulta\n3. Alteracao\n4. Remocao\n5. Exibir Lista\n0. Sair\nEscolha
uma opcao: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Digite o valor a ser incluido: ");
scanf("%d", &data);
insertAtBeginning(&head, data);
break;
case 2:
printf("Digite o valor a ser consultado: ");
scanf("%d", &searchData);
if (searchInList(head, searchData)) {
printf("Elemento %d encontrado na lista.\n", searchData);
} else {
printf("Elemento %d nao encontrado na lista.\n", searchData);
}
break;
case 3:
printf("Digite o valor a ser alterado: ");
scanf("%d", &data);
printf("Digite o novo valor: ");
scanf("%d", &newData);
updateInList(head, data, newData);
break;
case 4:
printf("Digite o valor a ser removido: ");
scanf("%d", &dataToRemove);
removeFromList(&head, dataToRemove);
break;
case 5:
printf("Lista atual: ");
displayList(head);
break;
case 0:
printf("Saindo do programa.\n");
break;
default:
printf("Opcao invalida. Tente novamente.\n");
}
} while (choice != 0);
return 0;
}