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

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

目录

前言

一、栈

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&#xff08;HTML5CSS3Bootstrap&#xff09;》教材。 导航栏 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&…...

基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 扩散映射&#xff08;Diffusion Maps&#xff09; 4.2 卡尔曼滤波 4.3 基于梯度流的扩散映射卡尔曼滤波&#xff08;GFDMKF&#xff09; 5.完整程序 1.程序功能描述 基于梯度流的扩散…...

Flutter 中的 ListTile 小部件:全面指南

Flutter 中的 ListTile 小部件&#xff1a;全面指南 在Flutter中&#xff0c;ListTile是一个用于快速创建列表项的组件&#xff0c;它通常用于ListView中&#xff0c;以展示包含文本、图标、开关、滑块等元素的行。ListTile不仅使得界面看起来美观&#xff0c;而且提供了一种简…...

Kubernetes——CNI网络组件

目录 一、Kubernetes三种接口 二、Kubernetes三种网络 三、VLAN与VXLAN 1.VLAN 2.VXLAN 3.区别 3.1作用不同 3.2vxlan支持更多的二层网络 3.3已有的网络路径利用效率更高 3.4防止物理交换机Mac表耗尽 3.5相对VLAN技术&#xff0c;VXLAN技术具有以下优势 四、CNI网…...

对关系型数据库管理系统的介绍

1.数据库的相关介绍 关系型数据库管理系统&#xff1a;&#xff08;英文简称&#xff1a;RDBMS&#xff09; 为我们提供了一种存储数据的特定格式&#xff0c;所谓的数据格式就是表&#xff0c; 在数据库中一张表就称为是一种关系. 在关系型数据库中表由两部分组成&#xf…...

Nodejs 第七十一章(libuv)

libuv 在Node.js中&#xff0c;libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的&#xff0c;它利用libuv来处理底层的异步操作&#xff0c;如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色&#xff1a; 事件循环&a…...

mysql实战题目练习

1、创建和管理数据库 创建一个名为school的数据库。 列出所有的数据库&#xff0c;并确认school数据库已经创建。 如果school数据库已经存在&#xff0c;删除它并重新创建。 mysql> create database school; Query OK, 1 row affected (0.01 sec)mysql> mysql> sh…...

Linux 案例命令使用操作总结

在信息技术日新月异的今天&#xff0c;Linux以其开源、稳定、高效的特性&#xff0c;逐渐成为了众多专业人士的首选操作系统。然而&#xff0c;关于Linux知识的学习&#xff0c;却常常陷入一个误区——许多人认为&#xff0c;掌握Linux就是死记硬背各种命令和参数。这种观念&am…...

图的拓扑序列(DFS2)

reference way&#xff1a;在图里面能延伸的越远&#xff0c;deep越大&#xff0c;说明它能从自己延伸很长到别的节点&#xff08;别的节点一定有入度&#xff09;&#xff0c;它越可能没有入度。 way&#xff1a;感觉和DFS1差不多&#xff0c;只是从远变成了多。 #include&l…...

2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢&#xff1f;根据往期的经验&#xff0c;只要吃透这些真题和背后的知识点&#xff0c;通过上海小学生古诗文大会的初选&#xff08;初赛&#xff09;一点问题都没有。…...

SystemC学习使用记录

一、概述 对于复杂的片上系统&#xff0c;在进行RTL编码前&#xff0c;需进行深入的系统级仿真&#xff0c;以确认设计的体系结构是否恰当、总线是否能满足吞吐量和实现性要求以及存储器是否浪费&#xff0c;所进行的这些仿真要求在芯片的仿真模型上运行大量的软件&#xff0c…...

Github20K星开源团队协作工具:Zulip

Zulip&#xff1a;让团队协作的每一次交流&#xff0c;都精准高效。- 精选真开源&#xff0c;释放新价值。 概览 随着远程工作的兴起和团队协作的需求不断增加&#xff0c;群组聊天软件成为了日常工作中不可或缺的一部分。Zulip 是github上一个开源的团队协作工具&#xff0c;…...

C语言基础-标准库函数

C语言的标准库函数是由C语言标准库&#xff08;如C99、C11等&#xff09;提供的一系列预定义函数&#xff0c;这些函数通常用于执行常见的编程任务&#xff0c;如字符串操作、内存管理、数学计算、文件操作等。通过使用标准库函数&#xff0c;程序员可以更加高效地编写C语言程序…...

「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 家居生活类媒体包括多种类型&#xff0c;包括门户网站家居生活消费频道&#xff0c;专业的家居消费生活门户&#xff0c;以及行业媒体&#xff0c;平面媒体&#xff0c;KOL和意见领袖。下…...

力扣刷题--数组--第五天

昨天做了几道关于双指针求解的算法题&#xff0c;今天继续看相关的题目。 844. 比较含退格的字符串 给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。   注意&#xff1a;如果对空…...

kafka学习笔记04(小滴课堂)

Kafka的producer生产者发送到Broker分区策略讲解 Kafka核心API模块-producer API讲解实战 代码&#xff1a; ProducerRecord介绍和key的作用 Kafka核心API模块-producerAPI回调函数实战 producer生产者发送指定分区实战 我们设置5个分区。 我们指定分区。 重新指定一个分区&am…...

三菱FX3U-4AD模拟量电压输入采集实例

硬件&#xff1a;&#xff30;&#xff2c;&#xff23;模块 &#xff26;&#xff38;&#xff13;&#xff27;&#xff21;-&#xff12;&#xff14;&#xff2d;&#xff34; &#xff1b;&#xff21;&#xff0f;&#xff24;模块&#xff26;&#xff38;&#xff13…...

OpenAI推出DALL·E 3识别器、媒体管理器

5月8日&#xff0c;OpenAI在官网宣布&#xff0c;将推出面向其文生图模型DALLE 3 的内容识别器&#xff0c;以及一个媒体管理器。 随着ChatGPT、DALLE 3等生成式AI产品被大量应用在实际业务中&#xff0c;人们越来越难分辨AI和人类创建内容的区别&#xff0c;这个识别器可以帮…...

Spring Boot 整合讯飞星火3.5通过接口Api接口实现聊天功能(首发)复制粘贴即可使用,后续更新WebSocket实现聊天功能

程序员必备网站&#xff1a; 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><depen…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...