队列/栈基本原理 ❗前置知识

简介: 本文介绍队列和栈两种“操作受限”的数据结构:队列遵循先进先出(FIFO),只能队尾入、队头出;栈遵循先进后出(FILO),仅在栈顶进行增删操作。二者底层多由数组或链表实现,核心API包括push、pop、peek和size,是后续复杂数据结构的基础。

计算机的两种存储方式,顺序存储(数组)和链式存储(链表)都讲完了,之后的所有数据结构都是基于这两种存储方式之上玩花活。
本文讲解队列和栈的基本原理,后面的文章会讲解如何用代码具体实现。
先说概念吧,其实队列和栈都是「操作受限」的数据结构。说它操作受限,主要是和基本的数组和链表相比,它们提供的 API 是不完整的。
比方说我们前面实现的数组和链表,增删查改的 API 都实现过了,你可以对任意一个索引元素进行增删查改,只要索引不越界,就随便你。
但是对于队列和栈,它们的操作是受限的:队列只能在一端插入元素,另一端删除元素;栈只能在某一端插入和删除元素。
形象地说,队列只允许在队尾插入元素,在队头删除元素,栈只允许在栈顶插入元素,从栈顶删除元素:
队列就像排队买票,先来的先买,后来的后买;栈就像一摞盘子,最先放的压在最下面,最后放的留在最上面,拿的时候也是最上面的先被拿走。所以我们常说,队列是一种「先进先出 FIFO」的数据结构,栈是一种「先进后出 FILO」的数据结构,就是这个道理。
当然,这个图中把栈竖着画,队列横着画,只是为了更形象,但实际上它们底层都是数组和链表实现的,后面会讲到。这两种数据结构的基本 API 如下:
// 队列的基本 API
class MyQueue {
// 向队尾插入元素,时间复杂度 O(1)
void push(E e);

// 从队头删除元素,时间复杂度 O(1)
E pop();

// 查看队头元素,时间复杂度 O(1)
E peek();

// 返回队列中的元素个数,时间复杂度 O(1)
int size();

}

// 栈的基本 API
class MyStack {
// 向栈顶插入元素,时间复杂度 O(1)
void push(E e);

// 从栈顶删除元素,时间复杂度 O(1)
E pop();

// 查看栈顶元素,时间复杂度 O(1)
E peek();

// 返回栈中的元素个数,时间复杂度 O(1)
int size();

}
不同编程语言中,队列和栈提供的方法名称可能不一样,但每个方法的效果肯定是一样的。

相关文章
|
缓存 搜索推荐 关系型数据库
Elasticsearch - 闲聊ElasticSearch中的分页
Elasticsearch - 闲聊ElasticSearch中的分页
496 0
|
小程序 JavaScript 内存技术
用uni-app开发一个名为汉兜的游戏
虽然我是带队,但我希望尽可能让队员们自己去完成游戏的代码部分,我负责出出主意,提供一些美术,玩法创意上的支持。其实一开始大家头脑风暴组队领游戏创意的时候,汉兜这个游戏一直没人领,不得不说,不知道叫啥名队的小伙伴执行力很强,连给游戏起名字都很快,一点都不拖泥带水。
2377 0
用uni-app开发一个名为汉兜的游戏
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
1177 0
|
3月前
|
存储 SQL 人工智能
AI时代代码开发(数据库设计)
本文介绍基于三范式与DDD的数据库设计流程,结合AI工具辅助分析页面原型,通过部门、员工及工作经历模块,演示表结构设计与优化过程,强调人工校验与调整的重要性,最终完成符合业务需求的数据库建模与测试数据构建。
|
3月前
|
人工智能 Java 程序员
SpringAI+DeepSeek大模型应用开发
本教程以SpringAI为核心,讲解Java与大模型(如DeepSeek)融合开发,助力传统应用智能化升级。适合Java程序员入门AI开发,推动企业低成本拥抱AI变革。
|
3月前
|
人工智能 自然语言处理 Cloud Native
AI时代代码开发(DeepSeek+Cursor+Devbox)
AI时代重塑软件开发,本课程聚焦DeepSeek+Cursor+Devbox+Sealos工具链,实现自然语言到代码的零基础全栈开发。覆盖需求分析、数据库设计、编码测试至云部署全流程,助力开发者高效构建并上线项目,抢占智能开发先机。(238字)
|
人工智能 搜索推荐 安全
正式上线!阿里云短信模板 AI 助手,10 秒生成/改写个性化、合规短信内容
阿里云短信服务 - 短信模板AI 助手已全面开放,欢迎体验!
906 6
|
前端开发 容器
如何利用CSS实现三角形、扇形、聊天气泡框
如何利用CSS实现三角形、扇形、聊天气泡框
682 0
|
存储 前端开发 数据挖掘
前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)(一)
前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)
491 0
|
JavaScript Java PHP
主流开发语言和开发环境介绍
主流开发语言和开发环境介绍
461 0