Advertisement
tomasfdel

Estructuras I Práctica 3

May 8th, 2017
391
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 19.23 KB | None | 0 0
  1. ///EJERCICIO 1
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #define MAX_PILA 50
  6.  
  7. typedef struct _Pila {
  8.     int datos[MAX_PILA];
  9.     int ultimo;
  10. } *Pila;
  11.  
  12.  
  13. Pila pila_new(){
  14.     Pila nueva = (Pila) malloc (sizeof(struct _Pila));
  15.     nueva -> ultimo = 0;
  16.     return nueva;
  17. }
  18.  
  19. int pila_is_empty (Pila puntero){
  20.     return (puntero->ultimo == 0)? 1 : 0;
  21. }
  22.  
  23. ///No dice qué hacer en caso que la lista sea vacía.
  24. int pila_top (Pila puntero){
  25.     return puntero->datos[puntero->ultimo-1];
  26. }
  27.  
  28. void pila_push (Pila puntero, int dato){
  29.     if (puntero -> ultimo != MAX_PILA -1)
  30.         puntero -> datos[(puntero->ultimo)++] = dato;
  31. }
  32.  
  33. void pila_pop (Pila puntero){
  34.     if (puntero -> ultimo != 0)
  35.         puntero->ultimo--;
  36. }
  37.  
  38. void pila_print (Pila puntero){
  39.     for(int i=0; i < puntero -> ultimo ; i++)
  40.         printf("%d  ", puntero -> datos[i]);
  41.  
  42.     printf("\n");
  43. }
  44.  
  45.  
  46.  
  47. int main(){
  48.     Pila puntero = pila_new();
  49.     pila_is_empty(puntero)? printf("La pila inicia vacia\n") : printf("Esto no deberia pasar\n");
  50.  
  51.     pila_push(puntero, 1);
  52.     pila_push(puntero, 2);
  53.     pila_push(puntero, 3);
  54.     pila_push(puntero, 4);
  55.     pila_push(puntero, 5);
  56.     pila_is_empty(puntero)? printf("No deberia pasar\n") : printf("Despues de agregar, deja de estarlo\n");
  57.  
  58.  
  59.     pila_print(puntero);
  60.     printf("Tope: %d \n", pila_top(puntero));
  61.     pila_pop(puntero);
  62.     printf("Tope: %d \n", pila_top(puntero));
  63.     pila_print(puntero);
  64.     return 0;
  65. }
  66.  
  67.  
  68.  
  69.  
  70.  
  71. ///EJERCICIO 2
  72.  
  73. #include <stdio.h>
  74. #include <stdlib.h>
  75. #define PILA_INICIAL 50
  76.  
  77. typedef struct _Pila {
  78.     int* datos;
  79.     int ultimo;
  80.     int maximo;
  81. } *Pila;
  82.  
  83.  
  84. Pila pila_new(){
  85.     Pila nueva = (Pila) malloc (sizeof(struct _Pila));
  86.     nueva -> datos = (int *) malloc (sizeof(int) * PILA_INICIAL);
  87.     nueva -> ultimo = 0;
  88.     nueva -> maximo = PILA_INICIAL;
  89.     return nueva;
  90. }
  91.  
  92. int pila_is_empty (Pila puntero){
  93.     return (puntero->ultimo == 0)? 1 : 0;
  94. }
  95.  
  96. ///No dice qué hacer en caso que la lista sea vacía.
  97. int pila_top (Pila puntero){
  98.     return puntero->datos[puntero->ultimo-1];
  99. }
  100.  
  101. void pila_push (Pila puntero, int dato){
  102.     if (puntero -> ultimo == puntero -> maximo -1){
  103.         puntero -> maximo += PILA_INICIAL;
  104.         puntero -> datos = (int *) realloc (puntero -> datos, sizeof(int) * puntero-> maximo);
  105.     }
  106.         puntero -> datos[(puntero->ultimo)++] = dato;
  107. }
  108.  
  109. void pila_pop (Pila puntero){
  110.     if (puntero -> ultimo != 0)
  111.         puntero->ultimo--;
  112. }
  113.  
  114. void pila_print (Pila puntero){
  115.     for(int i=0; i < puntero -> ultimo ; i++)
  116.         printf("%d  ", puntero -> datos[i]);
  117.  
  118.     printf("\n");
  119. }
  120.  
  121.  
  122.  
  123. int main(){
  124.     Pila puntero = pila_new();
  125.     for(int i=0; i<101; i++)
  126.         pila_push(puntero, 50 - i);
  127.     pila_print(puntero);
  128.     return 0;
  129. }
  130.  
  131.  
  132.  
  133.  
  134.  
  135. ///EJERCICIO 3
  136.  
  137. #include <stdio.h>
  138. #include <stdlib.h>
  139.  
  140. typedef struct _SNodo {
  141.   int dato;
  142.   struct _SNodo *sig;
  143. } SNodo;
  144.  
  145. typedef SNodo *SList;
  146. typedef SList Pila;
  147.  
  148.  
  149. Pila pila_new() {
  150.   return NULL;
  151. }
  152.  
  153. int pila_is_empty(Pila pila) {
  154.   return pila == NULL;
  155. }
  156.  
  157. int pila_top (Pila pila){
  158.     return pila -> dato;
  159. }
  160.  
  161. Pila pila_push(Pila pila, int dato) {
  162.   Pila nuevoNodo = malloc(sizeof(SNodo));
  163.   nuevoNodo -> dato = dato;
  164.   nuevoNodo -> sig = pila;
  165.   return nuevoNodo;
  166. }
  167.  
  168. Pila pila_pop(Pila pila){
  169.     if(pila != NULL){
  170.         Pila aEliminar = pila;
  171.         pila = pila -> sig;
  172.         free(aEliminar);
  173.     }
  174.     return pila;
  175. }
  176.  
  177. void pila_print (Pila pila){
  178.     for(; pila != NULL; pila = pila -> sig)
  179.         printf("%d  ", pila -> dato);
  180.     printf("\n");
  181. }
  182.  
  183. void pila_free (Pila pila){
  184.     for(Pila aux = pila; pila != NULL; pila = aux){
  185.         aux = pila->sig;
  186.         free(pila);
  187.     }
  188. }
  189.  
  190.  
  191. int main(){
  192.     Pila puntero = pila_new();
  193.     pila_is_empty(puntero)? printf("La pila inicia vacia\n") : printf("Esto no deberia pasar\n");
  194.  
  195.     puntero = pila_push(puntero, 1);
  196.     puntero = pila_push(puntero, 2);
  197.     puntero = pila_push(puntero, 3);
  198.     puntero = pila_push(puntero, 4);
  199.     puntero = pila_push(puntero, 5);
  200.     pila_is_empty(puntero)? printf("No deberia pasar\n") : printf("Despues de agregar, deja de estarlo\n");
  201.  
  202.  
  203.     pila_print(puntero);
  204.     printf("Tope: %d \n", pila_top(puntero));
  205.     puntero = pila_pop(puntero);
  206.     printf("Tope: %d \n", pila_top(puntero));
  207.     pila_print(puntero);
  208.  
  209.  
  210.     pila_free(puntero);
  211.     return 0;
  212. }
  213.  
  214.  
  215.  
  216.  
  217.  
  218. ///EJERCICIO 4
  219.  
  220. #include <stdio.h>
  221. #include <stdlib.h>
  222.  
  223. typedef struct _SNodo {
  224.   int dato;
  225.   struct _SNodo *sig;
  226. } SNodo;
  227.  
  228. typedef SNodo *SList;
  229. typedef SList Pila;
  230.  
  231.  
  232. Pila pila_new() {
  233.   return NULL;
  234. }
  235.  
  236. int pila_top (Pila pila){
  237.     return pila -> dato;
  238. }
  239.  
  240. Pila pila_push(Pila pila, int dato) {
  241.   Pila nuevoNodo = malloc(sizeof(SNodo));
  242.   nuevoNodo -> dato = dato;
  243.   nuevoNodo -> sig = pila;
  244.   return nuevoNodo;
  245. }
  246.  
  247. Pila pila_pop(Pila pila){
  248.     if(pila != NULL){
  249.         Pila aEliminar = pila;
  250.         pila = pila -> sig;
  251.         free(aEliminar);
  252.     }
  253.     return pila;
  254. }
  255.  
  256. void pila_print (Pila pila){
  257.     for(; pila != NULL; pila = pila -> sig)
  258.         printf("%d  ", pila -> dato);
  259.     printf("\n");
  260. }
  261.  
  262. SList slist_reverse (SList lista){
  263.     Pila pila = pila_new();
  264.  
  265.     for(SList aux = lista; aux != NULL; aux = aux -> sig)
  266.         pila = pila_push(pila, aux->dato);
  267.  
  268.     for(SList aux = lista; aux != NULL; aux = aux -> sig){
  269.         aux -> dato = pila_top(pila);
  270.         pila = pila_pop(pila);
  271.     }
  272.     return lista;
  273. }
  274.  
  275.  
  276. int main(){
  277.     Pila puntero = pila_new();
  278.  
  279.     puntero = pila_push(puntero, 1);
  280.     puntero = pila_push(puntero, 2);
  281.     puntero = pila_push(puntero, 3);
  282.     puntero = pila_push(puntero, 4);
  283.     puntero = pila_push(puntero, 5);
  284.     pila_print(puntero);
  285.     printf("Al reves es fea, cambiemos eso... \n");
  286.     puntero = slist_reverse (puntero);
  287.     pila_print(puntero);
  288.     return 0;
  289. }
  290.  
  291.  
  292.  
  293.  
  294.  
  295. ///EJERCICIO 5
  296.  
  297. #include <stdio.h>
  298. #include <stdlib.h>
  299. #define MAX_COLA 50
  300.  
  301.  
  302. typedef struct _Cola {
  303. int datos[MAX_COLA];
  304. int primero, ultimo;
  305. } *Cola;
  306.  
  307. Cola cola_new(){
  308.     Cola puntero = (Cola) malloc (sizeof (struct _Cola));
  309.     puntero -> primero = puntero -> ultimo = 0;
  310.     return puntero;
  311. }
  312.  
  313. int cola_is_empty (Cola cola){
  314.     return (cola->primero == cola->ultimo)? 1 : 0 ;
  315. }
  316.  
  317. int cola_front (Cola cola){
  318.     return cola->datos[cola->primero];
  319. }
  320.  
  321. void cola_enqueue (Cola cola, int dato){
  322.     if(cola -> ultimo != -1){
  323.         cola -> datos [cola -> ultimo] = dato;
  324.         if(cola -> ultimo == MAX_COLA - 1)
  325.             cola -> ultimo = 0;
  326.         else
  327.             cola -> ultimo ++;
  328.  
  329.         if (cola -> ultimo == cola ->primero)
  330.             cola -> ultimo = -1;
  331.     }
  332. }
  333.  
  334. void cola_dequeue (Cola cola){
  335.     if (cola -> primero != cola -> ultimo){
  336.         cola -> primero ++;
  337.         if (cola -> ultimo == -1)
  338.             cola -> ultimo = cola -> primero - 1;
  339.     if (cola -> primero == MAX_COLA) cola -> primero = 0;
  340.     }
  341. }
  342.  
  343. void cola_print(Cola cola){
  344.     if(cola -> ultimo == -1){
  345.         for(int i = cola -> primero, j = 0; j < MAX_COLA ; i++, j++){
  346.             printf("%d   ", cola->datos[i]);
  347.             if(i == MAX_COLA - 1)
  348.                 i = -1;
  349.     }
  350.         printf("\n");
  351.     }
  352.     else{
  353.     for(int i = cola -> primero; i != cola -> ultimo; i++){
  354.         printf("%d   ", cola->datos[i]);
  355.         if(i == MAX_COLA - 1)
  356.             i = -1;
  357.     }
  358.     printf("\n");
  359.  
  360.  
  361.     }
  362. }
  363.  
  364.  
  365.  
  366.  
  367. int main(){
  368.     Cola cola = cola_new();
  369.     for (int i = 0; i < MAX_COLA; i++)
  370.         cola_enqueue(cola, i);
  371.     cola_print(cola);
  372.  
  373.  
  374.     for (int i = 0; i < MAX_COLA / 2 ; i++)
  375.         cola_dequeue(cola);
  376.     cola_print(cola);
  377.  
  378.  
  379.     for(int i = 0; i < MAX_COLA; i++)
  380.         cola_enqueue(cola, i);
  381.     cola_print(cola);
  382.  
  383.     return 0;
  384. }
  385.  
  386.  
  387.  
  388.  
  389. ///EJERCICIO 6
  390.  
  391. #include <stdio.h>
  392. #include <stdlib.h>
  393.  
  394. typedef struct _Cola {
  395.     int dato;
  396.     struct _Cola *anterior, *siguiente;
  397. } *Cola;
  398.  
  399. Cola cola_new(){
  400.     return NULL;
  401. }
  402.  
  403. int cola_is_empty (Cola cola){
  404.     return (cola == NULL)? 1 : 0;
  405. }
  406.  
  407. int cola_front (Cola cola){
  408.     return cola -> dato;
  409. }
  410.  
  411. Cola cola_enqueue (Cola cola, int dato){
  412.     Cola nuevoNodo = (Cola) malloc (sizeof(struct _Cola));
  413.     nuevoNodo -> dato = dato;
  414.  
  415.     if (cola == NULL){
  416.         nuevoNodo -> siguiente = nuevoNodo -> anterior = nuevoNodo;
  417.         return nuevoNodo;
  418.     }
  419.  
  420.     nuevoNodo -> siguiente = cola;
  421.     nuevoNodo -> anterior = cola -> anterior;
  422.     cola -> anterior -> siguiente = nuevoNodo;
  423.     cola -> anterior = nuevoNodo;
  424.     return cola;
  425. }
  426.  
  427. Cola cola_dequeue (Cola cola){
  428.     if(cola == NULL)
  429.         return NULL;
  430.  
  431.     if (cola -> siguiente == cola){
  432.         free(cola);
  433.         return NULL;
  434.     }
  435.  
  436.     cola -> siguiente -> anterior = cola -> anterior;
  437.     cola -> anterior -> siguiente = cola -> siguiente;
  438.  
  439.     Cola aux = cola -> siguiente;
  440.     free(cola);
  441.     return aux;
  442. }
  443.  
  444. void cola_print (Cola cola){
  445.     if (cola != NULL){
  446.         printf("%d  ", cola -> dato);
  447.         for(Cola aux = cola -> siguiente; aux != cola; aux = aux ->siguiente)
  448.             printf("%d  ", aux -> dato);
  449.     }
  450.  
  451.     printf("\n");
  452. }
  453.  
  454.  
  455. int main(){
  456.     Cola cola = cola_new();
  457.     cola = cola_enqueue(cola, 1);
  458.     cola = cola_dequeue(cola);
  459.     cola = cola_dequeue(cola);
  460.     (cola_is_empty(cola) == 1)? printf("La cola queda vacia\n") : printf("No deberia pasar\n");
  461.     printf("Esta linea no deberia mostrar nada: ");cola_print(cola);
  462.  
  463.     for(int i=0; i<10; i++)
  464.         cola = cola_enqueue(cola, i);
  465.  
  466.     printf("Esta si: ");
  467.     cola_print(cola);
  468.  
  469.     return 0;
  470. }
  471.  
  472.  
  473.  
  474.  
  475. ///EJERCICIOS 7 Y 10
  476.  
  477. #include <stdio.h>
  478. #include <stdlib.h>
  479. #define MAX_HEAP 128
  480.  
  481. typedef struct _BHeap {
  482.     int datos[MAX_HEAP];
  483.     int nelems;
  484. } *BHeap;
  485.  ///datos[0] no existe, escribo desde datos[1].
  486.  
  487.  
  488. BHeap bheap_new(){
  489.     BHeap nuevo = (BHeap) malloc (sizeof(struct _BHeap));
  490.     nuevo -> nelems = 0;
  491.     return nuevo;
  492. }
  493.  
  494. int bheap_is_empty (BHeap heap){
  495.     return (heap -> nelems == 0)? 1 : 0;
  496. }
  497.  
  498. ///No especifica que ocurre si es vacio, supongo que no lo va a ser.
  499. int bheap_min (BHeap heap){
  500.     return heap -> datos[1];
  501. }
  502.  
  503. void bheap_pop_min (BHeap heap){
  504.     int aux;
  505.     if(! bheap_is_empty(heap) ){
  506.         heap -> datos [1] = heap -> datos [heap -> nelems];
  507.         heap -> nelems --;
  508.         for(int index = 1; index <= heap -> nelems;){
  509.           if(index * 2 + 1 <= heap -> nelems){
  510.             if(heap -> datos[index * 2] <= heap -> datos [index * 2 + 1]){
  511.                 aux = heap -> datos [index];
  512.                 heap -> datos [index] = heap -> datos[index * 2];
  513.                 heap -> datos[index * 2] = aux;
  514.                 index *= 2;
  515.               }
  516.             else{
  517.                 aux = heap -> datos [index];
  518.                 heap -> datos [index] = heap -> datos[index * 2 + 1];
  519.                 heap -> datos[index * 2 + 1] = aux;
  520.                 index = index * 2 + 1;
  521.               }
  522.             }
  523.           else if(index * 2 <= heap -> nelems && heap -> datos [index * 2] < heap -> datos [index]){
  524.                 aux = heap -> datos [index];
  525.                 heap -> datos [index] = heap -> datos[index * 2];
  526.                 heap -> datos[index * 2] = aux;
  527.                 index *= 2;
  528.             }
  529.           else index *= 2;
  530.         }
  531.       }
  532. }
  533.  
  534. void bheap_insert (BHeap heap, int dato){
  535.     if(heap -> nelems != MAX_HEAP - 1){
  536.         int aux;
  537.         heap -> nelems ++;
  538.         heap -> datos [heap -> nelems] = dato;
  539.         for (int index = heap -> nelems; index > 1; index /= 2){
  540.           if(heap -> datos[index] < heap -> datos[index/2]){
  541.             aux = heap -> datos [index/2];
  542.             heap -> datos [index/2] = heap -> datos [index];
  543.             heap -> datos [index] = aux;
  544.             }
  545.           }
  546.       }
  547. }
  548.  
  549. void bheap_print (BHeap heap){
  550.   int potencia = 2;
  551.   for(int i = 1; i <= heap -> nelems; i++){
  552.       printf("%d  ", heap -> datos [i]);
  553.       if( (i+1) == potencia){
  554.         printf("\n");
  555.         potencia *= 2;
  556.         }
  557.     }
  558.   printf("\n\n");
  559. }
  560.  
  561.  
  562. void bheap_free (BHeap heap){
  563.   free(heap);
  564. }
  565.  
  566.  
  567. BHeap bheap_merge (BHeap heap1, BHeap heap2){
  568.     if ( heap1 -> nelems + heap2 -> nelems < MAX_HEAP){
  569.         for (int i = 1; i <= heap2 -> nelems; i++)
  570.             bheap_insert(heap1, heap2->datos[i]);
  571.     }
  572.  
  573.     return heap1;
  574. }
  575.  
  576.  
  577. int main(){
  578.     BHeap pepe = bheap_new(), pepe2 = bheap_new();
  579.     for(int i = 0; i < 20; i++)
  580.       bheap_insert (pepe, 20 - i);
  581.     bheap_print(pepe);
  582.  
  583.     for(int i = 0; i < 10; i++)
  584.       bheap_pop_min (pepe);
  585.     bheap_print(pepe);
  586.  
  587.     for(int i = 0; i < 20; i++)
  588.       bheap_insert (pepe2, 100 - 10 * i);
  589.  
  590.     pepe = bheap_merge(pepe, pepe2);
  591.     bheap_print(pepe);
  592.  
  593.  
  594.     bheap_free(pepe);
  595.     bheap_free(pepe2);
  596.     return 0;
  597. }
  598.  
  599. ///EJERCICIO 8
  600.  
  601. #include <stdio.h>
  602. #include <stdlib.h>
  603. #define MAX_SIZE 31
  604.  
  605. ///Array circular.
  606. /*
  607. typedef struct arrayCirc{
  608.     int inicio, fin;
  609.     int array[MAX_SIZE];
  610. }*PCola;
  611.  
  612. void swapp(int* a, int* b){
  613.     int aux = *a;
  614.     *a = *b;
  615.     *b = aux;
  616. }
  617.  
  618. PCola pcola_crear(){
  619.     PCola nuevo = (PCola) malloc(sizeof(struct arrayCirc));
  620.     nuevo -> inicio = nuevo -> fin = 0;
  621. }
  622.  
  623. int pcola_esta_vacia(PCola cola){
  624.     return (cola -> inicio == cola -> fin)? 1 : 0;
  625. }
  626.  
  627. int pcola_minimo(PCola cola){
  628.     return cola -> array[cola -> inicio];
  629. }
  630.  
  631. void pcola_eliminar_minimo(PCola cola){
  632.     if (!pcola_esta_vacia(cola)){
  633.         cola -> inicio ++;
  634.         if (cola -> inicio == MAX_SIZE)
  635.             cola -> inicio = 0;
  636.     }
  637. }
  638.  
  639. void pcola_insertar(PCola cola, int dato){
  640.     if (cola -> inicio == (cola -> fin + 1) % MAX_SIZE )
  641.         return;
  642.  
  643.     int i;
  644.     for(i = cola -> inicio; i != cola->fin && dato > cola -> array[i]; i++)
  645.         if (i == MAX_SIZE - 1) i = -1;
  646.  
  647.     cola -> fin = (cola -> fin + 1) % MAX_SIZE;
  648.     for(int j = cola -> fin; j != i; j--){
  649.         if(j == 0){
  650.             swapp(&(cola -> array[MAX_SIZE-1]) , &(cola -> array[j]) );
  651.             j = MAX_SIZE;
  652.         }
  653.         swapp(&(cola -> array[j-1]) , &(cola -> array[j]) );
  654.     }
  655.     cola -> array [i] = dato;
  656. }
  657.  
  658.  
  659. void pcola_mostrar(PCola cola){
  660.     for(int i = cola -> inicio; i != cola -> fin; i++){
  661.         printf("%d   ", cola -> array[i]);
  662.         if(i == MAX_SIZE - 1) i = -1;
  663.     }
  664. }
  665. */
  666.  
  667.  
  668. ///Lista enlazada.
  669. /*typedef struct Nodo{
  670.     int dato;
  671.     struct Nodo* siguiente;
  672. }*PCola;
  673.  
  674.  
  675. PCola pcola_crear(){
  676.     return NULL;
  677. }
  678.  
  679. int pcola_esta_vacia(PCola cola){
  680.     return (cola == NULL)? 1 : 0;
  681. }
  682.  
  683. int pcola_minimo(PCola cola){
  684.     return cola ->dato;
  685. }
  686.  
  687. PCola pcola_eliminar_minimo(PCola cola){
  688.     if(cola != NULL){
  689.         PCola aux = cola;
  690.         cola = cola -> siguiente;
  691.         free(aux);
  692.         return cola;
  693.     }
  694. }
  695.  
  696. PCola pcola_insertar(PCola cola, int dato){
  697.     PCola nuevoNodo = (PCola) malloc (sizeof(struct Nodo));
  698.     nuevoNodo -> dato = dato;
  699.     nuevoNodo -> siguiente = NULL;
  700.  
  701.     if(cola == NULL)
  702.         return nuevoNodo;
  703.  
  704.     if (nuevoNodo -> dato <= cola -> dato){
  705.         nuevoNodo -> siguiente = cola;
  706.         return nuevoNodo;
  707.     }
  708.  
  709.     PCola auxiliar;
  710.     for(auxiliar = cola; auxiliar -> siguiente != NULL && auxiliar -> siguiente -> dato < nuevoNodo -> dato; auxiliar = auxiliar -> siguiente );
  711.  
  712.     nuevoNodo -> siguiente = auxiliar -> siguiente;
  713.     auxiliar -> siguiente = nuevoNodo;
  714.     return cola;
  715. }
  716.  
  717.  
  718. void pcola_mostrar(PCola cola){
  719.     for(;cola != NULL; cola = cola -> siguiente)
  720.         printf("%d   ", cola -> dato);
  721. }
  722. */
  723.  
  724.  
  725. ///Heap.
  726. /*
  727. typedef struct heap{
  728.     int cantElementos;
  729.     int array[MAX_SIZE];
  730. }*PCola;
  731.  
  732.  
  733. void swapp(int* a, int* b){
  734.     int aux = *a;
  735.     *a = *b;
  736.     *b = aux;
  737. }
  738.  
  739. PCola pcola_crear(){
  740.     PCola nuevaCola = (PCola) malloc (sizeof(struct heap));
  741.     nuevaCola -> cantElementos = 0;
  742.     return nuevaCola;
  743. }
  744.  
  745. int pcola_esta_vacia(PCola cola){
  746.     return (cola -> cantElementos == 0)? 1 : 0;
  747. }
  748.  
  749. int pcola_minimo(PCola cola){
  750.     return cola -> array[0];
  751. }
  752.  
  753. void pcola_eliminar_minimo(PCola cola){
  754.     if(cola -> cantElementos != 0){
  755.         cola -> array[0] = cola -> array[cola -> cantElementos - 1];
  756.         cola -> cantElementos --;
  757.         for(int i = 0; i * 2 + 1 <= MAX_SIZE - 1 ;){
  758.             if(i * 2 + 2 <= MAX_SIZE - 1){
  759.                 if(cola -> array[i*2 + 1] < cola -> array[i*2 + 2]){
  760.                     if(cola -> array[i*2 + 1] < cola -> array[i]){
  761.                         swapp( &(cola -> array[i*2 + 1]), &(cola -> array[i]) );
  762.                         i = i*2 + 1;
  763.                     }
  764.                     else break;
  765.                 }
  766.                 else{
  767.                     if(cola -> array[i*2 + 2] < cola -> array[i]){
  768.                         swapp( &(cola -> array[i*2 + 2]), &(cola -> array[i]) );
  769.                         i = i*2 + 2;
  770.                     }
  771.                     else break;
  772.                 }
  773.             }
  774.             else{
  775.                 if(cola ->array[i*2 + 1] < cola -> array[i]){
  776.                     swapp( &(cola -> array[i*2 + 1]), &(cola -> array[i]) );
  777.                     i = i*2 + 1;
  778.                 }
  779.                 else break;
  780.             }
  781.         }
  782.     }
  783. }
  784.  
  785.  
  786.  
  787. void pcola_insertar(PCola cola, int dato){
  788.     if(cola -> cantElementos != MAX_SIZE){
  789.         cola -> array[cola -> cantElementos] = dato;
  790.         cola -> cantElementos++;
  791.  
  792.         for(int i = cola -> cantElementos - 1; i > 0; i = (i-1)/2){
  793.             if(cola -> array[(i-1)/2] > cola -> array[i])
  794.                 swapp( &(cola -> array[(i-1)/2]), &(cola -> array[i]) );
  795.             else break;
  796.         }
  797.     }
  798. }
  799.  
  800. void pcola_mostrar(PCola cola){
  801.     for(int i = 0; i < cola -> cantElementos; i++)
  802.         printf("%d   ", cola ->array[i]);
  803. }
  804.  
  805. */
  806.  
  807. int main(){
  808.     PCola cola = pcola_crear();
  809.  
  810.     printf("Cola vacia: ");
  811.     pcola_mostrar(cola);
  812.  
  813.     for(int i = 0; i < 50; i++)
  814.         pcola_insertar(cola, 50-i);
  815.  
  816.     printf("\n\nCola: ");
  817.     pcola_mostrar(cola);
  818.  
  819.     for(int i = 0; i < 50; i++)
  820.         pcola_eliminar_minimo(cola);
  821.  
  822.     printf("\n\nCola: ");
  823.     pcola_mostrar(cola);
  824.  
  825.     return 0;
  826. }
  827.  
  828.  
  829.  
  830. ///EJERCICIO 9
  831.  
  832. #include <stdio.h>
  833. #include <stdlib.h>
  834.  
  835. void swap (int array[], int pos1, int pos2){
  836.   int aux = array[pos1];
  837.   array[pos1] = array[pos2];
  838.   array[pos2] = aux;
  839.   }
  840.  
  841. ///Versión 1.
  842. void heapify (int array[], size_t largo){
  843.     for(int nuevo = 0; nuevo < largo; nuevo++){
  844.       for(int i = nuevo; i > 0 ; i = (i-1)/2){
  845.         if(array[i] < array[(i-1)/2])
  846.           swap (array, i, (i-1)/2);
  847.         else break;
  848.       }
  849.     }
  850. }
  851.  
  852. void array_bheap_print (int array[], size_t largo){
  853.   int limite = 0;
  854.   for(int i = 0; i < largo; i++){
  855.       printf("%d  ", array[i]);
  856.       if( i == limite){
  857.         printf("\n");
  858.         limite = limite * 2 + 2;
  859.         }
  860.     }
  861.   printf("\n\n");
  862. }
  863.  
  864. int check_heap (int array[], size_t largo){
  865.   for(int i=0; i < largo; i++){
  866.     if(i * 2 + 2 < largo &&(array[i] > array[i * 2 + 1] || array[i] > array[i * 2 + 2]))
  867.       return 0;
  868.     }
  869.   return 1;
  870. }
  871.  
  872.  
  873. int main(){
  874.   int array[50];
  875.   for (int i=0; i<50; i++)
  876.     array[i] = 100 - 2*i;
  877.   array_bheap_print(array, 50);
  878.   if (! check_heap(array, 50)) printf ("Eso no es un heap\n\n\n");
  879.  
  880.  
  881.   heapify(array, 50);
  882.   array_bheap_print(array, 50);
  883.   if(check_heap(array, 50)) printf("Si, eso es un heap\n\n\n");
  884.   return 0;
  885. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement