数据结构复习——链、链栈。
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)。
入栈实质上是链表操作的头插法:先将新节点指向原栈顶,再将栈顶指针指向新节点即完成入栈操作。
出栈:先取出栈顶值,再将栈顶指向栈顶的下一个节点即完成出栈操作。
链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?