数据结构学习笔记(Ⅲ):栈和队列

news2025/8/12 16:02:58

目录

1 栈

1.1 栈的基本概念

1.定义

2.基本操作

​1.2 栈道顺序存储实现

1.实现 

2.基本操作

3.共享栈

1.3 栈的链式存储实现

2 队列

2.1 基本概念

1.定义

2.基本操作

2.2 队列的顺序实现

1.实现

2.基本操作

2.3 队列的链式实现

1.链式存储实现队列

2.基本操作

2.4 双端队列

1.双端队列

2.输入受限的双端队列

3.输出受限的双端队列

3 栈的应用

3.1 括号匹配问题

3.2 表达式求值

1.表达式

2.后缀表达式的计算

3.前缀表达式的计算

4.中缀表达式求值

3.3 递归应用

3.4 队列的应用

3.5 矩阵的压缩存储

1.数组的存储结构

2.对称矩阵的压缩存储

3.三角矩阵的压缩存储

4.三对角矩阵的压缩存储

5.稀疏矩阵的压缩存储


1 栈

1.1 栈的基本概念

1.定义

栈是只许在一段进行插入或删除的线性表。后进先出。

栈顶:允许插入和删除的一端

栈底:不允许插入和删除的一端

2.基本操作

1.2 栈道顺序存储实现

1.实现 

与顺序链表实现类似,需要将栈顶指针初始化。初始化时可以设置栈顶指针为-1或0

2.基本操作

以下基本操作时间复杂度:O(1)

入栈

出栈

读取栈顶元素

顺序栈的缺点:栈道大小不可变

3.共享栈

两个栈共享同一片空间

 栈满条件:top0 + 1 == top1;

1.3 栈的链式存储实现

只在头结点对单链表进行插入和删除操作就是栈道链式存储实现

2 队列

2.1 基本概念

1.定义

只允许在一端进行插入,另一端删除的线性表。先进先出

队尾:允许插入的一端

队头:允许删除的一端

2.基本操作

2.2 队列的顺序实现

1.实现

需要设置队头和队尾指针,初始化时可将指针指向0

2.基本操作

入队

出队

查询

队满条件:(Q.rear + 1) % MaxSize == Q.front

队空条件:Q.rear == Q.front

也可在初始化时定义size,入队时size++,出队时size--,以判断队列

2.3 队列的链式实现

1.链式存储实现队列

 

2.基本操作

入队

出队

链式存储一般不会队满

2.4 双端队列

1.双端队列

允许从两端插入和删除的线性表

2.输入受限的双端队列

允许从两端删除、从一端插入的队列

3.输出受限的双端队列

允许从两段插入、从一端删除的队列

单端序列:n个输入的卡特兰数即合法的出栈序列

3 栈的应用

3.1 括号匹配问题

扫描到左括号就入栈,扫描到右括号且栈为空时匹配失败,不为空时栈顶元素出栈与扫描到的元素尝试匹配

3.2 表达式求值

1.表达式

中缀表达式:运算符在两个操作数之间

后缀表达式:运算符在两个操作数之后

前缀表达式:运算符在两个操作数之前 

2.后缀表达式的计算

左优先原则:只要左边的运算符能先计算,就优先算左边的,可以保证运算顺序唯一

3.前缀表达式的计算

右优先原则:只要右边的运算符能先计算,就优先算右边的,可以保证运算顺序唯一

4.中缀表达式求值

3.3 递归应用

函数调用时,最后被调用的函数最先执行结束。

递归调用时,函数调用栈可称为“递归工作栈”。每进入一层递归,就将递归调用所需信息压入栈顶;每退出一层递归,就从栈顶弹出相应信息。

3.4 队列的应用

树的层次遍历、图的广度优先遍历、操作系统中应用

3.5 矩阵的压缩存储

1.数组的存储结构

一维数组元素大小相同,且物理上连续存放;二维数组包括行优先和列优先存储方式。 普通矩阵可以使用数组的形式存储

2.对称矩阵的压缩存储

只存储主对角线和三角区数据,按行优先将各元素存入一维数组中。

矩阵下标-->一维数组下标

3.三角矩阵的压缩存储

将主对角线和非常量区元素存储在一维数组中,并在数组末尾存放常量

4.三对角矩阵的压缩存储

按行/列优先原则,只存储带状部分

5.稀疏矩阵的压缩存储

非零元素个数远小于矩阵元素个数

 按顺序存储--行、列、值的方式存储矩阵元素

按十字链表法:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium基础 —unittest单元测试框架

目录 (一)unittest基本简介 (二)unittest基本概念 1、unittest核心的四个概念 2、如何创建一个测试类 3、test fixture常用的四个方法 4、unittest编写测试方法(用例)规范 5、执行测试脚本 6、入门示例 7、结果说明 &am…

目标检测论文解读复现之十七:融合注意力机制的YOLOv5口罩检测算法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

视频格式转换器下载哪个好?分享:3种TS到MP4的转换器

对于TS视频格式大家可能接触的比较少,我们先来认识下TS视频格式。 TS是日本高清摄像头拍摄下的视频格式,常用于记录实录片段,比如讲堂、演唱会、监控等等。TS和MP4不同的地方在于TS是一种抢先非高清版视频,其画质并不如MP4&#x…

华为十年架构师实战经验总结:大规模分布式系统架构与设计实战

