gonzalob

Untitled

Apr 14th, 2020
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "pila.h"
  4.  
  5. void cargarPila(Pila * p);
  6. void pasarPila(Pila * origen, Pila * destino);
  7.  
  8. int main()
  9. {
  10.     printf("Hello world!\n");
  11.     Pila p, ordenada,nuevoDato,nuevaPila;
  12.     inicpila(&p);
  13.     inicpila(&nuevaPila);
  14.     inicpila(&nuevoDato);
  15.     inicpila(&ordenada);
  16.     cargarPila(&p);
  17.     mostrar(&p);
  18.    // insertarPilaEnOtraPila(&nuevaPila,&p);
  19.     //  mostrar(&nuevaPila);
  20.     //int menor = devuelveMenor(&p);
  21.     //printf("el menor es ... %d\n",menor);
  22.     //pasarOrdenada(&p,&ordenada);
  23.     //mostrar(&ordenada);
  24.     //leer(&nuevoDato);
  25.     //insertarEnOrden(&ordenada,&nuevoDato);
  26.  
  27.     //mostrar(&ordenada);
  28.     int suma = 0;
  29.     suma = sumatope(p);
  30.     printf("el sumatope es ... %d\n",suma);
  31.     return 0;
  32. }
  33.  
  34. /*
  35. 1. Hacer una función que permita ingresar varios elementos a una Pila,
  36. tantos como quiera el usuario.
  37. */
  38.  
  39. void cargarPila(Pila * p)
  40. {
  41.     char mander = 's';
  42.     while (mander == 's')
  43.     {
  44.         leer(p);
  45.         printf("desea seguir? s/n");
  46.         fflush(stdin);
  47.         scanf("%c",&mander);
  48.     }
  49.  
  50. }
  51.  
  52.  
  53. /*2. Hacer una función que pase todos los elementos de una pila a otra.*/
  54.  
  55. void pasarPila(Pila * origen, Pila * destino)
  56. {
  57.     while (!pilavacia(origen))
  58.     {
  59.         apilar(destino,desapilar(origen));
  60.     }
  61. }
  62.  
  63. //4-buscar y eliminar el menor de una pila
  64.  
  65. int devuelveMenor(Pila * p)
  66. {
  67.     Pila menor,aux;
  68.     inicpila(&menor);
  69.     inicpila(&aux);
  70.     apilar(&menor,desapilar(p));//primer menor
  71.  
  72.     while (!pilavacia(p))
  73.     {
  74.         if (tope(&menor)>tope(p)) //no sos tan menor
  75.         {
  76.             apilar(&aux,desapilar(&menor)); //se va del menor
  77.             apilar(&menor,desapilar(p)); //me quedo con el nuevo menor
  78.         }
  79.         else
  80.         {
  81.                apilar(&aux,desapilar(p));
  82.         }
  83.     }
  84.  
  85.     //????
  86.  
  87.     pasarPila(&aux,p);
  88.  
  89.     return tope(&menor);
  90. }
  91.  
  92. //generar una pila ordenada
  93.  
  94. void pasarOrdenada(Pila * p, Pila * ordenada)
  95. {
  96.     while (!pilavacia(p))
  97.     {
  98.         apilar(ordenada,devuelveMenor(p));
  99.     }
  100. }
  101.  
  102. //Hacer una función que inserte en una pila ordenada un nuevo elemento,
  103. //conservando el orden de ésta.
  104.  
  105. void insertarEnOrden(Pila *dada,Pila *dato)
  106. {
  107.     Pila aux; inicpila(&aux);
  108.     //primera vuelta, dada vacia
  109.     //segunda vuelta (dada con un elemento) y datos
  110.     while ((!pilavacia(dada)) && (tope(dato)<tope(dada)))
  111.     {
  112.         apilar(&aux,desapilar(dada));
  113.     }
  114.     //apilo dada directamente
  115.     apilar(dada,desapilar(dato));
  116.  
  117.     pasarPila(&aux, dada);
  118.  
  119. }
  120.  
  121. //7. Hacer una función que pase los elementos de una pila a otra,
  122. //de manera que se genere una nueva pila ordenada. Usar la función del ejercicio 6.
  123. //(Ordenamiento por inserción)
  124.  
  125. void insertarPilaEnOtraPila(Pila *dada,Pila *datos)
  126. {
  127.     Pila aux; inicpila(&aux);
  128.     while (!pilavacia(datos))//donde esta la info
  129.     {
  130.         apilar(&aux,desapilar(datos)); //saco 1 a 1 los elemetnos
  131.         insertarEnOrden(dada,&aux);//inserta la pila AUX en DADA
  132.     }
  133.     //pila ordenada es dada
  134. }
  135.  
  136. // Hacer una función que sume y retorne
  137. //los dos primeros elementos de una pila (tope y anterior), sin alterar su contenido.
  138.  
  139. int sumatope(Pila  p)
  140. {
  141.     int resultado = 0;
  142.     int contador = 0;
  143.  
  144.     while (!pilavacia(&p)&&contador<2)
  145.     {
  146.         int tope = desapilar(&p);
  147.         resultado = resultado + tope;
  148.         contador++;
  149.     }
  150.     //printf("%d",resultado);
  151.     return resultado;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment