循环队列的基本操作

循环队列的基本操作:创建,初始化,求队长,出队,入队,取队头元素等。

#include<iostream>
#define MAXQSIZE 100
using namespace std;

typedef struct              //定义队
{
    int *base;
    int _front;
    int _rear;
}SqQueue;

int InitQueue(SqQueue &Q)       //初始化队
{
    Q.base=new int[MAXQSIZE];
    if(!Q.base) return 0;
    Q._front=Q._rear=0;         //头指针和尾指针置为0,队列为空
    return 1;
}

int QueueLength(SqQueue Q)      //求队列的长度
{
    return (Q._rear-Q._front+MAXQSIZE)%MAXQSIZE;
}

int EnQueue(SqQueue &Q,int e)           //入队(入队,入栈都不需用引用传递)
{
    if((Q._rear+1)%MAXQSIZE==Q._front)     //判断是否队满
        return 0;
    Q.base[Q._rear]=e;            //基地址加上偏移地址
    Q._rear=(Q._rear+1)%MAXQSIZE;   //队尾指针加1
    return 1;
}

int DeQueue(SqQueue &Q,int &e)      //删除队头元素,用e返回其值(出栈,出队都要用引用传递)
{
    if(Q._front==Q._rear) return 0;     //队空
    e=Q.base[Q._front];                 //保存队头元素
    Q._front=(Q._front+1)%MAXQSIZE;     //队头指针加1
    return 1;
}

int GetHead(SqQueue Q)          //取队头元素
{
    if(Q._front!=Q._rear)       //队列非空
        return Q.base[Q._front];    //返回队头元素的值,队头指针不变
}

int main()
{
    SqQueue Q;
    InitQueue(Q);
    cout<<"五元素入队: "<<endl;
    for(int i=0;i<5;i++)
    {
        int j;
        cin>>j;
        EnQueue(Q,j);
    }
    cout<<"输出队列的长度:"<<endl;
    cout<<QueueLength(Q)<<endl;
    int k;
    DeQueue(Q,k);
    cout<<"出队1位:"<<endl;
    cout<<k<<endl;
    DeQueue(Q,k);
    cout<<"再出队1位:"<<endl;
    cout<<k<<endl;
    cout<<"取队头元素:"<<endl;
    cout<<GetHead(Q);

    return 0;
}



阅读更多

没有更多推荐了,返回首页