【重拾C语言】六、批量数据组织(四)线性表—栈和队列
目录
前言
六、批量数据组织——数组
6.1~3 数组基础知识
6.4 线性表——分类与检索
6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef
6.8 线性表—栈和队列
6.8.1 栈(Stack)
全局变量
isEmpty()
isFull()
push()
pop()
测试
6.8.2 队列(Queue)
全局变量
isEmpty()
isFull()
enqueue()
dequeue()
测试
前言
本文介绍了C语言使用数组实现栈和队列,及其相关操作
六、批量数据组织——数组
6.1~3 数组基础知识
【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133580645?spm=1001.2014.3001.5502
6.4 线性表——分类与检索
【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133620693?spm=1001.2014.3001.5501
6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef
【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133660998?spm=1001.2014.3001.5501
6.8 线性表—栈和队列
栈(Stack)和队列(Queue)是常用的线性数据结构。在C语言中,可以使用数组或链表来实现栈和队列。
6.8.1 栈(Stack)
- 栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构。
- 使用数组实现栈时,可以使用一个整数变量来表示栈顶指针(top),指向栈顶元素的位置。
- 初始化栈时,将栈顶指针设置为-1,表示栈为空。
- 入栈操作(Push)将元素添加到栈顶,栈顶指针加1。
- 出栈操作(Pop)从栈顶移除元素,栈顶指针减1。
- 可以使用数组来存储栈的元素。
全局变量
#define MAX_SIZE 100int stack[MAX_SIZE];
int top = -1;
- 定义了一个常量
MAX_SIZE
,它表示栈的最大容量。 - 声明了一个整型数组
stack
,用于存储栈中的元素。 - 声明了一个整型变量
top
,用于表示栈顶的索引,默认值为 -1,表示栈为空。
isEmpty()
检查栈是否为空。如果栈为空,返回值为 1,否则返回值为 0。
int isEmpty() {return top == -1;
}
isFull()
检查栈是否已满。如果栈已满,返回值为 1,否则返回值为 0。
int isFull() {return top == MAX_SIZE - 1;
}
push()
将元素压入栈中。首先检查栈是否已满,如果已满则打印提示信息并返回,否则将 data
压入栈顶,然后将 top
值加 1。
void push(int data) {if (isFull()) {printf("Stack is full. Cannot push element.\n");return;}stack[++top] = data;
}
pop()
从栈中弹出并返回栈顶元素。首先检查栈是否为空,如果为空则打印提示信息并返回 -1,否则将栈顶元素返回,然后将 top
值减 1。
int pop() {if (isEmpty()) {printf("Stack is empty. Cannot pop element.\n");return -1;}return stack[top--];
}
测试
#include <stdio.h>
#define MAX_SIZE 100int stack[MAX_SIZE];
int top = -1;int isEmpty() {return top == -1;
}int isFull() {return top == MAX_SIZE - 1;
}void push(int data) {if (isFull()) {printf("Stack is full. Cannot push element.\n");return;}stack[++top] = data;
}int pop() {if (isEmpty()) {printf("Stack is empty. Cannot pop element.\n");return -1;}return stack[top--];
}int main() {push(10);push(20);push(30);printf("Popped element: %d\n", pop());printf("Popped element: %d\n", pop());return 0;
}
- 调用
push(10)
将元素 10 压入栈中。 - 调用
push(20)
将元素 20 压入栈中。 - 调用
push(30)
将元素 30 压入栈中。 - 调用
pop()
弹出栈顶元素,并将其打印出来。 - 再次调用
pop()
弹出栈顶元素,并将其打印出来。
6.8.2 队列(Queue)
- 队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。
- 使用数组实现队列时,需要两个整数变量来表示队列的头部指针(front)和尾部指针(rear)。
- 初始化队列时,将头部指针和尾部指针都设置为-1,表示队列为空。
- 入队操作(Enqueue)将元素添加到队列尾部,尾部指针加1。
- 出队操作(Dequeue)从队列头部移除元素,头部指针加1。
全局变量
#define MAX_SIZE 100int queue[MAX_SIZE];
int front = -1;
int rear = -1;
- 定义了一个常量
MAX_SIZE
,它表示队列的最大容量。 - 声明了一个整型数组
queue
,用于存储队列中的元素。 - 声明了两个整型变量
front
和rear
,分别表示队列的前端和后端的索引,默认值均为 -1,表示队列为空。
isEmpty()
检查队列是否为空。如果队列为空,返回值为 1,否则返回值为 0。
int isEmpty() {return front == -1;
}
isFull()
检查队列是否已满。如果队列已满,返回值为 1,否则返回值为 0。
int isFull() {return (rear + 1) % MAX_SIZE == front;
}
enqueue()
将元素入队。首先检查队列是否已满,如果已满则打印提示信息并返回,否则根据队列的循环性质更新 rear
的值,并将 data
存储到相应位置。
void enqueue(int data) {if (isFull()) {printf("Queue is full. Cannot enqueue element.\n");return;}if (isEmpty()) {front = 0;}rear = (rear + 1) % MAX_SIZE;queue[rear] = data;
}
dequeue()
用于从队列中出队并返回队首元素。首先检查队列是否为空,如果为空则打印提示信息并返回 -1,否则取出队首元素并根据队列的循环性质更新 front
和 rear
的值。
int dequeue() {if (isEmpty()) {printf("Queue is empty. Cannot dequeue element.\n");return -1;}int data = queue[front];if (front == rear) {front = -1;rear = -1;} else {front = (front + 1) % MAX_SIZE;}return data;
}
测试
#include <stdio.h>
#define MAX_SIZE 100int queue[MAX_SIZE];
int front = -1;
int rear = -1;int isEmpty() {return front == -1;
}int isFull() {return (rear + 1) % MAX_SIZE == front;
}void enqueue(int data) {if (isFull()) {printf("Queue is full. Cannot enqueue element.\n");return;}if (isEmpty()) {front = 0;}rear = (rear + 1) % MAX_SIZE;queue[rear] = data;
}int dequeue() {if (isEmpty()) {printf("Queue is empty. Cannot dequeue element.\n");return -1;}int data = queue[front];if (front == rear) {front = -1;rear = -1;} else {front = (front + 1) % MAX_SIZE;}return data;
}int main() {enqueue(10);enqueue(20);enqueue(30);printf("Dequeued element: %d\n", dequeue());printf("Dequeued element: %d\n", dequeue());return 0;
}
- 调用
enqueue(10)
将元素 10 入队。 - 调用
enqueue(20)
将元素 20 入队。 - 调用
enqueue(30)
将元素 30 入队。 - 调用
dequeue()
出队并打印出队的元素。 - 再次调用
dequeue()
出队并打印出队的元素。
相关文章:

