// 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->cantidad==0) return NULL;
	void* dato = pila->datos[pila->cantidad-1];
    pila->cantidad--;
    if (pila->tamanio>((pila->cantidad)*3)) pila_redimensionar(pila,(pila->tamanio/2));
    return dato;
}
// Agrega un nuevo elemento a la pila. Devuelve falso en caso de error.
// Pre: la pila fue creada.
// Post: se agregó un nuevo elemento a la pila, valor es el nuevo tope.
bool pila_apilar(pila_t *pila, void* valor){
    //printf("inicio apilar - tamanio de pila:%zu cantidad de pila:%zu\n",pila->tamanio,pila->cantidad);
	if (pila->tamanio==pila->cantidad) pila_redimensionar(pila);
	if (pila->tamanio==pila->cantidad) return false;			//si la pila sigue siendo del mismo tamanio fallo el redimensionar//
    //printf("redimensionando(si hizo falta) - tamanio de pila:%zu cantidad de pila:%zu\n",pila->tamanio,pila->cantidad);
	pila->datos[(pila->cantidad)]=valor;
	pila->cantidad=(pila->cantidad+1);
    //printf("fin apilar - tamanio de pila:%zu cantidad de pila:%zu\n",pila->tamanio,pila->cantidad);
	return true;
}
Example #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->cantidad == 0) return NULL;
		
	if (pila->tamanio / 4.0 >= pila->cantidad)
		pila_redimensionar(pila, pila->tamanio / 2);
	
	pila->cantidad--;
	return pila->datos[pila->cantidad]; //ya que achicamos antes no necesitamos restar 1
}
Example #4
0
// Agrega un nuevo elemento a la pila. Devuelve falso en caso de error.
// Pre: la pila fue creada.
// Post: se agregó un nuevo elemento a la pila, valor es el nuevo tope.
bool pila_apilar(pila_t *pila, void *valor)
{
	if (pila->cantidad == pila->tamanio) // esta lleno
	{
		if (!pila_redimensionar(pila, pila->tamanio * 2))
			return false;
	}
	
	pila->datos[pila->cantidad] = valor;
	pila->cantidad++;
	return true;
}
// 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){
    //printf("inicio desapilar - tamanio de pila:%zu cantidad de pila:%zu\n",pila->tamanio,pila->cantidad);
	if (pila->cantidad==0){
        //printf("no puedo desapilar de algo vacio\n");
        return NULL;
	}else{
        //printf("saco el dato\n");
        void* dato = pila->datos[pila->cantidad-1];
        //printf("achico la cantidad\n");
        pila->cantidad=(pila->cantidad-1);
        if (pila->tamanio>((pila->cantidad)+10)) pila_redimensionar(pila);
        //printf("redimensionado(si hizo falta) - tamanio de pila:%zu cantidad de pila:%zu\n",pila->tamanio,pila->cantidad);
        return dato;
    }
}
// Agrega un nuevo elemento a la pila. Devuelve falso en caso de error.
// Pre: la pila fue creada.
// Post: se agregó un nuevo elemento a la pila, valor es el nuevo tope.
bool pila_apilar(pila_t *pila, void* valor){
    if (pila->tamanio==(pila->cantidad+3)) pila_redimensionar(pila,(pila->tamanio*2));
	pila->datos[(pila->cantidad)]=valor;
	pila->cantidad=(pila->cantidad+1);
    return true;
}