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

2023-02-27 10:43:35 浏览数 (1)

问题引入:

假设以一维数组elem[0…m-1]存储循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和队列中所含元素个数。 (1)说明该队列特点 (2)给出该循环队列的队空、队满条件 (3)编程实现入队列算法 (4)编程实现出队列算法

分析:

结构体:

代码语言:javascript复制
typedef struct node {
	DataType elem[M];
	int rear;//队尾指针
	int quelen;//元素个数
}SeQueue;

SeQueue Q;

代码语言:javascript复制
队空条件:Q.quelen == 0
代码语言:javascript复制
队满条件:Q.quelen == M

代码实现:

LQueue.h:

代码语言:javascript复制
#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

代码语言:javascript复制
#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个元素,再依次出队列

0 人点赞