/** * @file bid_stack.h * @brief Gestion del TAD pila estática de pujas. * @date 25/03/2025 * @author Daniel Callero Costales hola@danicallero.es * * @note Proyecto compartido con fines educativos. Se desaconseja la entrega propia o con fines de plagio. */#ifndef BID_STACK_H#define BID_STACK_H#include "types.h"#include <stdbool.h>/** *@brief Nº de ítems máximo en tStack. */#define SMAX 25/** *@brief Valor fijo para una posición del tStack nula. */#define SNULL -1/** * @brief Estructura que representa un ítem (elemento) de la pila tStack. * Contiene la información de una puja realizada por un usuario sobre una consola */typedef struct { tUserId bidder; /**< ID del usuario que puja.*/ tConsolePrice consolePrice; /**< Precio de la consola. */} tItemS;/** @brief Tipo que representa una posición en la pila. */typedef int tPosS;/** * @brief Representa la estructura de datos tipo pila. * * La pila se implementa como un array estático de ítems con una posición superior * que indica la la posición del último elemento útil. */typedef struct { tItemS data[SMAX]; /**< Array que almacena los elementos de la pila. */ tPosS top; /**< Última posición ocupada en la pila (SNULL si tStack está vacío). */} tStack;/** * @brief Inicializa un stack vacío. * @param[out] S Puntero al stack a inicializar. * @pre El stack debe estar declarado. * @post El stack queda inicializado y marcado como vacío. */void createEmptyStack(tStack *S);/** * @brief Inserta un elemento en la cima de la pila. * @param[in] d Item a insertar. * @param[in,out] S Puntero al stack. * @return true si la inserción fue exitosa, false de lo contrario. * @post El tamaño del stack se incrementa por 1 al guardar ahora el nuevo item. */bool push(tItemS d, tStack *S);/** * @brief Elimina el elemento de la cima del stack. * @param[in,out] S Puntero al stack. * @pre El stack no puede estar vacío. */void pop(tStack *S);/** * @brief Devuelve el elemento de la cima de la pila. * @param[in] S Variable de tipo tStack. * @return El elemento tItemS de la cima del stack. * @pre El stack no puede estar vacío. */tItemS peek(tStack S);/** * @brief Comprueba si un stack está vacío. * @param[in] S Variable de tipo tStack. * @return true si el stack está vacío, false de lo contrario. */bool isEmptyStack(tStack S);#endif // BID_STACK_H
Implementación
/** * @file bid_stack.c * @brief Gestion del TAD pila estática de pujas. * @date 25/03/2025 * @author Daniel Callero Costales hola@danicallero.es * * @note Proyecto compartido con fines educativos. Se desaconseja la entrega propia o con fines de plagio. */#include "bid_stack.h"#include <stdbool.h>void createEmptyStack(tStack *S){ S->top = SNULL; //La pila se marca como vacía utilizando un valor fijo LNULL.}bool isEmptyStack(tStack S){ return S.top == SNULL; //Una pila está vacía cuando su tamaño es el valor fijo LNULL.}bool push(tItemS d, tStack *S){ bool out = false; //Auxiliar donde se recoge el output que devolverá return. if(S->top >= SMAX-1) //Solo se inserta si la lista no está llena. out = false; else { S->top++; //Se amplía el número de datos útiles registrados. S->data[S->top] = d;//Se añade el elemento a la cima (LIFO). out = true; } return out;}void pop(tStack *S){ S->top--; //Se reduce por 1 el número de valores útiles recogidos en la pila.}tItemS peek(tStack S){ return S.data[S.top]; //Se devuelve el valor que ocupa la posición de la cima en la pila.}