Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.98 KB | None | 0 0
  1. //archivo cola
  2. #include <stdbool.h>
  3. #include <stdlib.h>
  4. #include "cola.h"
  5.  
  6. typedef struct nodo{
  7. void* dato;
  8. struct nodo* proximo;
  9. }nodo_t;
  10.  
  11. struct cola{
  12. nodo_t* primero;
  13. nodo_t* ultimo;
  14. };
  15.  
  16. cola_t* cola_crear(void){
  17. cola_t* cola = malloc(sizeof(cola_t));
  18. if (cola == NULL){
  19. return NULL;
  20. }
  21. cola->primero = NULL;
  22. cola->ultimo = NULL;
  23. return cola;
  24. }
  25.  
  26. void cola_destruir(cola_t *cola, void destruir_dato(void*)){
  27. if (!cola){
  28. return;
  29. }
  30. nodo_t* actual = cola->primero;
  31. if (destruir_dato == NULL){
  32. while((actual != NULL)){
  33. nodo_t* anterior = actual;
  34. actual = actual->proximo;
  35. free(anterior);
  36. }
  37. free(cola);
  38. return;
  39. }
  40. while((actual != NULL)){
  41. nodo_t* anterior = actual;
  42. destruir_dato(actual->dato);
  43. actual = actual->proximo;
  44. free(anterior);
  45. }
  46. free(cola);
  47. return;
  48. }
  49. bool cola_esta_vacia(const cola_t *cola){
  50. return cola->primero == NULL;
  51.  
  52. bool cola_encolar(cola_t *cola, void* valor){
  53. nodo_t* nodo_nuevo = malloc(sizeof(nodo_t));
  54. if (nodo_nuevo != NULL){
  55. nodo_nuevo->dato = valor;
  56. if(cola_esta_vacia(cola)){
  57. cola->primero = nodo_nuevo;
  58. cola->ultimo = nodo_nuevo;
  59. cola->ultimo->proximo = NULL;
  60. return true;
  61. }
  62. cola->ultimo->proximo = nodo_nuevo;
  63. cola->ultimo = cola->ultimo->proximo;
  64. cola->ultimo->proximo = NULL;
  65. return true;
  66. }
  67. return false;
  68. }
  69.  
  70. void* cola_ver_primero(const cola_t *cola){
  71. if (!(cola_esta_vacia(cola))){
  72. return cola->primero->dato;
  73. }
  74. return NULL;
  75. }
  76.  
  77. void* cola_desencolar(cola_t *cola){
  78. if (cola_esta_vacia(cola)){
  79. return NULL;
  80. }
  81. if (cola->primero == cola->ultimo){
  82. nodo_t* nodo_a_eliminar = cola->primero;
  83. void* dato_a_devolver = nodo_a_eliminar->dato;
  84. cola->primero = NULL;
  85. cola->ultimo = NULL;
  86. free(nodo_a_eliminar);
  87. return dato_a_devolver;
  88. }
  89. nodo_t* nodo_a_eliminar = cola->primero;
  90. void* dato_a_devolver = nodo_a_eliminar->dato;
  91. cola->primero = cola->primero->proximo;
  92. free(nodo_a_eliminar);
  93. return dato_a_devolver;
  94. }
  95.  
  96. //archivo Pruebas
  97.  
  98. #include "cola.h"
  99. #include "testing.h"
  100. #include <stddef.h>
  101. #include <stdlib.h>
  102. #include <stdio.h>
  103. #include "pila.h"
  104.  
  105.  
  106. /* ******************************************************************
  107. * PRUEBAS UNITARIAS ALUMNO
  108. * *****************************************************************/
  109.  
  110. //wrapper pila_destruir.
  111. void _pila_destruir(void* pila){
  112. pila_destruir((pila_t*)pila);
  113. }
  114.  
  115. bool cola_nula(void){
  116. cola_t* cola = NULL;
  117. bool estado = cola == NULL;
  118. cola_destruir(cola,NULL);
  119. return estado;
  120. }
  121.  
  122. bool cola_creada_no_nula(void){
  123. cola_t* cola = cola_crear();
  124. bool estado = cola != NULL;
  125. cola_destruir(cola,NULL);
  126. return estado;
  127. }
  128.  
  129. bool desencolar_vacia(void){
  130. cola_t* cola = cola_crear();
  131. bool estado = cola_desencolar(cola) == NULL;
  132. cola_destruir(cola,NULL);
  133. return estado;
  134. }
  135.  
  136. bool ver_primero_vacia(void){
  137. cola_t* cola = cola_crear();
  138. bool estado = cola_ver_primero(cola) == NULL;
  139. cola_destruir(cola,NULL);
  140. return estado;
  141. }
  142.  
  143. bool cola_nueva_vacia(void){
  144. cola_t* cola = cola_crear();
  145. bool estado = cola_esta_vacia(cola);
  146. cola_destruir(cola,NULL);
  147. return estado;
  148. }
  149.  
  150. bool encolar_desencolar_mantiene_invariante(void){
  151. cola_t* cola = cola_crear();
  152. bool estado;
  153. int i;
  154. if (!cola){
  155. return false;
  156. }
  157. int valores[3];
  158. valores[0] = 2;
  159. valores[1] = 15;
  160. valores[2] = 1;
  161. for(i = 0; i <= 2; i++){
  162. if(!cola_encolar(cola, &valores[i])){
  163. return false;
  164. }
  165. }
  166. for(i = 0; i <=2; i++){
  167. void* dato = cola_desencolar(cola);
  168. if (*(int*) dato != valores[i]){
  169. cola_destruir(cola,NULL);
  170. return false;
  171. }
  172. }
  173. estado = ((cola_ver_primero(cola) == NULL) && (cola_desencolar(cola) == NULL));
  174. cola_destruir(cola,NULL);
  175. return estado;
  176. }
  177.  
  178. bool encolar_nulo(void){
  179. cola_t* cola = cola_crear();
  180. bool estado;
  181. if(!cola){
  182. return false;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement