Advertisement
Gabriel_Rofl

LinkedList.c

Nov 10th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include "linked_list.h"
  5.  
  6. t_ele* aloca_elemento(int valor){
  7.     t_ele* ptr = (t_ele *) malloc(sizeof(t_ele));
  8.  
  9.     ptr->dado = valor;
  10.     ptr->proximo = NULL;
  11.     ptr->anterior = NULL;
  12.  
  13.     return ptr;
  14. }
  15.  
  16. Lista* aloca_lista(){
  17.     Lista* ptr = (Lista *) malloc(sizeof(Lista));
  18.  
  19.     ptr->inicio = NULL;
  20.     ptr->fim = NULL;
  21.  
  22.     return ptr;
  23. }
  24.  
  25. int checar_lista(Lista* list){
  26.     return(list->inicio == NULL && list->fim == NULL);
  27. }
  28.  
  29. void inserir_inicio(Lista* list, int valor){
  30.     t_ele* elemento = aloca_elemento(valor);
  31.     if(checar_lista(l)){
  32.         list->inicio = elemento;
  33.         list->final = elemento;
  34.     }
  35.     else{
  36.         elemento->proximo = list->inicio; /*Novo elemento aponta pro antigo primeiro elemento*/
  37.         list->inicio->anterior = elemento; /*O anterior do primeiro elemento que era NULL, agora aponta pro primeiro*/
  38.         list->inicio = elemento; /*Inicio aponta pro novo elemento*/
  39.     }
  40.     if(list->fim == NULL){
  41.         list->fim = list->inicio; /*O final da lista aponta pro primeiro elemento*/
  42.     }
  43. }
  44.  
  45. void inserir_final(Lista* list, int valor){
  46.     t_ele* elemento = aloca_elemento(valor);
  47.     if(checar_lista(list)){
  48.         list->inicio = elemento;/*Se a lista esta vazia, então inicio aponta pra elemento*/
  49.     }
  50.     else{
  51.         list->fim->proximo = elemento;/*O 'proximo' do ultimo elemento da lista, aponta pro novo elemento adicionado*/
  52.         elemento->anterior = list->fim;/*O 'anterior' do ultimo elemento, aponta pro penultimo elemento*/
  53.     }
  54.     list->fim = elemento;/*Fim aponta pro ultimo elemento da lista*/
  55. }
  56.  
  57. void inserir(int pos, int valor, Lista* list){
  58.     if(pos <= 0){
  59.         inserir_inicio(list, valor);/*Se a posicao dada for menor ou igual a zero, insere no inicio*/
  60.     }
  61.     else{
  62.         t_ele* atual = list->inicio;
  63.         int i;
  64.         for(i = 0; i < pos; i++){
  65.             atual = atual->proximo;
  66.             /*Percorre a lista*/
  67.         }
  68.  
  69.         if(atual == NULL || atual == list->fim){
  70.             inserir_final(list, valor);
  71.         }
  72.         else{
  73.             t_ele* elemento = aloca_elemento(valor);
  74.             elemento->proximo = atual->proximo;
  75.             atual->proximo = elemento;
  76.         }
  77.     }
  78. }
  79.  
  80. void acessa_inicio(Lista* list){
  81.     printf("O primeiro elemento da lista eh: %d\n", list->inicio->dado);
  82. }
  83. /*Ambos acessos estão inválidos. CONSERTAR*/
  84. void acessa_final(Lista* list){
  85.     printf("O ultimo elemento da lista eh: %d\n", list->fim->dado);
  86. }
  87.  
  88. void tam_list(Lista* list){
  89.     int counter = 0;
  90.     if(checar_lista(list)){
  91.         printf("LISTA VAZIA\n");
  92.     }
  93.     else{
  94.         t_ele* ptr = list->inicio;
  95.         while(ptr != NULL){
  96.             counter++;
  97.             ptr = ptr->proximo;
  98.         }
  99.         printf("A lista possui %d elementos.\n", counter);
  100.     }
  101. }
  102.  
  103. void print_list(Lista* list){
  104.     t_ele* ptr = list->inicio;
  105.     int i;
  106.     if(checar_lista(list)){
  107.         printf("Lista ta vazia!\n");
  108.         return;
  109.     }
  110.     while(ptr != NULL){
  111.         printf("%d -> ", ptr->dado);
  112.         ptr = ptr -> proximo;
  113.     }
  114.     printf(" NULL\n");
  115. }
  116.  
  117. void remove_list(Lista* list){
  118.     t_ele* ptr = list->inicio;
  119.     int i;
  120.     if(checar_lista(list) ){
  121.         printf("LISTA VAZIA\n");
  122.         return;
  123.     }
  124.     while(ptr != NULL){
  125.         list->inicio = list->inicio->proximo;
  126.         free(ptr);
  127.         ptr = list->inicio;
  128.     }
  129.     free(list);
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement