欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

循环队列的实现

程序员文章站 2022-03-08 09:20:28
...

语言:C++

#include <iostream>
using namespace std;

#define MAXQSIZE 100
typedef struct
{
    int *base;
    int front;
    int rear;
}SqQueue;

//初始化
void InitQueue(SqQueue &Q)
{
    //构造一个空队列Q
    Q.base=new int[MAXQSIZE];
    if(!Q.base)cout<<"存储失败!"<<endl;
    Q.front=Q.rear=0;
}

//求队列长度
int QueueLength(SqQueue Q)
{
    //返回Q的元素个数,即队列长度
    return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}

//入队
void EnQueue(SqQueue &Q,int e)
{
    //插入元素e为Q的新的队尾元素
    if((Q.rear+1)%MAXQSIZE==Q.front)
    cout<<"队已满,插入失败!"<<endl;
    Q.base[Q.rear]=e;
    Q.rear=(Q.rear+1)%MAXQSIZE;
}

//出队
int DeQueue(SqQueue &Q,int &e)
{
    //删除Q的队尾元素,用e返回其值
    if(Q.front==Q.rear) cout<<"队为空,返回失败!"<<endl;
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXQSIZE;
    return e;
}

//输出队
void display(SqQueue &Q)
{
    cout<<"[";
    while(Q.front!=Q.rear)
    {
        if(Q.front+1==Q.rear)
        {
            cout<<Q.base[Q.front];
        }
        else
        {
            cout<<Q.base[Q.front]<<"<";
        }
        Q.front=(Q.front+1)%MAXQSIZE;
    }
    cout<<"]"<<endl;
}

int main()
{
    SqQueue Q;int x;int e;int i;
    cout<<"欢迎使用循环队列!功能如下:"<<endl;
    cout<<"--------------------------"<<endl;
    cout<<"[1].初始化       [2].入队"<<endl;
    cout<<"[3].出队         [4].取队长"<<endl;
    cout<<"[5].输出队       [0].退出"<<endl;
    cout<<"--------------------------"<<endl;
    cout<<"请输入:";cin>>x;
    while(x)
    {
        switch(x)
        {
            case 1:InitQueue(Q);break;
            case 2:cout<<"请输入要入队的元素:";cin>>e;EnQueue(Q,e);break;
            case 3:i=DeQueue(Q,e);cout<<"出队元素为:"<<i<<endl;break;
            case 4:i=QueueLength(Q);cout<<"当前队长为:"<<i<<endl;break;
            case 5:cout<<"当前队列为(队头在前):"<<endl;display(Q);break;
            case 0:break;
            default:cout<<"您的选择错误,请重新输入!"<<endl;
        }
        cout<<"请选择您需要的功能:";cin>>x;
    }
    return 0;
}

 

相关标签: 数据结构