【重拾C语言】六、批量数据组织(四)线性表—栈和队列

2023-10-09 05:52

本文主要是介绍【重拾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语言】六、批量数据组织(四)线性表—栈和队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170798

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据