/* file: stack.h
*
* The implementation of a stack
*/
#include <stdlib.h>
#include "stack.h"
typedef struct BBGStackCell SCELL;
struct BBGStack
{
SCELL *_pCells;
int _iSize;
};
struct BBGStackCell
{
SCELL *_pNext;
void *_pContent;
};
STACK *AllocStack()
{
STACK *pStack;
pStack = malloc(sizeof(*pStack));
pStack->_pCells = NULL;
pStack->_iSize = 0;
return pStack;
}
void FreeStack(STACK *pStack)
{
SCELL *pCell;
while ((pCell = pStack->_pCells) != NULL)
{
pStack->_pCells = pCell->_pNext;
free(pCell);
}
free(pStack);
}
void *PopStack(STACK *pStack)
{
SCELL *pCell;
if ((pCell = pStack->_pCells) != NULL)
{
void *pContent = pCell->_pContent;
pStack->_pCells = pCell->_pNext;
pStack->_iSize--;
free(pCell);
return pContent;
}
return NULL;
}
void PushStack(void *pContent, STACK *pStack)
{
SCELL *pCell;
pCell = malloc(sizeof(*pCell));
pCell->_pNext = pStack->_pCells;
pCell->_pContent = pContent;
pStack->_pCells = pCell;
pStack->_iSize++;
}
int StackSize(STACK *pStack)
{
return pStack->_iSize;
}