// Saca el elemento tope de la pila. Si la pila tiene elementos, se quita el // tope de la pila, y se devuelve ese valor. Si la pila está vacía, devuelve // NULL. // Pre: la pila fue creada. // Post: si la pila no estaba vacía, se devuelve el valor del tope anterior // y la pila contiene un elemento menos. void* pila_desapilar(pila_t *pila) { //es una pre-condicion, pero igual, verifico que la pila haya sido creada if (pila_ver_tope(pila) == NULL || pila == NULL || pila->datos == NULL) return NULL; // Guardo un puntero al valor que voy a desapilar void* desapilado = pila_ver_tope(pila); pila->tamanio -=1; if (pila->tamanio== 0) { free(pila->datos); pila->datos = NULL; } else { /*datos_nuevo = realloc(pila->datos, nuevo_tamanio);*/ pila->datos = realloc(pila->datos, pila->tamanio*sizeof(size_t)); /*pila->datos = realloc(pila->datos, pila->tamanio*sizeof(pila_t));*/ if (pila->datos == NULL) return false; } //asigno el puntero pila->cantidad -= 1; // Devuelvo la referencia al valor desapilado return desapilado; }
void* pila_desapilar(pila_t *pila) { if (pila_ver_tope(pila) == NULL) return NULL; // Guardo un puntero al valor que voy a desapilar void* desapilado; desapilado = pila_ver_tope(pila); if ((pila->tamanio - pila->cantidad) == 10){ pila->tamanio -= 10; void** nuevo_datos; nuevo_datos= realloc(pila->datos, pila->tamanio*sizeof(void*)); if (nuevo_datos == NULL) return NULL; pila->datos = nuevo_datos; } pila->cantidad -=1; // Devuelvo la referencia al valor desapilado return desapilado; }
// Saca el elemento tope de la pila. Si la pila tiene elementos, se quita el // tope de la pila, y se devuelve ese valor. Si la pila está vacÃa, devuelve // NULL. // Pre: la pila fue creada. // Post: si la pila no estaba vacÃa, se devuelve el valor del tope anterior // y la pila contiene un elemento menos. void* pila_desapilar(pila_t *pila) { if (pila_ver_tope(pila) == NULL) return NULL; // Guardo un puntero al valor que voy a desapilar void* desapilado; desapilado = pila_ver_tope(pila); if ((pila->tamanio - pila->cantidad) == 10){ pila->tamanio -= 10; void** nuevo_datos; nuevo_datos= realloc(pila->datos, pila->tamanio*sizeof(void*)); if (nuevo_datos == NULL) return NULL; pila->datos = nuevo_datos; printf("tamanio SAQUE REALLOC: %zu // cantiad: %zu \n", pila->tamanio, pila->cantidad); } pila->cantidad -=1; // Devuelvo la referencia al valor desapilado printf("cantidad = %zu", pila->cantidad); return desapilado; }
const char *abb_iter_in_ver_actual(const abb_iter_t *iter) { if(!iter || !iter->pila || pila_esta_vacia(iter->pila)) return NULL; abb_nodo_t* nodo = pila_ver_tope(iter->pila); return nodo->clave; }
// Devuelve clave actual, esa clave no se puede modificar ni liberar. const char *abb_iter_in_ver_actual(const abb_iter_t *iter){ abb_nodo_t* aux = pila_ver_tope(iter->pila); return aux ? aux->clave : NULL; }
const char *abb_iter_in_ver_actual(const abb_iter_t *iter){ nodo_t* nodo = pila_ver_tope(iter->pila); if (!nodo)return NULL; return nodo->clave; }