This is a simple stack implementation in C, using an array as the underlying data structure. It's possible to resize the stack, and it's possible to set the initial size of the stack.
- Stack* newStack(int size): Create a new stack with a given size.
- bool isFull(Stack* stack): Check if the stack is full.
- bool isEmpty(Stack* stack): Check if the stack is empty.
- void push(Stack* stack, int item): Push an item onto the stack.
- int pop(Stack* stack): Pop an item off the stack.
- int peek(Stack* stack): Peek at the top of the stack.
- void printStack(Stack* stack): Print the stack.
- void destroyStack(Stack* stack): Destroy the stack.
- char* stackToString(Stack* stack): Convert the stack to a string.
- Stack* resizeStack(Stack* stack, int size): Resize the stack to a new size.
// Create a stack of capacity 5
Stack* stack = newStack(5);
// Push items to stack
push(stack, 1);
push(stack, 2);
push(stack, 3);
push(stack, 4);
push(stack, 5);
push(stack, 100);
// Check if stack is full
if (isFull(stack)) {
    printf("Stack is full!\n");
}
// Print the stack
printStack(stack);
// Resize the stack
stack = resizeStack(stack, 10);
// Push an item to stack
push(stack, 100);
// Print the stack
printStack(stack);
// Pop items from stack
pop(stack);
pop(stack);
// Convert the stack to string
char* str = stackToString(stack);
printf("%s\n", str);
// Check if the stack is empty
if (isEmpty(stack)) {
    printf("Stack is empty!\n");
} else {
    printf("Stack is not empty!\n");
}
// Peek the top item from stack
printf("Top item: %d\n", peek(stack));
// Destroy the stack
destroyStack(stack);
// Print the stack
printf("%s\n", stackToString(stack));
// Check if the stack is empty
if (isEmpty(stack)) {
    printf("Stack is empty!\n");
} else {
    printf("Stack is not empty!\n");
}Copyright Max Base, 2022