Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //archivo cola
- #include <stdbool.h>
- #include <stdlib.h>
- #include "cola.h"
- typedef struct nodo{
- void* dato;
- struct nodo* proximo;
- }nodo_t;
- struct cola{
- nodo_t* primero;
- nodo_t* ultimo;
- };
- cola_t* cola_crear(void){
- cola_t* cola = malloc(sizeof(cola_t));
- if (cola == NULL){
- return NULL;
- }
- cola->primero = NULL;
- cola->ultimo = NULL;
- return cola;
- }
- void cola_destruir(cola_t *cola, void destruir_dato(void*)){
- if (!cola){
- return;
- }
- nodo_t* actual = cola->primero;
- if (destruir_dato == NULL){
- while((actual != NULL)){
- nodo_t* anterior = actual;
- actual = actual->proximo;
- free(anterior);
- }
- free(cola);
- return;
- }
- while((actual != NULL)){
- nodo_t* anterior = actual;
- destruir_dato(actual->dato);
- actual = actual->proximo;
- free(anterior);
- }
- free(cola);
- return;
- }
- bool cola_esta_vacia(const cola_t *cola){
- return cola->primero == NULL;
- bool cola_encolar(cola_t *cola, void* valor){
- nodo_t* nodo_nuevo = malloc(sizeof(nodo_t));
- if (nodo_nuevo != NULL){
- nodo_nuevo->dato = valor;
- if(cola_esta_vacia(cola)){
- cola->primero = nodo_nuevo;
- cola->ultimo = nodo_nuevo;
- cola->ultimo->proximo = NULL;
- return true;
- }
- cola->ultimo->proximo = nodo_nuevo;
- cola->ultimo = cola->ultimo->proximo;
- cola->ultimo->proximo = NULL;
- return true;
- }
- return false;
- }
- void* cola_ver_primero(const cola_t *cola){
- if (!(cola_esta_vacia(cola))){
- return cola->primero->dato;
- }
- return NULL;
- }
- void* cola_desencolar(cola_t *cola){
- if (cola_esta_vacia(cola)){
- return NULL;
- }
- if (cola->primero == cola->ultimo){
- nodo_t* nodo_a_eliminar = cola->primero;
- void* dato_a_devolver = nodo_a_eliminar->dato;
- cola->primero = NULL;
- cola->ultimo = NULL;
- free(nodo_a_eliminar);
- return dato_a_devolver;
- }
- nodo_t* nodo_a_eliminar = cola->primero;
- void* dato_a_devolver = nodo_a_eliminar->dato;
- cola->primero = cola->primero->proximo;
- free(nodo_a_eliminar);
- return dato_a_devolver;
- }
- //archivo Pruebas
- #include "cola.h"
- #include "testing.h"
- #include <stddef.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include "pila.h"
- /* ******************************************************************
- * PRUEBAS UNITARIAS ALUMNO
- * *****************************************************************/
- //wrapper pila_destruir.
- void _pila_destruir(void* pila){
- pila_destruir((pila_t*)pila);
- }
- bool cola_nula(void){
- cola_t* cola = NULL;
- bool estado = cola == NULL;
- cola_destruir(cola,NULL);
- return estado;
- }
- bool cola_creada_no_nula(void){
- cola_t* cola = cola_crear();
- bool estado = cola != NULL;
- cola_destruir(cola,NULL);
- return estado;
- }
- bool desencolar_vacia(void){
- cola_t* cola = cola_crear();
- bool estado = cola_desencolar(cola) == NULL;
- cola_destruir(cola,NULL);
- return estado;
- }
- bool ver_primero_vacia(void){
- cola_t* cola = cola_crear();
- bool estado = cola_ver_primero(cola) == NULL;
- cola_destruir(cola,NULL);
- return estado;
- }
- bool cola_nueva_vacia(void){
- cola_t* cola = cola_crear();
- bool estado = cola_esta_vacia(cola);
- cola_destruir(cola,NULL);
- return estado;
- }
- bool encolar_desencolar_mantiene_invariante(void){
- cola_t* cola = cola_crear();
- bool estado;
- int i;
- if (!cola){
- return false;
- }
- int valores[3];
- valores[0] = 2;
- valores[1] = 15;
- valores[2] = 1;
- for(i = 0; i <= 2; i++){
- if(!cola_encolar(cola, &valores[i])){
- return false;
- }
- }
- for(i = 0; i <=2; i++){
- void* dato = cola_desencolar(cola);
- if (*(int*) dato != valores[i]){
- cola_destruir(cola,NULL);
- return false;
- }
- }
- estado = ((cola_ver_primero(cola) == NULL) && (cola_desencolar(cola) == NULL));
- cola_destruir(cola,NULL);
- return estado;
- }
- bool encolar_nulo(void){
- cola_t* cola = cola_crear();
- bool estado;
- if(!cola){
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement