一、栈(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)(入队、出队、入栈、出栈操作)。