CarlosWGama icon

Lista montada

CarlosWGama | PRO | 09/19/18 12:36:47 AM UTC | 0 ⭐ | 701 👁️ | Never ⏰ | []
C |

2.88 KB

|

None

|

0 👍

/

0 👎

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
struct no {
    int valor;
    struct no *proximo;
};
 
 
//visualize linked list
 
struct lista {
    struct no *inicio;
    struct no *fim;
};
 
void inserirInicio(struct lista *lista, int valor) {
 
    struct no *novoValor = malloc(sizeof(struct no));
    novoValor->valor = valor;
    novoValor->proximo = NULL;
 
    if (lista->inicio == NULL) {
        lista->inicio = novoValor;
        lista->fim = novoValor;
    } else {
        novoValor->proximo = lista->inicio;
        lista->inicio = novoValor;
    }
}
 
void inserirFinal(struct lista *lista, int valor) {
    struct no *novoNo = malloc(sizeof(struct no));
    novoNo->valor = valor;
    novoNo->proximo = NULL;
 
    if (lista->inicio == NULL) {
        lista->inicio = novoNo;
        lista->fim = novoNo;
    } else {
        lista->fim->proximo = novoNo;
        lista->fim = novoNo;
    }
}
 
void removerValor(struct lista *lista, int valor) {
 
    struct no *aux;
    struct no *auxAnterior = NULL;
    aux = lista->inicio;
 
    //Percorre até o final da lista ou até o achar o valor
    while (aux != NULL && aux->valor != valor) {
        auxAnterior = aux;
        aux = aux->proximo;
    }
 
 
    if (aux == NULL) { //Não achou
        printf("Não achou\n");
    } else {
 
        if (lista->inicio == lista->fim) {
            //Só tem um elemento
            lista->inicio = NULL;
            lista->fim = NULL;
 
        } else if (lista->inicio == aux) {
            //Remover o inicio da lista
            lista->inicio = lista->inicio->proximo;
            //lista->inicio = aux->proximo;
        } else if (lista->fim == aux) {
            //Remove o ultimo elemento da lista
            lista->fim = auxAnterior;
            lista->fim->proximo = NULL;
 
        } else {
            //Remover do meio da lista
            auxAnterior->proximo = aux->proximo;
            aux->proximo = NULL;
        }
         free(aux); //Apaga espaço da memoria
 
    }
 
 
}
 
void listar(struct lista *lista) {
 
    struct no*aux;
    aux = lista->inicio;
    while(aux != NULL) {
        printf("%d\n", aux->valor);
        aux = aux->proximo;
    }
}
 
int main() {
    setlocale(LC_ALL, "");
    struct lista *minhaLista = malloc(sizeof(struct lista));
    minhaLista->inicio = NULL;
    minhaLista->fim = NULL;
 
    inserirInicio(minhaLista, 10);
    inserirInicio(minhaLista, 5);
    inserirFinal(minhaLista, 18);
    inserirFinal(minhaLista, 9);
    inserirInicio(minhaLista, 8);
    inserirInicio(minhaLista, 54);
    inserirFinal(minhaLista, 1);
    inserirInicio(minhaLista, 32);
    inserirFinal(minhaLista, 22);
    removerValor(minhaLista, 5);
    removerValor(minhaLista, 32);
    removerValor(minhaLista, 22);
    removerValor(minhaLista, 100);
    listar(minhaLista);
 
    return 0;
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