//链表实现栈需要将表尾作为栈底(botton) 表头作为栈顶(top) 头删作为出栈/弹栈(pop) 头插作为入栈/压栈(push)
/*
* @file_name : Create stack
* @file_function : Creat a stack
* @author : 9Tired
* @date :2026-8-20
* @note : None
* @CopyRight(c) :13371080204@163.com 9Tired 2026-8-20
*/
````C
typedef int DataType_t;
typedef struct Stack
{
DataType_t data; //节点的数据域
struct Stack * next;//结点的指针域
}Stack_t;
//创建一个空链表,使用头节点所以需要申请头节点内存并且初始化
Stack_t * CreateStack(DataType_t data)
{
Stack_t *NewNode = (Stack_t * )calloc(1,sizeof(struct Stack));
if(NULL== NewNode){
perror("Create NewNode is failed");
exit(-1);
}
NewNode->data = data;
NewNode->next = NULL;
return NewNode;
}
bool Stack_push(Stack_t * Head , DataType_t data) //头插
{
Stack_t * Node = CreateStack(data);
if(NULL == Head){
perror("Create Stack Head failed");
return false;
}
Node->next=Head->next;
Head->next=Node;
return true;
}
bool Stack_pop(Stack_t * Head ) //头删除
{
if(NULL == Head){
perror("Create Stack Head failed");
return false;
}
if(Head->next == NULL)
{
return false;
}
Stack_t * Phead = Head->next;
Head->next=Head->next->next;
Phead->next = NULL;
free(Phead);
return true;
}