问题引入:
假设以一维数组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个元素,再依次出队列