顺序循环队列(只设尾指针和所含元素个数)
2023-06-13 09:15:16 时间
问题引入:
假设以一维数组elem[0…m-1]存储循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和队列中所含元素个数。 (1)说明该队列特点 (2)给出该循环队列的队空、队满条件 (3)编程实现入队列算法 (4)编程实现出队列算法
分析:
结构体:
typedef struct node {
DataType elem[M];
int rear;//队尾指针
int quelen;//元素个数
}SeQueue;
SeQueue Q;
队空条件:Q.quelen == 0
队满条件:Q.quelen == M
代码实现:
LQueue.h:
#pragma once
typedef struct node {
DataType elem[M];
int rear;//队尾指针
int quelen;//元素个数
}SeQueue;
//初始化
void Initiate(SeQueue *Q) {
Q->quelen = 0;
Q->rear = -1;
}
//入队列
int Insert(SeQueue &Q, DataType x)
{
if (Q.quelen == M)//队列已满
{
printf("队列已满!");
return 0;
}
Q.rear = (Q.rear + 1) % M;
Q.elem[Q.rear] = x;
Q.quelen++;
return 1;
}
//出队列
int Delete(SeQueue &Q, DataType *x)
{
if (Q.quelen == 0)//队列已空
{
printf("队列已空!");
return 0;
}
*x = Q.elem[(Q.rear - Q.quelen + 1 + M)%M];
Q.quelen--;
return 1;
}
test.cpp
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
constexpr auto M = 100;
#include"LQueue.h"
int main() {
int x;
SeQueue Queue;
Initiate(&Queue);
for (int i = 0; i < 10; i++)
{
Insert(Queue, i + 1);
}
int length = Queue.quelen;
printf("出队列的顺序如下:\n");
for (int i = 0; i < length; i++) {
Delete(Queue, &x);
printf("%d ", x);
}
return 0;
}
运行结果
先插入10个元素,再依次出队列
相关文章
- Go 编程 | 连载 09 - 条件和循环表达式
- 队列的基本操作(顺序队列、循环队列、链式队列)
- 数据结构之循环队列
- 【shell】shell脚本实战-while循环语句
- python中使用矢量化替换循环
- 循环队列出队-数组循环队列
- 【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue )
- 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 主函数逻辑结构 | 启动无限循环 | 接收用户操作值 | 宏定义 | 显示操作菜单 )
- JS循环-for循环嵌套
- 分享如何把MongoDB作为循环队列的方法举例
- 查询MySQL实现循环查询的有效方法(mysql有循环)
- for循环嵌套,C语言for循环嵌套详解
- MySQL循环语句的指南(mysql语句循环)
- 中跳出跳出PostgreSQL循环的实践方法(postgresql循环)
- 用 PyTorch 实现基于字符的循环神经网络
- MySQL循环语句详解:让你轻松掌握循环结构的使用方法。(mysql怎么写循环)
- 利用Oracle代码块实现循环控制(oracle 代码块循环)
- Oracle中利用循环实现任务的完美格式(oracle中循环的格式)
- php循环语句for()与foreach()用法区别介绍
- 友情链接横向文字上下间隙循环滚动JS效果