【重拾C语言】六、批量数据组织(四)线性表—栈和队列
目录 前言 六、批量数据组织——数组 6.1~3 数组基础知识 6.4 线性表——分类与检索 6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef 6.8 线性表—栈和队列 6.8.1 栈(Stack) 全局变量 isEmpty() isFull…...
力扣刷题-哈希表-一个字符串是否能够由另一个字符串中的字符组成
383 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。ransomNote 和 magazin…...
Android使用AOP切面编程
在Android应用程序中,AOP可以被用于许多不同的场景,例如日志记录、权限控制、性能分析等。下面是一个简单的例子,说明如何在Android应用程序中使用AOP切面编程。 首先,我们需要在应用程序中引入AspectJ库。我们可以使用Gradle来完…...

Flutter学习笔记
此篇文章用来记录学习Flutter 和 Dart 相关知识 零.Dart基本数据类型 Dart 是一种静态类型的编程语言,它提供了一系列基本数据类型,用于存储和操作不同种类的数据。以下是 Dart 中的一些基本数据类型以及它们的详细介绍: 1. 整数类型&#…...
软件生命周期中的概念设计和详细设计的主要任务是什么
基础概念 在软件生命周期中,概念设计和详细设计是软件设计阶段中的两个重要环节。 概念设计阶段的主要任务是从业务需求出发,将系统的基本概念、主要功能和关键特性进行抽象和定义。概念设计旨在确定系统的整体架构和关键模块,包括以下主要…...

大数据学习(2)Hadoop-分布式资源计算hive(1)
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博>主哦&#x…...
深入探究HTML表单与JavaScript的关系
深入探究HTML表单与JavaScript的关系 引言 HTML表单是网页中数据收集的重要工具,而JavaScript则充当着这些数据的处理者和控制者的角色。二者之间的关系非常紧密,共同构成了现代Web应用中用户交互的基础。在这篇博客中,我们将详细地解析HTM…...

