数据结构与算法学习笔记三---栈和队列
目录
前言
一、栈
1.栈的表示和实现
1.栈的顺序存储表示和实现
1.C语言实现
2.C++实现
2.栈的链式存储表示和实现
1.C语言实现
2.C++实现
2.栈的应用
1.数制转换
二、队列
1.栈队列的表示和实现
1.顺序队列的表示和实现
2.链队列的表示和实现
2.循环队列
前言
这篇文章主要介绍栈和队列的用法。
一、栈
栈和队列都是访问受限的线性表。栈仅允许在表尾进行插入和删除操作。对于栈来说,允许操作的那一端叫栈顶,表头端口称为栈底。不含元素的空表称为空栈。
栈的示意图如下:
图1.栈的示意图
1.栈的表示和实现
和线性表一样,栈也有两种存储表示方法。
1.栈的顺序存储表示和实现
栈顶指针和栈中元素之间的关系如下图所示

图2.栈顶指针和栈中元素之间的关系
1.C语言实现
顺序栈的C语言实现看这里。
2.C++实现
顺序栈的C++实现在这里。
2.栈的链式存储表示和实现
链栈指的是采用链式存储实现的栈。链栈的示意图如下。

图3.链栈示意图
链栈的结点结构与单链表相同,这里不需要使用单链表的头结点。
1.C语言实现
我用C语言实现了链栈,具体的实现可以看这篇文章。
2.C++实现
C++的实现在这里。
2.栈的应用
1.数制转换
例如我们要把十进制的168转成8进制的250。算法如下:
图4.进制转换的算法
这里使用C语言实现了一下,其实进制转换的过程就是栈push和pop的过程,核心代码如下:
// 数制转换函数
void conversion(int decimalNumber, int base) {SqStack stack;initSqStack(&stack); // 初始化栈// 字符集用于将余数转换为相应的字符char charSet[] = "0123456789ABCDEF";// 进行数制转换while (decimalNumber != 0) {int remainder = decimalNumber % base; // 计算余数pushSqStack(&stack, remainder); // 将余数入栈decimalNumber /= base; // 更新十进制数}// 输出转换结果printf("转换结果为:");while (!sqStackEmpty(&stack)) {int digit;popSqStack(&stack, &digit); // 从栈中取出数字printf("%c", charSet[digit]); // 输出对应的字符}printf("\n");
}void conversionTestUnit(void){int decimalNumber, base;// 输入十进制数和目标数制printf("请输入要转换的十进制数:");scanf("%d", &decimalNumber);printf("请输入目标数制(例如,二进制输入2,八进制输入8,十六进制输入16):");scanf("%d", &base);// 进行数制转换并输出结果printf("将十进制数 %d 转换为 %d 进制的结果是:\n", decimalNumber, base);conversion(decimalNumber, base);
}
二、队列
队列也是一种访问受限的线性表,仅允许在表头删除,表尾插入操作。队列是一种先进先出(FIFO)的线性表。
队列的示意图如下:

图4.队列的示意图
1.栈队列的表示和实现
1.顺序队列的表示和实现
在队列的顺序存储结构中,除了使用使用一组连续的存储单元存放队列数据元素之外,设置一个头结点和尾节点。我们约定初始化的时候front = rear = 0.入队之后front+1;出队列之后,rear+1。 
图5.顺序队列中头指针和尾指针以及数据元素之间的关系
这里分别使用C语言和C++实现了顺序队列。
2.链队列的表示和实现
使用链表表示的队列称为链队。示意图如下:

图6.链队示意图
这里分别使用C语言和C++实现了链队列。
2.循环队列
为了防止顺序栈的“假溢出问题”,引入了循环队列。即牺牲顺序队列的一个存储空间,进行队尾+1取模运算。
循环队列的示意图如下:

