Пример #1
0
// 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;
}
Пример #2
0
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;
}
Пример #3
0
// 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;
}
Пример #4
0
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;
}
Пример #5
0
Файл: 9.c Проект: nee47/abb
// 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;
}
Пример #6
0
Файл: abb.c Проект: fonse451/abb
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;
}