GatoBooster

List.c (Lab Yo)

Mar 21st, 2018
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "List.h"
  4. /*
  5. typedef struct Node{
  6.     void* data;
  7.     struct Node* next;
  8.     struct Node* prev;
  9. } node;
  10.  
  11. typedef struct{
  12.     node* first; //puntero al primer elemento
  13.     node* current;
  14. }Lista;
  15. */
  16. ///////////////////////////////////////////////////
  17. ///////////////////////////////////////////////////
  18. //elimina el primer dato de la lista
  19. /*void popfront(List* L);
  20.  
  21. //elimina el 򬴩mo dato de la lista
  22. void popback(List* L);
  23.  
  24. //inserta el dato a continuaci󮠤el 򬴩mo accedido usando first o next
  25. void pushcurrent(List* L, void* data);
  26.  
  27. //retorna el siguiente dato de la lista
  28. void* next(List* L);
  29.  
  30. //retorna el 򬴩mo dato de la lista
  31. void* last(List* L);*/
  32. ///////////////////////////////////////////////////
  33. ///////////////////////////////////////////////////
  34. Lista* createList(){
  35. Lista* L;
  36.  
  37. L = (Lista*) malloc (sizeof(Lista));
  38.  
  39. L->first = NULL;
  40. L->current = NULL;
  41.  
  42. return L;
  43. }
  44. ////////////////////////////////////////////
  45. void* first(Lista* list){
  46.  
  47. list->current = list->first;
  48.  
  49. return list->current->data;
  50. }
  51.  
  52. void* next(Lista *list){
  53.  
  54. list->current = list->current->next;
  55.  
  56. return list->current->data;
  57. }
  58. ///////////////////////////////////////////
  59. node* createNode(void* data){
  60.     node* n = (node*) calloc(1, sizeof(node));
  61.     n->data = data;
  62.     n->next= NULL;
  63.     return n;
  64. }
  65. ///////////////////////////////////////////
  66. void pushBack(Lista* list, void* data){
  67.  
  68.     node* nodo = createNode(data);
  69.     node* nodoaux = createNode(data);
  70.  
  71.     if(list->first == NULL){
  72.         list->first = nodo;       //Se le asigna al primer node El "nodo"
  73.         list->first->next = nodo; //Se le asigna al nodo que esta después del primero El "nodo";
  74.         list->first->prev = nodo; //Se le asigna al que viene antes del primero El "nodo"
  75.     }else{
  76.         nodoaux = list->first->prev; //Se le asigna a "nodeaux" el nodo que viene antes del "primer nodo"
  77.         list->first->prev = nodo;    //Se le asigna "nodo" al nodo que viene "antes del primer nodo"
  78.         nodo->prev = nodoaux;        //Se le asigna "nodoaux" al nodo que esta "antes de nodo"
  79.         nodo->next = list->first;    //Se le asigna el "primer nodo" al nodo que esta "después del nodo"
  80.         nodoaux->next = nodo;        //Se le asigna "nodo" al nodo que viene "después de nodoaux"
  81.     }
  82. }
  83. //////////////////////////////////////////
  84. void pushFront(Lista* L, void* dato) {
  85. node* nodo= createNode(dato);
  86.  
  87.     if(L->first == NULL){
  88.         nodo->next = nodo;
  89.         nodo->prev = nodo;
  90.         L->first = nodo;
  91.     }else{
  92.         nodo->next = L->first;
  93.         nodo->prev = L->first->prev;
  94.         L->first->prev->next = nodo;
  95.         L->first->prev = nodo;
  96.         L->first = nodo;
  97.     }
  98. }
  99. /////////////////////////////////////////////
  100. void popCurrent(Lista* list){
  101.  
  102. if(list->current->prev != NULL){
  103.     list->current->prev->next = list->current->next;
  104. }else{
  105.     list->first = list->current->next;
  106. }
  107. if(list->current->next!= NULL)
  108.     list->current->next->prev =list->current->prev;
  109. }
  110. //////////////////////////////////////////////
  111.  
  112.  /////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment