Prévia do material em texto
Disciplina : Estrutura de Dados
Professor: Luciano de Pinna Vieira
Aluno: Alesson Amaral de Freitas
Matrícula: 1220102540
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.
#include <stdio.h>
#include <stdlib.h>
// Definição da estrutura para um nó da lista
typedef struct Node {
int data;
struct Node* next;
} Node;
// Função para criar um novo nó
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// Função para adicionar um novo elemento ao final da lista
void append(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// Função para imprimir todos os elementos da lista
void displayList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// Função para procurar um elemento na lista
Node* search(Node* head, int key) {
Node* current = head;
while (current != NULL) {
if (current->data == key) {
return current;
}
current = current->next;
}
return NULL;
}
// Função para remover um elemento da lista
void removeElement(Node** head, int data) {
Node* current = *head;
Node* prev = NULL;
while (current != NULL) {
if (current->data == data) {
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
return;
}
prev = current;
current = current->next;
}
}
// Função principal
int main() {
Node* head = NULL;
int choice, data, key;
while (1) {
printf("\n1. Adicionar elemento\n2. Consultar elemento\n3. Remover
elemento\n4. Listar elementos\n5. Sair\n");
printf("Escolha uma opção: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Digite o valor a ser adicionado: ");
scanf("%d", &data);
append(&head, data);
break;
case 2:
printf("Digite o valor a ser consultado: ");
scanf("%d", &key);
Node* result = search(head, key);
if (result != NULL) {
printf("Elemento encontrado: %d\n", result->data);
} else {
printf("Elemento não encontrado.\n");
}
break;
case 3:
printf("Digite o valor a ser removido: ");
scanf("%d", &data);
removeElement(&head, data);
break;
case 4:
printf("Lista de elementos: ");
displayList(head);
break;
case 5:
exit(0);
default:
printf("Opção inválida!\n");
}
}
return 0;
}