キューの一部の操作

#include<iostream>
using namespace std;

#define Maxsize 100

typedef struct SqQueue
{
    int *base;     //基地址
    int front,rear;//队头和队尾
}SqQueue;

//循环队列的初始化
bool initQueue(SqQueue &Q)
{
    Q.base = new int[Maxsize]; //Q.base可以看成是一个数组
    if (!Q.base) return false;
    Q.front = Q.rear = 0;      //头尾指针置为0,队列为空
    return true;
}

//循环队列的入队
bool enQueue(SqQueue &Q,int e)
{
    if ((Q.rear + 1) % Maxsize == Q.front) return false;//尾指针后移一位等于头指针,表明队满
    Q.base[Q.rear] = e;             //Q.base可以看成是一个数组,Q.rear看做是下标
    Q.rear = (Q.rear + 1) % Maxsize;//新元素插入队尾并将队尾指针加一
    return true;
}

//循环队列的出队
bool deQueue(SqQueue &Q,int &e)
{
    if (Q.front == Q.rear) return false;//队空
    e = Q.base[Q.front];                //保存队头元素
    Q.front = (Q.front + 1) % Maxsize;  //对头指针加一
    return true;
}

//循环队列的长度
int queueLen(SqQueue Q)
{
    return (Q.rear - Q.front + Maxsize) % Maxsize;
}

//取循环队列的队头元素
int getHead(SqQueue Q)
{
    if (Q.front != Q.rear) return Q.base[Q.front];//队列不为空
    return -1;
}
int main()
{
    SqQueue Q;
    int n,x;    //n表示元素的个数
    initQueue(Q);
    cin >> n;
    while (n--)
    {
        cin >> x;
        enQueue(Q,x);
    }
    cout << queueLen(Q) << endl;
    cout << getHead(Q) << endl;
    while(true)
    {
        if (deQueue(Q,x)) cout << x << " ";
        else break;           //注意,这里写return -1不可以
    }
    return 0;
}

 

おすすめ

転載: blog.csdn.net/smallrain6/article/details/106292892