在基于数组的栈之后,带来了链栈的基本操作
链栈就是结点进行尾插法挂载形成的栈
结点由数据域和指针域组成
同时定义一个top指针指向栈顶
代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//实现链式栈
//结点由数据域和指针域组成
//定义结点
typedef struct node
{
int data;//数据域
struct Node* next;//指针域
}stack_node;
//定义栈顶指针
typedef struct top
{
stack_node* top;
}stack_top;
//初始化
void init(stack_top* top)
{
top->top = NULL;
}
//进栈就是尾插法
void push(stack_top* top)
{
int x;
stack_node* node = NULL;
printf("请输入入栈元素:");
scanf_s("%d",&x);
node = (stack_node*)malloc(sizeof(stack_node));
node->data = x;//数据域等于输入元素
node->next = top->top;//指针域等于栈顶指针即新结点的后继为旧结点
top->top = node;//top指针上移
}
//出栈
int pop(stack_top* top)
{
stack_node* node = NULL;
int x;
if (top->top == NULL)
{
return NULL;
}
else
{
x = (top->top)->data;//获取栈顶结点的数据值
node = top->top;//让结点得到栈顶结点
top->top = node->next;//top指针下移
free(node);//释放结点
return x;
}
}
//判断链栈是否为空
void empty(stack_top* top)
{
if (top->top == NULL