Baixe o app do Guru IA

+ 2.000.000 downloads

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.

P

Patrick

Feita pelo app
18/11/24

Resposta do Guru IA

Para implementar uma lista simplesmente encadeada em C que permita realizar operações de inclusão, consulta, alteração e remoção, podemos seguir os passos abaixo. A estrutura básica de uma lista ligada envolve o uso de nós, onde cada nó contém um dado e um ponteiro para o próximo nó na lista.

Aqui está um exemplo básico de como você pode implementar isso:

#include <stdio.h>
#include <stdlib.h>

// Definição da estrutura de um nó
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));
    if (!newNode) {
        printf("Erro ao alocar memória\n");
        exit(1);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// Função para inserir um nó no início da lista
void insertAtBeginning(Node** head, int data) {
    Node* newNode = createNode(data);
    newNode->next = *head;
    *head = newNode;
}

// Função para imprimir a lista
void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

// Função para buscar um elemento na lista
Node* search(Node* head, int key) {
    Node* current = head;
    while (current != NULL && current->data != key) {
        current = current->next;
    }
    return current;
}

// Função para alterar um elemento na lista
void update(Node* head, int oldData, int newData) {
    Node* nodeToUpdate = search(head, oldData);
    if (nodeToUpdate != NULL) {
        nodeToUpdate->data = newData;
    } else {
        printf("Elemento %d não encontrado.\n", oldData);
    }
}

// Função para remover um nó da lista
void deleteNode(Node** head, int key) {
    Node* temp = *head;
    Node* prev = NULL;

    // Se o nó a ser removido é o primeiro nó
    if (temp != NULL && temp->data == key) {
        *head = temp->next;
        free(temp);
        return;
    }

    // Busca pelo nó a ser removido, mantendo o anterior
    while (temp != NULL && temp->data != key) {
        prev = temp;
        temp = temp->next;
    }

    // Se o elemento não foi encontrado
    if (temp == NULL) {
        printf("Elemento %d não encontrado.\n", key);
        return;
    }

    // Desvincula o nó da lista
    prev->next = temp->next;
    free(temp);
}

// Função principal
int main() {
    Node* head = NULL;
    
    // Exemplo de operações
    insertAtBeginning(&head, 10);
    insertAtBeginning(&head, 20);
    insertAtBeginning(&head, 30);

    printf("Lista após inserções:\n");
    printList(head);

    update(head, 20, 25);
    printf("Lista após atualização:\n");
    printList(head);

    deleteNode(&head, 25);
    printf("Lista após remoção:\n");
    printList(head);

    return 0;
}

Explicação das Operações:

  1. Inclusão: Usamos a função insertAtBeginning para adicionar um novo nó no início da lista.

  2. Consulta: A função search percorre a lista para encontrar um nó com o valor especificado.

  3. Alteração: A função update localiza o nó com o valor antigo e atualiza-o com o novo valor.

  4. Remoção: A função deleteNode remove o nó com o valor especificado da lista, ajustando os ponteiros conforme necessário.

Este exemplo demonstra operações básicas em uma lista simplesmente encadeada em C. Você pode expandir essas funções para incluir mais funcionalidades conforme necessário.

Resolvedor

Resolva sua questão com 97% de assertividade

Envie sua pergunta ao nosso resolvedor de tarefas e receba a resposta na hora!

Equipe Meu Guru

Prefere sua atividade resolvida por um professor especialista?

  • Receba resolvida até o seu prazo
  • Converse com o professor pelo chat
  • Garantia de 7 dias contra erros

Perguntas relacionadas