顺序循环队列(只设尾指针和所含元素个数)

问题引入:

假设以一维数组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个元素,再依次出队列
在这里插入图片描述

posted @   别团等shy哥发育  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示