前言 本篇是从程序员到首席架构师十多年职业生涯的实战经验总结,系统讲解构建大规模分布式系统的核心技术与实现方法,包含开源的Fourinone系统的设计与实现过程,手把手教你掌握分布式技术。 通过学习这个系统的实现方法与相关的理论&#x…

Investment Guide|Star Investors: X METAVERSE PRO‘s Copy Trading System

With the globalization of finance, people around the world are more keenly aware of the role of finance. When financial investment has become a social trend, “how to effectively use every penny and grasp every investment opportunity in a timely manner” h…

SpringCloud - 服务调用

文章目录1. LB负载均衡(Load Balance)2. Ribbon负载均衡服务调用2.1 Ribbon负载均衡演示2.1.1 架构2.1.2 POM2.1.3 RestTemplate操作2.2 Ribbon核心组件IRule2.3 负载均衡规则替换2.4 Ribbon负载均衡算法2.4.1 原理2.4.2 手动实现负载均衡3. OpenFeign服务调用3.1 OpenFeign使用…

[Spring Boot]09 Spring Boot集成和使用Redis

目录前言Spring Boot如何集成RedisSpring Boot如何使用Redis小结前言 Redis全称Remote Dictionary Server(远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilip…

Python 基础(二):搭建 Python 开发环境

搭建 Python 开发环境一、下载 Python 安装包二、安装 Python三、Python开始菜单介绍3.1 IDLE3.2 Python 3.113.3 Python 3.11 Manuals3.4 Python 3.11 Manuals Docs四、Hello World大家好,我是水滴~~ 本篇文章主要介绍如何搭建 Python 的开发环境,主要内…

Eolink钉钉webhook使用教程(超详细)

目录 一、操作步骤 1、空间管理 2、添加服务调用 3、填写添加Webhook信息 4、获取DingDing通知URL 1、需要创建一个至少三个人的群 2、需要添加一个群机器人。 3、选择智能群助手 4、添加机器人 5、点击设置 6、选择【自定义】通过Webhook接入自定义服务 7、确认添…

多元统计分析-----例8.1:今有14名学生的身高和体重数据,做相关图以显示相关变量间的关系。

例8.1:今有14名学生的身高和体重数据,做相关图以显示相关变量间的关系。 x1c(147,171,175,159,155,152,158,154,164,168,166,159,164,177) x2c(32,57,64,1,38,35,44,41,54,57,49,47,46,63)plot(x1,x2,xlim c(145,180),ylimc(25,75))出错: …

Android进阶:6、使用okhttp下载图片

因为在网上找到的资源不只是一些字符串或是一些二进制数字,还是有的是可以肉眼看见的图片,那么我们在发送网络请求时拿到的是一张图片该如何显示在组件上面呢? 这就要使用到okhttp的请求返回结果的一个属性(byteStream&#xff0…

自动驾驶感知算法实战14——感知算法模型生产线

自动驾驶感知算法实战专栏:https://blog.csdn.net/charmve/category_12097938.html目录 一、感知算法生产流程二、算法模型部署流程二、各个阶段交付物数据选择(数据采集、数据增强)数据标注模型训练模型量化模型部署测试与验证一、感知算法生产流程 二、算法模型部署流程 二…

【JavaWeb从零到一】JSPELJSTL

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:【JavaWeb】 🥭本文…

通过题目入门python基础1

通过题目入门python基础 简介:本文通过,python的基础题目,带领大家入门python的基础语法,以实用主义为主。 差 读取四个整数 A,B,C,D,并计算 (AB−CD) 的值。 输入格式 输入共四行,第一行包含整数 A&am…

GraphQL 实践与服务搭建

原文链接: GraphQL 实践与服务搭建 GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容…

《SystemVerilog Assertion 应用指南》学习01

文章目录0、基于断言的 验证1、SVA 介绍1.1.、什么是断言1.2、为什么使用 SystemVerilog 断言(SVA)1.3、SystemVerilog 的调度1.4、SVA 术语1.4.1、并发断言1.4.2、即时断言1.5、建立 SVA 块1.6、一个简单的序列1.7、边沿定义的序列1.8、逻辑关系的序列1…

云原生安全:4C~

4C是啥? cloudclustercontainercode 4个C是层的关系,外圈不安全,不能指望里面太安全。。。 目录 Cloud cloud Provider Security 基础架构安全 Cluster cluster的组件 cluster中的组件(应用中的) Container …

第二章:Pythonocc官方demo 案例44(几何板条)

源代码: ##Copyright 2009-2016 Jelle Feringa (jelleferingagmail.com) ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General Public License as pub…

数据库 Apache Doris 展开了为期两个月的调研测试

2022 年 3 月开始,我们对符合以上特点的数据库 Apache Doris 展开了为期两个月的调研测试。以下是 Apache Doris 1.1.2 在各个方面的满足情况。 基于上述情况,我们决定采用 Apache Doris,除了可以满足上文提到的几个特点,我们还考…

[信息系统项目管理师-2023备考]信息化与信息系统(一)

1.信息的质量特性 精确性:对事物状态描述的精准程度完整性:对事物状态描述的全面程度,完整信息应该包括所有重要事实可靠性:信息的来源、采集方法、传输过程是可以信任的,符合预期及时性:获取信息的时刻与…