牺牲一个存储空间的循环队列实现方法

牺牲一个存储空间的循环队列实现方法

1.定义循环队列的数据结构
2.初始化
3.入队操作
4.出队操作
5.读队头元素
6.判空操作
7.判满操作
8.计算当前队列中元素的个数
9.测试
10.终端输出结果

所用编译器:Visual Studio Code 1.42.1 C++环境

#include 
#define MaxSize 10
typedef int ElemType;
//定义循环队列的数据结构
typedef struct{
    ElemType data[MaxSize];
    int front,rear;
}SqQueue;
//初始化
void InitQueue(SqQueue &Q){
    Q.front=0;
    Q.rear=0;
}
//入队操作
bool EnQueue(SqQueue &Q,ElemType x){
    if((Q.rear+1)%MaxSize==Q.front)
        return false;
    Q.data[Q.rear]=x;
    Q.rear=(Q.rear+1)%MaxSize;
    return true;
}
//出队操作
bool DeQueue(SqQueue &Q,ElemType &x){
    if(Q.rear==Q.front)
        return false;
    x=Q.data[Q.front];
    Q.front=(Q.front+1)%MaxSize;
    return true;
}
//读对头元素
bool GetHead(SqQueue Q,ElemType &x){
    if(Q.rear==Q.front)
        return false;
    x=Q.data[Q.front];
    return true;
}
//判空操作
bool QueueEmpty(SqQueue Q){
    return(Q.rear==Q.front);
}
//判满操作
bool QueueFull(SqQueue Q){
    return((Q.rear+1)%MaxSize==Q.front);
}
//计算当前队列中元素的个数
void QueueNum(SqQueue Q,int &x){
    x=(Q.rear+MaxSize-Q.front)%MaxSize;
}
//测试
int main(){
    SqQueue Q;
    InitQueue(Q);
    ElemType a,b,x,num;
	//入队4个数,依次为2,4,6,8
    EnQueue(Q,2);
    EnQueue(Q,4);
    EnQueue(Q,6);
    EnQueue(Q,8);
	//出队2个数并打印 
    DeQueue(Q,a); 
    DeQueue(Q,b);
    printf("a=%d\n",a); 
    printf("b=%d\n",b);
	//读当前队头元素并打印
    GetHead(Q,x);
    printf("x=%d\n",x);
	//计算当前队列长度
    QueueNum(Q,num);
    printf("num=%d\n",num);
	//判断此时队列是否为满,是否为空
    if(QueueFull(Q))
        printf("队已满\n");
    else
        printf("队未满\n");
    if(QueueEmpty(Q))
        printf("队为空\n");
    else
        printf("队不为空\n");
	//将剩下的两个元素出队,然后判断队列是否为满,是否为空
    DeQueue(Q,a);
    DeQueue(Q,b);
    if(QueueFull(Q))
        printf("队已满\n");
    else
        printf("队未满\n");
    if(QueueEmpty(Q))
        printf("队为空\n");
    else
        printf("队不为空\n"); 
}
//终端输出结果
PS D:\VSCode\第三章 栈和队列\队列的顺序存储> cd "d:\VSCode\ ջͶ\е˳洢\" ; if ($?) { g++ ѭ.cpp -o ѭ } ; if ($?) { .}
a=2
b=4
x=6
num=2
队未满
队不为空
队未满
队为空

你可能感兴趣的:(队列的基本操作,c++,队列,数据结构,算法)