数据结构与算法学习笔记三---栈和队列

目录

前言

一、栈

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++实现了循环队列。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

乡村振兴与农村基础设施建设:加大投入力度,提升建设水平,完善农村基础设施网络,打造宜居宜业的美丽乡村

一、引言 乡村振兴战略是我国在新时代推进农业农村现代化的重大战略部署,其核心目标是实现乡村的全面振兴,促进农业强、农村美、农民富。农村基础设施建设作为乡村振兴的基石,其建设水平直接关系到乡村经济的持续健康发展、乡村环境的改善以…

微软宣布GPT-4o模型,可在 Azure OpenAI上使用

5月14日,微软在官网宣布,OpenAI最新发布的多模态模型GPT-4o,可以在 Azure OpenAI 云服务中使用。 据悉,GPT-4o支持跨文本、视频、音频多模态推理,例如,通过GPT-4o打造一个AI助手,用于辅导孩子解…

【ORACLE战报】2024.4月最新OCP考试喜报.

课程介绍 DBA数据库管理必备认证:ORACLE OCP 19C 教材下载 ORACLE OCP 19C 官方电子教材 ORACLE OCP 12C官方电子教材 题库下载 ORACLE 19C题库 (083384题、082362题)-2024答案修正版.rar 所有的收获都是默默耕耘的成果 2024.4月【最新考试成…

数据挖掘流程是怎样的?数据挖掘平台基本功能有哪些?

数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。 数据挖掘的流程是: 清晰地定义出业务问题,确定数据挖掘的目的。 数据准备: 数据准备包括&am…

精酿啤酒:品质与口感的完善结合

在啤酒的世界中,Fendi club啤酒以其卓着的品质和与众不同的口感赢得了广泛的赞誉。作为精酿啤酒的品牌,Fendi club啤酒始终坚持对品质的追求,为消费者带来超卓的口感体验。 Fendi club啤酒的品质源于对原料的严格挑选和加工。他们选用上好的…

文献速递:多模态深度学习在医疗中的应用--多模式深度学习实现的全癌症整合组织学-基因组学分析

Title 题目 Pan-cancer integrative histology-genomic analysis via multimodal deep learning 多模式深度学习实现的全癌症整合组织学-基因组学分析 01 文献速递介绍 癌症的定义包括肿瘤和组织微环境中标志性的组织病理学、基因组学和转录组学的异质性,这些异…

【数据分析面试】44.分析零售客户群体(Python 集合Set的用法)

题目 假设你是一家在线零售商的数据库管理员,需要分析两类客户的数据。一个集合 purchased_customers 包含在最近一次促销活动中购买了商品的客户ID,另一个集合 newsletter_subscribers 包含订阅了新闻通讯的客户ID。编写一个函数 analyze_customers&am…

C++类与对象基础探秘系列(三)

目录 再谈构造函数 构造函数体赋值 初始化列表 explicit关键字 static成员 概念 特性 友元 友元函数 友元类 内部类 概念 特性 匿名对象 再次理解类和对象 再谈构造函数 构造函数体赋值 在创建对象时,编译器会通过调用构造函数,给对象中的各个成员…

Echarts使用

介绍 ECharts 是一个强大的,基于 JavaScript 的开源数据可视化库,适用于创建多种类型的图表,满足广泛的业务需求。它由百度团队开发并维护,后来捐赠给了 Apache 软件基金会,并已在2021年从孵化项目毕业,成…

【刷题(2)】矩阵

一、矩阵问题基础 遍历: for i in range(len(matrix)): for j in range(len(matrix[0]): while 倒序遍历: for i in range(right,left,-1) 临时存储:temp w,h:len(matrix[0])-1 len(matrix)-1 left,right,top,bottom:0 len(matrix[0])-1 0 len(matrix)-1 索引: width = le…

2024最新互联网公司工作时长排行榜出炉!

“工作时长”,是选择公司的一个非常重要的参考指标。 我们在选择一个公司的时候,除了需要关注总收入package 以外,还需要考虑这家公司的加班时长是否人性化。 我们的工作时长是周工作小时数。法定工作时间是40小时(955)。大小周通常折算为周…

企业大模型如何成为自己数据的“百科全书”?

作者 | 郭炜 编辑 | Debra Chen 在当今的商业环境中,大数据的管理和应用已经成为企业决策和运营的核心组成部分。然而,随着数据量的爆炸性增长,如何有效利用这些数据成为了一个普遍的挑战。 本文将探讨大数据架构、大模型的集成&#xff0…

数据结构篇3—《龙门客“栈”》

文章目录 🚩前言1、栈的概念2、栈的实现框架3、栈的代码实现3.1、栈的初始化和销毁3.2、入栈\出栈\返回栈顶元素\元素个数\判空3.3、栈定义注意事项 4、栈的应用实例——《括号匹配问题》 🚩前言 前面记录了关于顺序表和链表的数据结构,这一篇…

容器安全在云原生的安全上有什么大作为

进入后云计算时代,云原生正在成为企业数字化转型的潮流和加速器。云原生安全相关的公司雨后春笋般建立起来,各个大云厂商也积极建立自己云原生的安全能力,保护云上客户的资产。 与之相对的,黑产组织为了牟利,也在不断…

低功耗设计

设计电路谁都会,但是设计低功耗电路,降低芯片功耗却是难题 - 哔哩哔哩 (bilibili.com) 一个产品的低功耗设计,并不仅仅只是采用一个低功耗的MCU就能解决的问题。产品的低功耗,不久取决于MCU的低功耗,也取决于低功耗的…

QT状态机4-使用并行状态来避免组合爆炸

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent):

别再找了!吐血整理ChatGPT 3.5/4.0新手使用手册

引领科技潮流的ChatGPT早已名声在外,如今获取ChatGPT已变得触手可及,但很多人还多次提问如何使用chatgpt,为了避免陷入误区,本文旨在为广大ChatGPT爱好者提供一份实用的指南。 因此,帮助大家更好地掌握其使用技巧&…

Leecode热题100---11:盛最多水的容器

题目: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾…

linux使用教程(命令介绍、命令格式和命令的使用技巧)

一、命令的格式 1.1 打开终端的方式 ubuntu中的命令基本都是在终端执行的 打开终端的方式: 第一种方法:在ubuntu桌面中鼠标右键选择“打开终端” 第二种方法:使用快捷键ctrl alt t 1.2 终端提示符 stuqfedu:~$ 对于这个提示符 stu&…

PSAI超强插件来袭:一键提升设计效率!

无需魔法,直接在PS中完成图生图、局部重绘、线稿上色、无损放大、扩图等操作。无论你是Windows还是Mac用户,都能轻松驾驭这款强大的AI绘图工具,这款PSAI插件让你的设计工作直接起飞! 在之前的分享中,我为大家推荐过两…