GatoBooster

Lab 2 3° Semestre

Mar 16th, 2018
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.54 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. Utilizando la Siguiente estructura (lista doblemente enlazada circular):
  3.  
  4. typedef struct Node{
  5.     void* data;
  6.     struct Node* next;
  7.     struct Node* prev;
  8. } node;
  9.  
  10. typedef struct{
  11.     node* first; //puntero al primer elemento
  12.     node* current;
  13. }Lista;
  14.  
  15. Cree la Función Lista* createList() la cual retorna una instancia del tipo de dato Lista con sus valores inicializados.
  16. _______________________________________________________________________________________________________________________________________
  17. Lista* createList(){
  18. Lista* L;  
  19.  
  20. L = (Lista*) malloc (sizeof(Lista));
  21.  
  22. L->first = NULL;
  23. L->current = NULL;
  24.  
  25. return L;    
  26. }
  27.  
  28. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. Cree las funciones void* first(Lista* list) y void* next(Lista *list) las cuales retornan un puntero al primer dato de la lista y un puntero al dato que está a continuación del nodo current respectivamente.
  30.  
  31. Recuerde actualizar la ubicación del current en cada caso.
  32. _______________________________________________________________________________________________________________________________________
  33. void* first(Lista* list){
  34.  
  35. list->current = list->first;
  36.  
  37. return list->current->data;
  38. }
  39.  
  40. void* next(Lista *list){
  41.  
  42. list->current = list->current->next;
  43.  
  44. return list->current->data;
  45. }
  46. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. Cree las funciones void pushBack(Lista* list, void* data),  la cual agrega un nodo al final de la lista.
  48.  
  49. Puede utilizar la función node* _createNode(void* data)  la cual crea, inicializa y retorna un nuevo nodo.
  50. _______________________________________________________________________________________________________________________________________
  51. void pushBack(Lista* list, void* data){
  52.    
  53.     node* nodo = _createNode(data);
  54.     node* nodoaux = _createNode(data);
  55.    
  56.     if(list->first == NULL){
  57.         list->first = nodo;       //Se le asigna al primer node El "nodo"
  58.         list->first->next = nodo; //Se le asigna al nodo que esta después del primero El "nodo";
  59.         list->first->prev = nodo; //Se le asigna al que viene antes del primero El "nodo"
  60.     }else{
  61.         nodoaux = list->first->prev; //Se le asigna a "nodeaux" el nodo que viene antes del "primer nodo"
  62.         list->first->prev = nodo;    //Se le asigna "nodo" al nodo que viene "antes del primer nodo"
  63.         nodo->prev = nodoaux;        //Se le asigna "nodoaux" al nodo que esta "antes de nodo"
  64.         nodo->next = list->first;    //Se le asigna el "primer nodo" al nodo que esta "después del nodo"
  65.         nodoaux->next = nodo;        //Se le asigna "nodo" al nodo que viene "después de nodoaux"
  66.     }
  67. }
  68.  
  69. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  70. Cree la Función void pushFront(Lista* L, void* dato) la cual agrega un dato al inicio de la lista.
  71.  
  72. Puede utilizar la función node* _createNode(void *data) la cual crea, inicializa y retorna un nuevo nodo inicializado.
  73. _______________________________________________________________________________________________________________________________________
  74. void pushFront(Lista* L, void* dato) {
  75. node* nodo= _createNode(dato);
  76.  
  77.     if(L->first == NULL){
  78.         nodo->next = nodo;
  79.         nodo->prev = nodo;
  80.         L->first = nodo;
  81.     }else{
  82.         nodo->next = L->first;
  83.         nodo->prev = L->first->prev;
  84.         L->first->prev->next = nodo;
  85.         L->first->prev = nodo;
  86.         L->first = nodo;
  87.     }    
  88. }    
  89. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  90. Enunciado de la pregunta
  91. Cree la función void popCurrent(Lista* list), la cual elimina el nodo que está en la posición current de la lista.
  92. _______________________________________________________________________________________________________________________________________
  93. void popCurrent(Lista* list){
  94.    
  95. if(list->current->prev != NULL){
  96.     list->current->prev->next = list->current->next;
  97. }else{
  98.     list->first = list->current->next;
  99. }
  100. if(list->current->next!= NULL)
  101.     list->current->next->prev =list->current->prev;
  102. }
  103. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. Cree la función void clean(Lista* L); la cual vacía la lista L por completo.
  105.  
  106. Sugerencia: Use las función void popFront(Lista* list) para eliminar los elementos de la lista.
  107. _______________________________________________________________________________________________________________________________________
  108.  void clean(Lista* L){
  109.      while(L->current != NULL){
  110.          popFront(L);
  111.      }
  112.  }
  113. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  114. Usando las operaciones del TDA Lista:
  115.  
  116.     Lista* createList(); //crea y retorna una nueva lista
  117.     void* first(Lista* L); // Retorna un puntero al primer dato de la lista
  118.     void* next(Lista* L);  // Retorna el dato que viene después del current
  119.     void* last(Lista* L); // Retorna un puntero al último dato de la lista
  120.     void* prev(Lista* L); // Retorna el dato anterior al current
  121.     void pushFront(Lista* L, void* dato); //Inserta al comienzo
  122.     void pushBack(Lista* L, void* dato);  //Inserta al final
  123.     void pushCurrent(Lista* L, int* dato);  //Inserta el dato después del current
  124.     void popFront(Lista* L);  //Elimina del comienzo
  125.     void popBack(Lista* L);  //Elimina del final
  126.     void popCurrent(Lista* L);  //Elimina el dato apuntado por current
  127.  
  128. Cree una lista con los números entre el 1 y el 15.
  129.  
  130. Imprima los impares de manera decreciente.
  131. Imprima los pares de manera ascendente.
  132.  
  133. Imprima en pantalla el resultado de la suma de todos los pares multiplicado por la resta de todos los impares.
  134.  
  135. Se espera el siguiente resultado:
  136.  
  137. 15 13 11 9 7 5 3 1
  138. 2 4 6 8 10 12 14
  139. -1904
  140. _______________________________________________________________________________________________________________________________________
  141. Lista* list= createList();
  142.     int i;
  143.  
  144.     for(i=1; i<=15;i++){
  145.         int* j=(int*) malloc (sizeof(int));
  146.         *j=i;
  147.         pushBack(list,j);
  148.     }
  149.  
  150.     int* aux= first(list);
  151.     int* aux2= first(list);
  152.     int* suma= (int*) calloc (1,sizeof(int));
  153.     int* resta= (int*) calloc(1,sizeof(int));
  154.     int* multi= (int*) calloc(1,sizeof(int));
  155.  
  156.     aux= last(list);
  157.     aux2= last(list);
  158.    
  159.     do{
  160.         if(*aux % 2 != 0)
  161.             printf("%d ", *aux);
  162.         aux=prev(list);
  163.     }while(*aux != *aux2);
  164.    
  165.     printf("\n");
  166.  
  167.     aux  = first(list);
  168.     aux2 = first(list);
  169.    
  170.     do{
  171.         if(*aux % 2 == 0)
  172.         printf("%d ", *aux);
  173.         aux = next(list);
  174.     }while(*aux != *aux2);
  175.    
  176.     printf("\n");
  177.  
  178.     do{
  179.         if(*aux % 2 == 0){
  180.             *suma = *suma + *aux;
  181.         }else{
  182.             *resta = *resta - *aux;
  183.         }
  184.         aux = next(list);
  185.     }while(*aux != *aux2);
  186.  
  187.     *multi = (*suma)*(*resta+30);
  188.     printf("%d",*multi);
  189. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment