1、栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。
2、栈的常见基本操作:
InitStack(&S):初始化一个空栈S。
StackEmpty(S):判断一个栈是否为空,若栈为空则返回true,否则返回false。
Push(&S, x):进栈(栈的插入操作),若栈S未满,则将x加入使之成为新栈顶。
Pop(&S, &x):出栈(栈的删除操作),若栈S非空,则弹出栈顶元素,并用x返回。
GetTop(S, &x):读栈顶元素,若栈S非空,则用x返回栈顶元素。
DestroyStack(&S):栈销毁,并释放S占用的存储空间(“&”表示引用调用)。
3、链栈:采用链式存储的栈称为链栈。
链栈组成:
-
节点结构体:每个节点包含一个数据域和一个指向下一个节点的指针。
-
栈结构体:包含一个指向栈顶的指针。
图示:
链栈实质是遵循栈的属性的链表:栈顶可以理解为链表的头结点。链栈遵循栈顶先出原则,故仅通过栈顶便可以实现出入栈操作。对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top=NULL的时候。链栈的进栈push和出栈pop操作都很简单,时间复杂度均为O(1)。
入栈实质上是链表操作的头插法:先将新节点指向原栈顶,再将栈顶指针指向新节点即完成入栈操作。
出栈:先取出栈顶值,再将栈顶指向栈顶的下一个节点即完成出栈操作。
链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。
标签:链表,出栈,复习,指向,栈顶,链栈,数据结构,节点 From: https://www.cnblogs.com/sejwy/p/18542403