#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define TYPE int
typedef struct Node
{
TYPE data;
struct Node*next;
}Node;
Node* create_node(TYPE data)
{
Node* node = malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
typedef struct ListStack
{
Node* top;
size_t cnt;
}ListStack;
ListStack* create_list_stack(void)
{
ListStack* stack = malloc(sizeof(ListStack));
stack->top = NULL;
stack->cnt = 0;
return stack;
}
bool empty_list_stack(ListStack* stack)
{
return NULL == stack->top;
}
void push_list_stack(ListStack* stack,TYPE data)
{
Node* node = create_node(data);
node->next = stack->top;
stack->top = node;
stack->cnt++;
}
bool pop_list_stack(ListStack* stack)
{
if(empty_list_stack(stack)) return false;
Node* temp = stack->top;
stack->top = temp->next;
free(temp);
stack->cnt--;
return true;
}
TYPE top_list_stack(ListStack* stack)
{
return stack->top->data;
}
size_t size_list_stack(ListStack* stack)
{
return stack->cnt;
}
void destory_list_stack(ListStack* stack)
{
while(pop_list_stack(stack));
free(stack);
}
int main(int argc,const char* argv[])
{
ListStack* stack = create_list_stack();
for(int i=0; i<10; i++)
{
push_list_stack(stack,i);
!empty_list_stack(stack) &&
printf("%d ",top_list_stack(stack));
printf("%lu\n",size_list_stack(stack));
}
printf("--------------\n");
while(!empty_list_stack(stack))
{
printf("%d ",top_list_stack(stack));
printf("%lu\n",size_list_stack(stack));
pop_list_stack(stack);
}
destory_list_stack(stack);
}