Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /*
- /@autor: Shouldz
- /@Linguagem: C
- /@Descrição: [Estrutura de Dados] Lista Duplamente Encadeada com inserir e remover funcionais.
- */
- typedef struct no{
- int valor;
- struct no *proximo;
- struct no *anterior;
- }no;
- no *criar_no(int valor, no *anterior){
- no *criar_no = malloc(sizeof(no));
- criar_no -> valor = valor;
- criar_no -> proximo = NULL;
- criar_no -> anterior = anterior;
- return criar_no;
- }
- no *inserir(no *lista, int valor){
- //caso base
- if(lista == NULL){
- return criar_no(valor, NULL);
- }else{
- //caso não nulo, inserir no final
- no *auxiliar = lista;
- while(auxiliar -> proximo != NULL){
- auxiliar = auxiliar -> proximo;
- }
- auxiliar -> proximo = criar_no(valor, auxiliar);
- }
- return lista;
- }
- no *remover(no *lista, int valor){
- //caso base
- no *auxiliar = lista;
- if(lista == NULL){
- return lista;
- //caso lista com apenas um elemento
- }else if(auxiliar -> valor == valor && auxiliar -> proximo == NULL && auxiliar -> anterior == NULL){
- auxiliar = NULL;
- return auxiliar;
- //caso primeiro elemento
- }else if(auxiliar -> valor == valor){
- auxiliar = auxiliar -> proximo;
- auxiliar -> anterior = NULL;
- return auxiliar;
- }else{
- //caso segundo elemento em diante
- while(auxiliar -> proximo != NULL){
- if(auxiliar -> proximo -> valor == valor){
- auxiliar -> proximo = auxiliar -> proximo -> proximo;
- return lista;
- }
- auxiliar = auxiliar -> proximo;
- }
- }
- }
- void imprimirA(no *lista){
- no *auxiliar = lista;
- if(auxiliar == NULL){
- printf("LISTA VAZIA");
- }
- while(auxiliar != NULL){
- printf("[%d] ", auxiliar -> valor);
- auxiliar = auxiliar -> proximo;
- }
- printf("\n");
- }
- void visualizarPonteiros(no *lista){
- no *auxiliar = lista;
- while(auxiliar != NULL){
- if(auxiliar -> anterior == NULL && auxiliar -> proximo != NULL){
- printf("[NULL <=%i=> %i]", auxiliar -> valor, auxiliar -> proximo -> valor);
- }else if(auxiliar -> proximo == NULL && auxiliar -> anterior != NULL){
- printf("[%i <=%i=> NULL]", auxiliar -> anterior -> valor, auxiliar -> valor);
- }else if(auxiliar -> proximo == NULL && auxiliar -> anterior == NULL){
- printf("[NULL <=%i=> NULL]", auxiliar -> valor);
- }else{
- printf("[%i <=%i=> %i] ", auxiliar -> anterior -> valor, auxiliar -> valor,
- auxiliar -> proximo -> valor);
- }
- auxiliar = auxiliar -> proximo;
- }
- printf("\n");
- }
- void main(){
- no *lista = NULL;
- lista = inserir(lista, 15);
- lista = inserir(lista, 30);
- imprimirA(lista);
- lista = remover(lista, 30);
- imprimirA(lista);
- visualizarPonteiros(lista);
- lista = remover(lista, 15);
- imprimirA(lista);
- }
Advertisement
Add Comment
Please, Sign In to add comment