#include <stdbool.h>
#include <stddef.h>
#include <malloc.h>
#define MAXSIZE 100
struct stackCDT{
int *data;
size_t top;
size_t numData;
};
typedef int stackElementT;
typedef struct stackCDT *stackADT;
stackADT newStack();
void freeStack(stackADT stack);
bool push(stackADT stack, stackElementT value);
bool pop(stackADT stack, stackElementT *pValue);
bool stackIsEmpty(stackADT stack);
bool stackIsFull(stackADT stack);
size_t getStackDepth(stackADT stack);
bool getStackElement(stackADT stack, size_t index, stackElementT *pValue);
stackADT newStack()
{
stackADT stack;
stack = (stackADT)malloc(sizeof(struct stackCDT));
stack -> data = (int*)malloc(MAXSIZE*sizeof(int));
stack -> top = 0;
stack -> numData = MAXSIZE;
return stack;
}
void freeStack(stackADT stack)
{
free(stack -> data);
free(stack);
}
bool push(stackADT stack, stackElementT value)
{
if(stackIsFull(stack)) return false;
stack -> data[stack -> top ++] = value;
return true;
}
bool pop(stackADT stack, stackElementT *pValue)
{
if (stackIsEmpty(stack)) return false;
*pValue = stack -> data[-- stack -> top];
return true;
}
bool stackIsEmpty(stackADT stack)
{
return (stack -> top == 0);
}
bool stackIsFull(stackADT stack)
{
return (stack -> top == stack -> numData);
}
size_t getStackDepth(stackADT stack)
{
return (stack -> top);
}
int main(int argc, int *argv[])
{
stackADT stack;
int temp;
stack = newStack();
for(int i = 0; i < 16; i++) push(stack, i);
printf("%d\n", getStackDepth(stack));
printf("%d\n", temp);
while (!stackIsEmpty(stack)) {
pop(stack, &temp);
printf("%d ", temp);
}
printf("\n");
freeStack(stack);
return 0;
}