Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* CABECERA */
- #ifndef PREG13_H
- #define PREG13_H
- typedef int TElemento;
- typedef struct nodo{
- TElemento elem;
- struct nodo* ptrSig;
- }TNodo;
- typedef struct{
- TNodo *cima;
- }TPila;
- void crearPila(TPila *);
- void apilarDoble(TPila*,TPila*,TElemento);
- void desapilarDoble(TPila*,TPila*);
- void imprimirPila(TPila *);
- #endif /* PREG13_H */
- /* IMPLEMENTACION */
- #include <stdlib.h>
- #include <stdio.h>
- #include "preg13.h"
- void crearPila(TPila *pila){
- pila->cima = NULL;
- }
- void apilarDoble(TPila* pila,TPila* pilaMin,TElemento elem){
- TNodo *ptrNuevo;
- ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
- ptrNuevo->elem = elem;
- ptrNuevo->ptrSig = NULL;
- if (pila->cima == NULL)
- pila->cima = ptrNuevo;
- else{
- ptrNuevo->ptrSig = pila->cima;
- pila->cima = ptrNuevo;
- }
- if (pilaMin->cima == NULL){
- TNodo *ptrMinimo;
- ptrMinimo = (TNodo*)malloc(sizeof(TNodo));
- ptrMinimo->elem = elem;
- ptrMinimo->ptrSig = NULL;
- pilaMin->cima = ptrMinimo;
- }
- else if (elem < pilaMin->cima->elem){
- TNodo *ptrMinimo2;
- ptrMinimo2 = (TNodo*)malloc(sizeof(TNodo));
- ptrMinimo2->elem = elem;
- ptrMinimo2->ptrSig = NULL;
- ptrMinimo2->ptrSig = pilaMin->cima;
- pilaMin->cima = ptrMinimo2;
- }
- }
- void desapilarDoble(TPila *pila,TPila *pilaMin){
- TNodo *ptrEliminar;
- TElemento elem;
- elem = pila->cima->elem;
- if (pila->cima == NULL)
- printf("No se puede desapilar de una pila vacia");
- else{
- ptrEliminar = pila->cima;
- pila->cima = pila->cima->ptrSig;
- free(ptrEliminar);
- }
- if (elem == pilaMin->cima->elem){
- TNodo *ptrMinimo;
- ptrMinimo = pilaMin->cima;
- pilaMin->cima = pilaMin->cima->ptrSig;
- free(ptrMinimo);
- }
- }
- void imprimirPila(TPila *pila){
- TNodo *ptrRec;
- ptrRec = pila->cima;
- while (ptrRec != NULL){
- printf(" %d ",ptrRec->elem);
- ptrRec = ptrRec->ptrSig;
- }
- printf("NULL\n");
- }
- /* MAIN */
- #include <stdio.h>
- #include <stdlib.h>
- #include "preg13.h"
- int main(int argc, char** argv) {
- TPila pila,pilaMin;
- crearPila(&pila);
- crearPila(&pilaMin);
- apilarDoble(&pila,&pilaMin,5);
- apilarDoble(&pila,&pilaMin,4);
- apilarDoble(&pila,&pilaMin,12);
- apilarDoble(&pila,&pilaMin,20);
- apilarDoble(&pila,&pilaMin,54);
- apilarDoble(&pila,&pilaMin,3);
- imprimirPila(&pila);
- imprimirPila(&pilaMin);
- desapilarDoble(&pila,&pilaMin);
- imprimirPila(&pila);
- imprimirPila(&pilaMin);
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement