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

news2024/12/23 1:11:44

目录

前言

一、栈

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

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

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

相关文章

OpenAI推出旗舰AI模型GPT-4o并免费开放

🦉 AI新闻 🚀 OpenAI推出旗舰AI模型GPT-4o并免费开放 摘要: OpenAI 未来的产品将以免费为优先,以让更多人使用为目标。OpenAI 发布了桌面版本的程序和更新后的 UI,更加简单自然。推出了新一代大模型 GPT-4o&#xf…

C语言 | Leetcode C语言题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; int* grayCode(int n, int* returnSize) {int ret_size 1 << n;int *ret (int *)malloc(ret_size * sizeof(int));for (int i 0; i < ret_size; i) {ret[i] (i >> 1) ^ i;}*returnSize ret_size;return ret; }

生态系统类型分布数据、土地利用数据、植被类型分布、自然保护区分布数据

引言 全国自然保护区生态系统类型分布信息产品是指基于Landsat TM数字影像&#xff08;以地形图纠正&#xff09;&#xff0c;采用全数字化人机交互遥感快速提取方法&#xff0c;建立全国自然保护区生态系统结构数据集&#xff0c;同时做成多种尺度的栅格数据&#xff0c;其中包…

Python | Leetcode Python题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:if not nums:return list()results list()nums.sort()visited [False] * len(nums)self.dfs(nums, results, list(), visited, 0)return resultsdef df…

2024 National Invitational of CCPC (Zhengzhou)(CCPC郑州邀请赛暨CCPC河南省赛)

2024 National Invitational of CCPC (Zhengzhou) 2024CCPC郑州邀请赛暨CCPC河南省赛 2024 National Invitational of CCPC (Zhengzhou) B. 扫雷 1 题意&#xff1a;扫n轮雷&#xff0c;每轮开始获得一枚扫雷币&#xff0c;可保存&#xff0c;从第一轮开始&#xff0c;可以…

如何管理多个版本的Node.js

我们如何在本地管理多个版本的Node.js&#xff0c;有没有那种不需要重新安装软件再修改配置文件和环境变量的方法&#xff1f;经过我的查找&#xff0c;还真有这种方式&#xff0c;那就是nvm&#xff08;Node Version Manager&#xff09;。 下面我就给大家介绍下NVM的使用 1…

MSR810-LM快速配置通过LTE模块上网

正文共&#xff1a;1111 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 之前买了一个无线版本的MSR810-W&#xff08;淘了一台二手的H3C企业路由器&#xff0c;就用它来打开网络世界的大门&#xff09;&#xff0c;并整理了一份快速配置&#xff08;脚本案例来了&#x…

AI大事记(持续更新)

文章目录 前言 一、人工智能AI 1.基本概念 2.相关领域 2.1基础设施 2.2大模型 2.3大模型应用 二、大事记 2024年 2024-05-14 GPT-4o发布 2024-02-15 Sora发布 2023年 2023-03-14 GPT-4.0发布 2022年 2022-11-30 ChatGPT发布 总结 前言 2022年11月30日openai的…

【数据结构】栈的实现(链式栈)

文章目录 栈的实现&#xff08;链式栈&#xff09;栈的定义初始化栈进栈判断是否为空栈出栈销毁栈获取栈顶元素获取栈的长度栈的打印 完整代码&#xff08;包括测试代码&#xff09;Stack.hStack.ctest.c 栈的实现&#xff08;链式栈&#xff09; 首先新建一个工程&#xff1a…

基于HTTP GET方式获取网络时间的实现

上一节&#xff0c;我们介绍了基于NTP服务器获取网络时间的例子&#xff0c;但在有些情况下&#xff0c;比如我最近在使用RNDIS协议通过4G模块上网&#xff0c;这个协议不支持UDP协议&#xff0c;所以就用不了NTP服务器。或者有时候我们需要有更多的网络时间获取方式&#xff0…

Transformers实战01-开箱即用的 pipelines

文章目录 简介安装pipelines图片转文本文本生成情感分析零训练样本分类遮盖词填充命名实体识别自动问答自动摘要 pipeline 背后做了什么&#xff1f;使用分词器进行预处理将预处理好的输入送入模型对模型输出进行后处理 简介 Transformers 是由 Hugging Face 开发的一个 NLP 包…

群辉部署小雅alist实现视听盛会

最近群辉搭建起来了&#xff0c;开始整蛊影视库&#xff0c;之前搞过nastool。这次折腾下小雅alist。 1.下载并安装 直接在群辉的docker里面下载映像 主要映射下端口和文件夹 #token mytoken.txt 获取地址&#xff1a;https://alist.nn.ci/zh/guide/drivers/aliyundriv…

牛客网刷题 | BC84 牛牛学数列2

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 这次牛牛又换了个数…

《控制系统实验与综合设计》综合四至六(含程序和题目)

1.电机模型辨识实验 1.1 实验目的 &#xff08;1&#xff09;掌握一阶系统阶跃响应的特点&#xff0c;通过实验加深对直流电解模型的理解&#xff1b; &#xff08;2&#xff09;掌握系统建模过程中参数的整定&#xff0c;体会参数变化对系统的影响&#xff1b; &#xff0…

SpringBoot解决CORS跨域——WebMvcConfigurationSupport

前端请求后端报错了。 状态码&#xff1a;403 返回错误&#xff1a;Invalid coRs request 增加配置类WebMvcConfig Configuration public class WebMvcConfig extends WebMvcConfigurationSupport {Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许跨域…

JavaScript异步编程——10-async异步函数【万字长文,感谢支持】

异步函数&#xff08;用 async 声明的函数&#xff09; 异步函数的定义 使用async关键字声明的函数&#xff0c;称之为异步函数。在普通函数前面加上 async 关键字&#xff0c;就成了异步函数。语法举例&#xff1a; // 写法1&#xff1a;函数声明的写法async function foo1(…

杨校老师项目之基于单片机STC89C52的智能环境监测系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 此设计可分为三个主要部分。此中的温度和湿度的检测功能&#xff0c;通过操纵单总线型温湿度传感器DHT11以数字形式显示&#xff0c;实现了切确测得温湿度的功能…

Python | Leetcode Python题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution:def grayCode(self, n: int) -> List[int]:ans [0] * (1 << n)for i in range(1 << n):ans[i] (i >> 1) ^ ireturn ans

uniapp 实现下拉刷新 下滑更新

效果图 在app或者小程序中向下滑动 会出现刷新数据 ,而上拉到底 需要更新数据 功能实现 主要俩种方式 依赖生命周期 在page.json中开启 page.json "style" : {"navigationBarTitleText" : "小小练习","backgroundTextStyle": &qu…

Linux环境部署与命令技巧

Linux环境部署与命令技巧 安装Java 首先确保已经安装了Java。通过运行以下命令检查Java是否已安装&#xff1a; java -version # 查看Java版本如果未安装Java&#xff0c;可以使用以下命令安装OpenJDK&#xff1a; sudo yum install java-11-openjdk # 安装OpenJDK 11创建一个…