上篇我们讲完了顺序栈,这回我们来讲下链栈,链栈的实现与顺序栈相同
一、定义
链栈:栈的链式存储结构(以链表的形式实现栈的特性)
对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间。
链栈的操作绝大部分和单链表类似
二、基本操作
1、存储结构
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node* next;
}Node,Stack, *pStack;//再设计一个栈类型
2、初始化
void init(pStack pst)
{
if (pst != nullptr)
{
pst->next = nullptr;
}
}
3、入栈
链栈的入栈同单链表的插入,都需先购买一个结点进行插入
(1)购买结点
Node *buyNode(Elemtype val)
{
Node* pnewnode = (Node*)malloc(sizeof(Node));
pnewnode->data = val;
pnewnode->next = nullptr;
return pnewnode;
}
(2)入栈
void push(pStack pst, Elemtype val)//元素做一个链表的头插
{
Node* pnewnode = buyNode(val);
pnewnode->next