第三章 栈和队列(3.3.3)
3.3.3链栈的表示和实现
定义:
链栈是指采用链式存储结构实现的栈。通常链栈用单链表来表示。链栈的结构与单链表的结构相同
在此用StackNode来表示,定义如下:
typedef struct StackNode
{
SElemType data;
struct StackNode* next;
}StackNode, * LinkStack;
由于栈的主要操作是在栈顶插入和删除,显然以链表的头部作为栈顶最方便。

1.初始化
1.1定义:
链栈的初始化操作就是投建一个空栈,因为没必要设头结点,所以直接将栈顶指针置空即可。
1.2算法描述:
Status InitStack(LinkStack& S)
{
//构造一个空栈,栈顶指针置为空
S = NULL;
return OK;
}
2.入栈
2.1定义
链栈在入栈前不需要判断栈是否满,只需要为入栈元素动态分配一个结点空间。
2.2算法描述
Status Push(LinkStack& S, SElemType e)
{
LinkStack p = (LinkStack)malloc(sizeof(StackNode));
p->data = e;//将新结点数据域置为e
p->next = S;//将新结点插入栈顶
S = p;//修改栈顶指针
return OK;
}//Push
3.出栈
3.1定义
链栈在出栈前也需要 判断栈是否为空,链栈在出栈后需要释放出栈元素的栈顶空间
3.2算法描述
Status Pop(LinkStack& S, SElemType& e)
{
if (S == NULL)
return ERROR;
e = S->data;
LinkStack p = S;
S = S->next;
free(p);
return OK;
}//Pop
4.取栈顶元素
4.1定义
当栈非空时,此操作返回当前栈顶元素的值,栈顶指针s保持不变
4.2算法描述
Status GetTop(LinkStack S, SElemType& e)
{
if (S != NULL)
{
e = S->data;
return OK;
}
return ERROR;
}//GetTop

浙公网安备 33010602011771号