数据结构-栈与队列

一、栈(Stack)

栈是一种遵循先进后出(LIFO,Last In First Out) 原则的数据结构,类比生活中堆叠的书籍,只能从顶部取放物品。其核心操作仅围绕栈顶进行:入栈(push)是将元素添加到栈顶,出栈(pop)是移除栈顶元素, peek 操作可查看栈顶元素而不删除,同时支持 isEmpty(判断是否为空)和 size(获取元素个数)等基础功能。栈的实现通常依赖数组或链表,数组实现效率更高(随机访问特性),链表实现则更灵活(无需预设容量)。在编程中,栈常用于递归调用、表达式求值(如后缀表达式转换)、括号匹配校验等场景,例如 Java 中的 Stack 类、C++ 的 std::stack 容器均是栈的典型实现。

二、队列(Queue)

队列遵循先进先出(FIFO,First In First Out) 原则,类似排队购票的场景,元素从队尾加入、队首移除。核心操作包括入队(enqueue,添加元素到队尾)、出队(dequeue,移除队首元素),front 操作可查看队首元素,同样支持 isEmpty 和 size 方法。队列的基础实现可通过数组或链表完成,其中链表实现能避免数组队列的"假溢出"问题(元素出队后队首空间无法复用)。实际应用中,队列常衍生出优先级队列(按优先级排序,而非入队顺序)、双端队列(Deque,两端均可入队出队)等变体,多用于任务调度、消息队列、广度优先搜索(BFS)等场景,Java 的 Queue 接口、C++ 的 std::queue 均为标准实现。

三、核心区别与共性

• 区别:核心在于元素存取顺序------栈是"后进先出",仅操作一端;队列是"先进先出",操作两端。

• 共性:均为线性数据结构,仅支持在特定位置进行插入和删除操作,不支持随机访问元素,底层均可通过数组或链表实现,且时间复杂度均为 O(1)(入队、出队、入栈、出栈操作)。

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
琢磨先生David4 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
starlaky4 天前
Django入门笔记
笔记·django
勇气要爆发4 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
qq_454245034 天前
基于组件与行为的树状节点系统
数据结构·c#
超级大福宝4 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
勇气要爆发4 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
岛雨QA4 天前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc4 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法