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

【重拾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博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133580645?spm=1001.2014.3001.5502

6.4 线性表——分类与检索

【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133620693?spm=1001.2014.3001.5501

6.5~7 数组初值;字符串、字符数组、字符串数组;类型定义 typedef

【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://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 数组初值&#xff1b;字符串、字符数组、字符串数组&#xff1b;类型定义 typedef 6.8 线性表—栈和队列 6.8.1 栈&#xff08;Stack&#xff09; 全局变量 isEmpty() isFull…...

力扣刷题-哈希表-一个字符串是否能够由另一个字符串中的字符组成

383 赎金信 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。ransomNote 和 magazin…...

Android使用AOP切面编程

在Android应用程序中&#xff0c;AOP可以被用于许多不同的场景&#xff0c;例如日志记录、权限控制、性能分析等。下面是一个简单的例子&#xff0c;说明如何在Android应用程序中使用AOP切面编程。 首先&#xff0c;我们需要在应用程序中引入AspectJ库。我们可以使用Gradle来完…...

Flutter学习笔记

此篇文章用来记录学习Flutter 和 Dart 相关知识 零.Dart基本数据类型 Dart 是一种静态类型的编程语言&#xff0c;它提供了一系列基本数据类型&#xff0c;用于存储和操作不同种类的数据。以下是 Dart 中的一些基本数据类型以及它们的详细介绍&#xff1a; 1. 整数类型&#…...

软件生命周期中的概念设计和详细设计的主要任务是什么

基础概念 在软件生命周期中&#xff0c;概念设计和详细设计是软件设计阶段中的两个重要环节。 概念设计阶段的主要任务是从业务需求出发&#xff0c;将系统的基本概念、主要功能和关键特性进行抽象和定义。概念设计旨在确定系统的整体架构和关键模块&#xff0c;包括以下主要…...

大数据学习(2)Hadoop-分布式资源计算hive(1)

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…...

深入探究HTML表单与JavaScript的关系

深入探究HTML表单与JavaScript的关系 引言 HTML表单是网页中数据收集的重要工具&#xff0c;而JavaScript则充当着这些数据的处理者和控制者的角色。二者之间的关系非常紧密&#xff0c;共同构成了现代Web应用中用户交互的基础。在这篇博客中&#xff0c;我们将详细地解析HTM…...

关于Jupyter notebook 创建python3 时进去不能重命名问题及不能编程问题

首先写这篇博客时&#xff0c;已经被这个问题折磨了三天&#xff0c;看了很多博客&#xff0c;其实解决这个问题的关键就是要么没有下pyzmq或者等级太高&#xff0c;要么等级太低&#xff0c;首先我会按照我思路来。 问题如图&#xff1a; 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表格去掉所有边框,如下&#xff1a; // 备注&#xff1a;若去掉所有边框&#xff0c;可自行将头部边框注释掉即可 // 该样式写在style scoped外面在el-table 中添加class"customer-table"类名 //去掉每行的下边框/deep/ .el-table td.el-table__c…...

python的一些知识点

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

QML 带框最大化显示方法

1.QML窗口最大化很多会给出如下方法: visibility: "FullScreen" 此方法不好的方面是没有最大化&#xff0c;最小化&#xff0c;关闭按钮 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月以来最低记录...

国庆期间区块链行业要闻回顾&#xff1a;产业方面&#xff0c;全国区块链行业产教融合共同体在雄安新区成立&#xff0c;巴西推出基于区块链的数字身份证&#xff0c;瑞银集团在以太坊上推出代币化货币市场基金试点&#xff0c;NASA拟在月球设立区块链数据中心以保存国家机密资…...

国家开放大学 模拟试题 训练

试卷代号&#xff1a;2136 管理会计 参考 试题 一、单项选择题&#xff08;每小题1分&#xff0c;共20分&#xff09; 1.管理会计依靠各种功能来助力企业战略&#xff0c;下列哪项是管理会计的核心功能( )。 A.评价功能 B.预测功能 C.决策功能…...

【GIT版本控制】--常见问题与解决方案

一、修复损坏的仓库 修复损坏的Git仓库可能是面临的一种问题&#xff0c;这通常是由于文件损坏、存储介质问题或不正确的操作等原因引起的。以下是一些修复损坏的Git仓库的常见问题和解决方案&#xff1a; 常见问题&#xff1a; 无法执行Git命令&#xff1a;当尝试运行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&#xff1f; 1.2TCP的连接与释放(确认应答机制&#xff09; 1.2.1三次握手 1.2.2四次挥手 1.3TCP滑动窗口&#xff08;效率机制&#xff09; 1.4流量控制&#xff08;安全机制&#xff09; 1.5拥塞控制&#xff08;安全机制&#xff0…...

端粒/端粒酶生信切入点,6+端粒酶+泛癌+甲基化+实验。

今天给同学们分享一篇端粒酶泛癌甲基化实验的生信文章“Genomic, epigenomic, and transcriptomic signatures for telomerase complex components: a pan‐cancer analysis”&#xff0c;这篇文章于2022年10月31日发表在Mol Oncol期刊上&#xff0c;影响因子为6.6。 激活端粒酶…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…...