// 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; }
// 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 }
// 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; }