#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int StackElementType;
typedef struct StackNode {
StackElementType data;
struct StackNode *next;
} StackNode;
typedef struct Stack {
int size;
StackNode *front;
} Stack;
Stack *CreateStack()
{
Stack *stack = (Stack *)malloc(sizeof(Stack));
stack->size = 0;
stack->front = NULL;
return stack;
}
bool IsEmptyStack(Stack *stack)
{
if (stack->front == NULL) {
return true;
}
return false;
}
void PushStack(StackElementType data, Stack *stack)
{
StackNode *stackNode = (StackNode *)malloc(sizeof(StackNode));
stackNode->data = data;
stackNode->next = stack->front;
stack->front = stackNode;
stack->size += 1;
return;
}
void PopStack(Stack *stack)
{
StackNode *stackNode = NULL;
if (IsEmptyStack(stack) == true) {
return;
}
stack->size -= 1;
stackNode = stack->front;
stack->front = stack->front->next;
free(stackNode);
stackNode = NULL;
}
StackElementType GetFront(Stack *stack)
{
if (IsEmptyStack(stack) == false) {
return stack->front->data;
}
return 0;
}
void CleanStack(Stack *stack)
{
StackNode *stackNode = stack->front;
StackNode *stackTempNode = NULL;
while (stackNode != NULL) {
stack->size -= 1;
stackTempNode = stackNode->next;
free(stackNode);
stackNode = stackTempNode;
}
stack->front = stackNode;
}
void TraverseStack(Stack *stack)
{
StackNode *stackNode = stack->front;
if (IsEmptyStack(stack) == true) {
return;
}
while (stackNode != NULL) {
printf("%d ", stackNode->data);
stackNode = stackNode->next;
}
printf("\n");
}
int main()
{
Stack *stack = CreateStack();
PushStack(1, stack);
PushStack(2, stack);
PushStack(3, stack);
PushStack(4, stack);
PushStack(5, stack);
PushStack(6, stack);
TraverseStack(stack);
}