图5.循环队列示意图
这里分别使用C语言和C++实现了循环队列。
相关文章:
数据结构与算法学习笔记三---栈和队列
目录 前言 一、栈 1.栈的表示和实现 1.栈的顺序存储表示和实现 1.C语言实现 2.C实现 2.栈的链式存储表示和实现 1.C语言实现 2.C实现 2.栈的应用 1.数制转换 二、队列 1.栈队列的表示和实现 1.顺序队列的表示和实现 2.链队列的表示和实现 2.循环队列 前言 这篇文…...
web入门——导航栏
本专栏内容代码来自《响应式web(HTML5CSS3Bootstrap)》教材。 导航栏 实现代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&…...
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 扩散映射(Diffusion Maps) 4.2 卡尔曼滤波 4.3 基于梯度流的扩散映射卡尔曼滤波(GFDMKF) 5.完整程序 1.程序功能描述 基于梯度流的扩散…...
Flutter 中的 ListTile 小部件:全面指南
Flutter 中的 ListTile 小部件:全面指南 在Flutter中,ListTile是一个用于快速创建列表项的组件,它通常用于ListView中,以展示包含文本、图标、开关、滑块等元素的行。ListTile不仅使得界面看起来美观,而且提供了一种简…...
Kubernetes——CNI网络组件
目录 一、Kubernetes三种接口 二、Kubernetes三种网络 三、VLAN与VXLAN 1.VLAN 2.VXLAN 3.区别 3.1作用不同 3.2vxlan支持更多的二层网络 3.3已有的网络路径利用效率更高 3.4防止物理交换机Mac表耗尽 3.5相对VLAN技术,VXLAN技术具有以下优势 四、CNI网…...
对关系型数据库管理系统的介绍
1.数据库的相关介绍 关系型数据库管理系统:(英文简称:RDBMS) 为我们提供了一种存储数据的特定格式,所谓的数据格式就是表, 在数据库中一张表就称为是一种关系. 在关系型数据库中表由两部分组成…...
Nodejs 第七十一章(libuv)
libuv 在Node.js中,libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的,它利用libuv来处理底层的异步操作,如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色: 事件循环&a…...
mysql实战题目练习
1、创建和管理数据库 创建一个名为school的数据库。 列出所有的数据库,并确认school数据库已经创建。 如果school数据库已经存在,删除它并重新创建。 mysql> create database school; Query OK, 1 row affected (0.01 sec)mysql> mysql> sh…...
Linux 案例命令使用操作总结
在信息技术日新月异的今天,Linux以其开源、稳定、高效的特性,逐渐成为了众多专业人士的首选操作系统。然而,关于Linux知识的学习,却常常陷入一个误区——许多人认为,掌握Linux就是死记硬背各种命令和参数。这种观念&am…...
图的拓扑序列(DFS2)
reference way:在图里面能延伸的越远,deep越大,说明它能从自己延伸很长到别的节点(别的节点一定有入度),它越可能没有入度。 way:感觉和DFS1差不多,只是从远变成了多。 #include&l…...
2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)
根据往年的安排,2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢?根据往期的经验,只要吃透这些真题和背后的知识点,通过上海小学生古诗文大会的初选(初赛)一点问题都没有。…...
SystemC学习使用记录
一、概述 对于复杂的片上系统,在进行RTL编码前,需进行深入的系统级仿真,以确认设计的体系结构是否恰当、总线是否能满足吞吐量和实现性要求以及存储器是否浪费,所进行的这些仿真要求在芯片的仿真模型上运行大量的软件,…...
Github20K星开源团队协作工具:Zulip
Zulip:让团队协作的每一次交流,都精准高效。- 精选真开源,释放新价值。 概览 随着远程工作的兴起和团队协作的需求不断增加,群组聊天软件成为了日常工作中不可或缺的一部分。Zulip 是github上一个开源的团队协作工具,…...
C语言基础-标准库函数
C语言的标准库函数是由C语言标准库(如C99、C11等)提供的一系列预定义函数,这些函数通常用于执行常见的编程任务,如字符串操作、内存管理、数学计算、文件操作等。通过使用标准库函数,程序员可以更加高效地编写C语言程序…...
「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 家居生活类媒体包括多种类型,包括门户网站家居生活消费频道,专业的家居消费生活门户,以及行业媒体,平面媒体,KOL和意见领袖。下…...
力扣刷题--数组--第五天
昨天做了几道关于双指针求解的算法题,今天继续看相关的题目。 844. 比较含退格的字符串 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空…...
kafka学习笔记04(小滴课堂)
Kafka的producer生产者发送到Broker分区策略讲解 Kafka核心API模块-producer API讲解实战 代码: ProducerRecord介绍和key的作用 Kafka核心API模块-producerAPI回调函数实战 producer生产者发送指定分区实战 我们设置5个分区。 我们指定分区。 重新指定一个分区&am…...
三菱FX3U-4AD模拟量电压输入采集实例
硬件:PLC模块 FX3GA-24MT ;A/D模块FX3…...
OpenAI推出DALL·E 3识别器、媒体管理器
5月8日,OpenAI在官网宣布,将推出面向其文生图模型DALLE 3 的内容识别器,以及一个媒体管理器。 随着ChatGPT、DALLE 3等生成式AI产品被大量应用在实际业务中,人们越来越难分辨AI和人类创建内容的区别,这个识别器可以帮…...
Spring Boot 整合讯飞星火3.5通过接口Api接口实现聊天功能(首发)复制粘贴即可使用,后续更新WebSocket实现聊天功能
程序员必备网站: 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><depen…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