关于Jupyter notebook 创建python3 时进去不能重命名问题及不能编程问题
首先写这篇博客时,已经被这个问题折磨了三天,看了很多博客,其实解决这个问题的关键就是要么没有下pyzmq或者等级太高,要么等级太低,首先我会按照我思路来。 问题如图: 1.自动换行 2.不能重命名 我的解决办…...
一些可以用代码绘制流程图的工具
代码绘制流程图的工具有很多,以下是一些常用的工具: Mermaid:Mermaid 是一个基于 Markdown 的图表语言,可以生成各种类型的图表,包括流程图、时序图、甘特图等。Mermaid 可以使用 JavaScript 或 TypeScript 进行编写,可以通过 Node.js 运行。Graphviz:Graphviz 是一个开…...

Centos中清除因程序异常终止,导致的残留的Cache/buff_drop_caches命令---linux工作笔记063
我这里因为nifi程序背压设置的不合理,导致,内存和CPU消耗过高,系统崩溃,但是重启NIFI以后,发现 对应的执行top命令,看到,系统的buff/cache 依然没有减少,说明内存被浪费了,残留在这里没有被回收. 用这个办法执行这个命令; linux会自动触发清理,但是只有在内存不够用的时候才会…...
Element-UI的使用——表格el-table组件去除边框、滚动条设置、隔行变色、去除鼠标悬停变色效果(基于less)
// Element-ui table表格去掉所有边框,如下: // 备注:若去掉所有边框,可自行将头部边框注释掉即可 // 该样式写在style scoped外面在el-table 中添加class"customer-table"类名 //去掉每行的下边框/deep/ .el-table td.el-table__c…...

python的一些知识点
之前自学过python,学了一些基本语法,但忘得厉害。最近,在努力地写代码,在学代码,写代码中学习python,为此记录一些关于python的知识点。...

QML 带框最大化显示方法
1.QML窗口最大化很多会给出如下方法: visibility: "FullScreen" 此方法不好的方面是没有最大化,最小化,关闭按钮 2.通过showMaximized() 方法可以满足我们需求:在onCompleted 方法中执行 实现的效果如下:...
conda命令大全
conda list 查看环境中已经安装了的软件包 conda list --name your_env_name(虚拟环境名) 查看某个环境下的包 conda config --show 查看现有源 conda env list 或者 conda info -e 查看当前存在那些虚拟环境 conda update conda 更新至最新的conda版本 conda update [pac…...

国庆要闻回顾 | OpenAI 拟研发 AI 手机;9月以太坊上NFT销售量创2021年2月以来最低记录...
国庆期间区块链行业要闻回顾:产业方面,全国区块链行业产教融合共同体在雄安新区成立,巴西推出基于区块链的数字身份证,瑞银集团在以太坊上推出代币化货币市场基金试点,NASA拟在月球设立区块链数据中心以保存国家机密资…...

国家开放大学 模拟试题 训练
试卷代号:2136 管理会计 参考 试题 一、单项选择题(每小题1分,共20分) 1.管理会计依靠各种功能来助力企业战略,下列哪项是管理会计的核心功能( )。 A.评价功能 B.预测功能 C.决策功能…...
【GIT版本控制】--常见问题与解决方案
一、修复损坏的仓库 修复损坏的Git仓库可能是面临的一种问题,这通常是由于文件损坏、存储介质问题或不正确的操作等原因引起的。以下是一些修复损坏的Git仓库的常见问题和解决方案: 常见问题: 无法执行Git命令:当尝试运行Git命令…...

Redis安装及key、string操作
安装 在官网下载的数据包上传到Linux家目录 Install Redis from Source | Redis wget https://download.redis.io/redis-stable.tar.gz tar -xzvf redis-stable.tar.gz cd redis-stable make 编译后出现以下提示后输入make install 出现以下提示则安装成功 输入redis-sever启…...

TCP和UDP的由浅到深的详细讲解
目录 前言 一.TCP 1.1 什么是TCP? 1.2TCP的连接与释放(确认应答机制) 1.2.1三次握手 1.2.2四次挥手 1.3TCP滑动窗口(效率机制) 1.4流量控制(安全机制) 1.5拥塞控制(安全机制࿰…...

端粒/端粒酶生信切入点,6+端粒酶+泛癌+甲基化+实验。
今天给同学们分享一篇端粒酶泛癌甲基化实验的生信文章“Genomic, epigenomic, and transcriptomic signatures for telomerase complex components: a pan‐cancer analysis”,这篇文章于2022年10月31日发表在Mol Oncol期刊上,影响因子为6.6。 激活端粒酶…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...