顺序循环队列(只设尾指针和所含元素个数)
问题引入:
假设以一维数组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个元素,再依次出队列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?