Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.97 KB | None | 0 0
  1. pila.h
  2.  
  3. #ifndef PILACICULAR_PILA_H
  4. #define PILACICULAR_PILA_H
  5.  
  6. typedef int t_dato;
  7.  
  8. typedef struct s_nodo{
  9.     t_dato dato;
  10.     struct s_nodo * psig;
  11. }t_nodo;
  12.  
  13. typedef t_nodo * t_pila;
  14.  
  15. void crear_pila_circular(t_pila * pp);
  16. int poner_en_pila_circular(t_pila * pp, const t_dato * pd);
  17. int sacar_en_pila_circular(t_pila * pp, t_dato * pd);
  18. void vaciar_pila_circular(t_pila * pp);
  19. void ver_tope_pila_circular(const t_pila * pp,t_dato * pd);
  20. int pila_llena(const t_pila * pp);
  21. int pila_vacia(const t_pila * pp);
  22.  
  23.  
  24.  
  25.  
  26. #endif //PILACICULAR_PILA_H
  27.  
  28. pila.c
  29.  
  30. #include "pila.h";
  31. #include <stdlib.h>
  32.  
  33. void crear_pila_circular(t_pila * pp){
  34.     *pp = NULL;
  35. }
  36. int poner_en_pila_circular(t_pila * pp, const t_dato * pd){
  37.     t_nodo * pnue = (t_nodo *)malloc(sizeof(t_nodo));
  38.     if(!pnue) return 0;
  39.     pnue->dato = *pd;
  40.     if(*pp){
  41.         pnue->psig = (*pp)->psig;
  42.         (*pp)->psig = pnue;
  43.     }else{
  44.         (*pp)->psig = pnue;
  45.         *pp = pnue;
  46.     }
  47.     return 1;
  48. }
  49. int sacar_en_pila_circular(t_pila * pp, t_dato * pd){
  50.     t_nodo * pelim;
  51.     if(!*pp) return 0;
  52.     pelim = (*pp)->psig;
  53.     *pd = pelim->dato;
  54.     (*pp)->psig = pelim->psig;
  55.     if(pelim->psig == *pp)
  56.         *pp = NULL;
  57.     free(pelim);
  58.     return 1;
  59. }
  60. void vaciar_pila_circular(t_pila * pp){
  61.     t_nodo * pelim;
  62.     while(*pp){
  63.         pelim = (*pp)->psig;
  64.         (*pp)->psig = pelim->psig;
  65.         if(pelim->psig == *pp)
  66.             *pp = NULL;
  67.         free(pelim);
  68.     }
  69. }
  70.  
  71. void ver_tope_pila_circular(const t_pila * pp,t_dato * pd){
  72.     *pd = (*pp)->psig->dato;
  73. }
  74.  
  75. int pila_llena(const t_pila * pp){
  76.     t_nodo * pnue = (t_nodo *) malloc(sizeof(t_nodo));
  77.     free(pnue);
  78.     return pnue == NULL;
  79. }
  80.  
  81. int pila_vacia(const t_pila * pp){
  82.     return *pp == NULL;
  83. }
  84.  
  85.  
  86. cola.h
  87.  
  88. #ifndef PILACICULAR_COLA_H
  89. #define PILACICULAR_COLA_H
  90.  
  91. typedef int t_dato;
  92.  
  93. typedef struct s_nodo{
  94.     t_dato dato;
  95.     struct s_nodo * psig;
  96. }t_nodo;
  97.  
  98. typedef t_nodo * t_cola;
  99.  
  100. void crear_cola_circular(t_cola * pp);
  101. int poner_en_cola_circular(t_cola * pp, const t_dato * cd);
  102. int sacar_en_cola_circular(t_cola * pp, t_dato * cd);
  103. void vaciar_cola_circular(t_cola * pp);
  104. void ver_frente_cola_circular(const t_cola * pc,t_dato * cd);
  105. void ver_fondo_cola_circular(const t_cola * pc,t_dato * cd);
  106. int cola_llena(const t_cola * pc);
  107. int cola_vacia(const t_cola * pc);
  108.  
  109.  
  110. #endif //PILACICULAR_COLA_H
  111.  
  112. cola.c
  113.  
  114. #include "cola.h"
  115. #include <stdlib.h>
  116.  
  117. void crear_cola_circular(t_cola * pc){
  118.     *pc = NULL;
  119. }
  120. int poner_en_cola_circular(t_cola * pc, const t_dato * cd){
  121.     t_nodo * pnue = (t_nodo *)malloc(sizeof(t_nodo));
  122.     if(!pnue) return 0;
  123.     pnue->dato = *cd;
  124.     if(*pc){
  125.         pnue->psig = (*pc)->psig;
  126.         (*pc)->psig = pnue;
  127.     }else{
  128.        *pc = pnue;
  129.        pnue->psig = pnue;
  130.     }
  131.     *pc = pnue;
  132.     return 1;
  133. }
  134. int sacar_en_cola_circular(t_cola * pc, t_dato * cd){
  135.     t_nodo * pelim;
  136.     if(!*pc) return 0;
  137.     pelim = (*pc)->psig;
  138.     *cd = pelim->dato;
  139.     if((*pc)->psig == *pc )
  140.         *pc = NULL;
  141.     else
  142.         (*pc)->psig = pelim->psig;
  143.     free(pelim);
  144.     return 1;
  145. }
  146.  
  147. void vaciar_cola_circular(t_cola * pc){
  148.     t_nodo * pelim;
  149.     while(*pc){
  150.         pelim = (*pc)->psig;
  151.         if((*pc)->psig == *pc )
  152.             *pc = NULL;
  153.         else
  154.             (*pc)->psig = pelim->psig;
  155.         free(pelim);
  156.     }
  157.  
  158. }
  159.  
  160. void ver_frente_cola_circular(const t_cola * pc,t_dato * cd){
  161.     *cd = (*pc)->psig->dato;
  162. }
  163.  
  164. void ver_fondo_cola_circular(const t_cola * pc,t_dato * cd){
  165.     *cd = (*pc)->dato;
  166. }
  167.  
  168. int cola_llena(const t_cola * pc){
  169.     t_nodo * pnue = (t_nodo *)malloc(sizeof(t_nodo));
  170.     free(pnue);
  171.     return pnue == NULL;
  172. }
  173. int cola_vacia(const t_cola * pc){
  174.     return *pc == NULL;
  175. }
  176.  
  177. lista.h
  178.  
  179. #ifndef LISTADOBLE_LISTA_H
  180. #define LISTADOBLE_LISTA_H
  181.  
  182. typedef int t_dato;
  183.  
  184. typedef struct s_nodo{
  185.     t_dato dato;
  186.     struct s_nodo *sig,*ant;
  187. }t_nodo;
  188.  
  189. typedef t_nodo * t_lista;
  190.  
  191. void crear_lista_doble(t_lista * pl);
  192. int insertar_lista_doble(t_lista *pl,const t_dato * ld,int(*cmp)(const  t_dato *,const t_dato * ));
  193. int eliminar_lista_doble(t_lista *pl, t_dato * ld,int(*cmp)(const  t_dato * ,const t_dato *));
  194. void vaciar_lista_doble(t_lista * pl);
  195.  
  196.  
  197. #endif //LISTADOBLE_LISTA_H
  198.  
  199. lista.c
  200.  
  201. #include "lista.h"
  202. #include <stdlib.h>
  203.  
  204. void crear_lista_doble(t_lista * pl){
  205.     *pl = NULL;
  206. }
  207.  
  208. int insertar_lista_doble(t_lista *pl,const t_dato * ld,int(*cmp)(const  t_dato *,const t_dato *)){
  209.     t_nodo * pnue = (t_nodo *) malloc(sizeof(t_nodo));
  210.     t_nodo *sig,*ant = NULL;
  211.     int comp;
  212.     if(!pnue) return 0;
  213.     sig = *pl;
  214.     if(sig) ant = sig->ant;
  215.     while(ant && (comp=cmp(&ant->dato,ld)) > 0){
  216.         sig = ant;
  217.         ant = ant->ant;
  218.     }
  219.     if(ant && !comp) return 0;
  220.  
  221.     while(sig && (comp=cmp(&sig->dato,ld)) < 0){
  222.         ant = sig;
  223.         sig = sig->sig;
  224.     }
  225.  
  226.     if(sig && !comp) return 0;
  227.  
  228.     pnue->dato = *ld;
  229.     pnue->ant = ant;
  230.     pnue->sig = sig;
  231.     if(ant)
  232.         ant->sig = pnue;
  233.     if(sig)
  234.         sig->ant = pnue;
  235.     *pl = pnue;
  236.  
  237.     return 1;
  238.  
  239. }
  240. int eliminar_lista_doble(t_lista *pl, t_dato * ld,int(*cmp)(const  t_dato *,const t_dato *)){
  241.     t_nodo * pelim;
  242.     int comp;
  243.     if(!*pl) return 0;
  244.     pelim = *pl;
  245.     while(pelim && (comp=cmp(&pelim->dato,ld)) > 0){
  246.         pelim = pelim->ant;
  247.     }
  248.  
  249.     while(pelim && (comp=cmp(&pelim->dato,ld)) < 0){
  250.         pelim = pelim->sig;
  251.     }
  252.  
  253.     if(!pelim || comp) return 0;
  254.     if(pelim->ant)
  255.         pelim->ant->sig = pelim->sig;
  256.     if(pelim->sig)
  257.         pelim->sig->ant = pelim->ant;
  258.     if(*pl == pelim)
  259.         *pl = pelim->sig ?: pelim->ant;
  260.     free(pelim);
  261.     return 1;
  262.  
  263. }
  264. void vaciar_lista_doble(t_lista * pl){
  265.     t_nodo * pelim;
  266.     while(*pl){
  267.         pelim = *pl;
  268.         if(pelim->ant)
  269.             pelim->ant->sig = pelim->sig;
  270.         if(pelim->sig)
  271.             pelim->sig->ant = pelim->ant;
  272.         *pl = pelim->sig ?: pelim->ant;
  273.         free(pelim);
  274.     }
  275.  
  276. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement