当前位置: 首页 > ds >正文

数据结构学习(days04)

栈(Stack)

定义
栈是一种只允许在一端进行插入和删除操作的线性存储结构。这一端被称为栈顶(Top)。

栈的特点
先进后出(FILO:First In Last Out)
插入操作称为:入栈(Push)
删除操作称为:出栈(Pop)

栈的结构分类
(1)栈顶状态:
满栈:栈顶达到预设最大容量
空栈:栈顶指针位于初始位置

(2)栈的生长方向:
根据栈顶指针增长的方向不同,可分为:

类型描述
增栈栈顶从低地址向高地址增长
减栈栈顶从高地址向低地址增长(如:系统调用栈)

因此,也可衍生出四种状态描述方式:
满增栈、满减栈、空增栈、空减栈

栈的典型应用
函数调用栈(递归)
表达式求值(中缀转后缀)
括号匹配
回溯算法(DFS)

队列(Queue)

定义
队列是一种只允许从一端插入、从另一端删除的线性结构。
插入操作称为:入队(Enqueue)
删除操作称为:出队(Dequeue)

队列的特点
先进先出(FIFO:First In First Out)
插入端称为:队尾(Rear)
删除端称为:队头(Front)

循环队列(Circular Queue)

普通队列在用数组实现时,会存在“假溢出”问题——即使数组有空闲空间,但由于队尾已到达数组末尾,无法继续插入。
为了解决这个问题,引入循环队列:将队列首尾相连形成一个环状结构。

判空与判满逻辑(关键点)
为了区分队空和队满的情况,通常循环队列会少存储一个元素,也就是如果数组长度为 N,最多只能存储 N-1 个元素。

判空条件:

front == rear

即:队头指针与队尾指针重合时,队列为空。

判满条件:

(rear + 1) % capacity == front

即:队尾向前移动一位后刚好等于队头,表示队列已满。

模运算实现循环
循环的关键是使用模运算实现“回绕”:

rear  = (rear + 1) % capacity;
front = (front + 1) % capacity;

栈与队列对比总结表

项目栈(Stack)队列(Queue)
基本定义只允许从一端进行插入和删除的线性结构允许从一端插入、另一端删除的线性结构
操作方式插入、删除都在栈顶进行插入在队尾,删除在队头
数据特性先进后出(FILO)先进先出(FIFO)
操作名称入栈(push)、出栈(pop)入队(enqueue)、出队(dequeue)
特殊概念满栈、空栈;增栈、减栈(栈顶增长方向)队满、队空;循环队列常见实现
满/空判断栈顶是否超出容量范围循环队列:<br>空:front == rear<br>满:(rear + 1) % N == front
常见实现顺序栈、链栈顺序队列、链式队列、循环队列
http://www.xdnf.cn/news/17288.html

相关文章:

  • Node.js- express的基本使用
  • 嵌入式学习---在 Linux 下的 C 语言学习 Day9
  • 《第五篇》基于RapidOCR的图片和PDF文档加载器实现详解
  • 基于单片机GD32E103的HID按键问题分析
  • 日常反思总结
  • electron:vue3+vite打包案例
  • Spring Cloud系列—Eureka服务注册/发现
  • CSS高频属性速查指南
  • 【普通地质学】地球的物质组成
  • Windows 如何上架 iOS 应用?签名上传全流程 + 工具推荐
  • LeetCode——118. 杨辉三角
  • 【Git】修改本地和远程的分支名称
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘chainer’问题
  • 基于AI的自动驾驶汽车(AI-AV)网络安全威胁缓解框架
  • Adobe Analytics 数据分析平台|全渠道客户行为分析与体验优化
  • 【第5话:相机模型1】针孔相机、鱼眼相机模型的介绍及其在自动驾驶中的作用及使用方法
  • 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器-二开视频对话
  • 【java】DDD架构同普通微服务项目的区别
  • DAY 36 复习日
  • MinIO01-入门
  • ara::log::LogStream::WithTag的概念和使用案例
  • Patsy的dmatrix() 函数
  • 利用m0改造循迹模块处理笔记00
  • 智慧酒店:科技赋能下的未来住宿新体验
  • 人工智能领域、图欧科技、IMYAI智能助手2025年7月更新月报
  • RabbitMQ延时队列的两种实现方式
  • NLP自然语言处理 03 Transformer架构
  • 数据集相关类代码回顾理解 | sns.distplot\%matplotlib inline\sns.scatterplot
  • 翻译的本质:人工翻译vs机器翻译的核心差异与互补性
  • 自然语言处理×第三卷:文本数据分析——她不再只是贴着你听,而开始学会分析你语言的结构