#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define TYPE int
typedef struct ListNode
{
TYPE data;
struct ListNode* next;
}ListNode;
ListNode* create_list_node(TYPE data)
{
ListNode* node = malloc(sizeof(ListNode));
node->data = data;
node->next = NULL;
return node;
}
// 链式栈结构
typedef struct ListStack
{
ListNode* top; // 栈顶指针 指向栈顶节点
size_t size; // 节点数量
}ListStack;
// 创建栈
ListStack* create_list_stack(void)
{
ListStack* stack = malloc(sizeof(ListStack));
// 因为栈不允许随意操作插入、删除操作,因此不需要头节点
stack->top = NULL;
stack->size = 0;
return stack;
}
// 栈空
bool empty_list_stack(ListStack* stack)
{
return 0 == stack->size;
}
// 入栈
void push_list_stack(ListStack* stack,TYPE data)
{
ListNode* node = create_list_node(data);
node->next = stack->top;
stack->top = node;
stack->size++;
}
// 出栈
bool pop_list_stack(ListStack* stack)
{
if(empty_list_stack(stack)) return false;
ListNode* node = stack->top;
stack->top = node->next;
free(node);
stack->size--;
return true;
}
// 栈顶
TYPE top_list_stack(ListStack* stack)
{
return stack->top->data;
}
// 节点数
size_t size_list_stack(ListStack* stack)
{
return stack->size;
}
// 销毁
void destroy_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+10);
printf("top:%d size:%d\n",
top_list_stack(stack),
size_list_stack(stack));
}
printf("----------------\n");
while(!empty_list_stack(stack))
{
printf("top:%d size:%d\n",
top_list_stack(stack),
size_list_stack(stack));
pop_list_stack(stack);
}
destroy_list_stack(stack);
}
数据结构(线性表--链式栈)
最新推荐文章于 2024-10-17 09:17:09 发布