zl程序教程

您现在的位置是:首页 >  前端

当前栏目

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

循环队列队列 元素 顺序 指针 个数
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个元素,再依次出队列