C++编程组队列,组队列是个什么概念?能不能举个例子?1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/03 13:25:23
C++编程组队列,组队列是个什么概念?能不能举个例子?1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末

C++编程组队列,组队列是个什么概念?能不能举个例子?1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末
C++编程组队列,组队列是个什么概念?能不能举个例子?
1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末尾.
2、 DEQUEUE,表示队列头元素出队
举个例子吧

C++编程组队列,组队列是个什么概念?能不能举个例子?1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末
例如课室有8排,5个人要选择坐哪一排,如果
第一个人要坐第 2 排,
第二个人要坐第 3 排,
第三个人要坐第 1 排,
第四个人要坐第 2 排,
第五个人要坐第 1 排,
则第2排坐了第1,第4个人,第3排坐了第2个人,第1排坐了第3,第5个人,
那么这5个人组成的整个队列是这样子的:
1 4 2 3 5.
需要代码实现吗?
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int N = 1010;
const int M = 100100;
int head[N], tail[N], en;
int edge[M], nxt[M], pre[M];
int num[N], use[N], numh, numt;

class Queue
{
    void add(int x, int y)
    {
        edge[en] = y;
        nxt[en] = tail[x];
        pre[nxt[en]] = en;
        pre[en] = -1;
        if (tail[x] == -1)
        {
            head[x] = en;
        }
        tail[x] = en++;
    }
public:
    Queue()
    {
        memset(tail, -1, sizeof tail);
        memset(use, 0, sizeof use);
        numh = numt = en = 0;
    }
    void EnQueue(int x, int group)
    {
        add(group, x);
        if (!use[group])
        {
            use[group] = 1;
            num[numt++] = group;
            if (numt == N)
                numt = 0;
        }
    }
    int DeQueue()
    {
        if (head[num[numh]] == -1)
        {
            use[num[numh++]] = 0;
            if (numh == N)
                numh = 0;
        }
        int &i = head[num[numh]];
        int res = edge[i];
        i = pre[i];
        return res;
    }
    bool empty()
    {
        return head[num[numh]] == -1 && (numh + 1) % N == numt;
    }
};

int main()
{
    Queue q;
    q.EnQueue(1,2);
    q.EnQueue(2,3);
    q.EnQueue(3,1);
    q.EnQueue(4,2);
    q.EnQueue(5,1);
    while(!q.empty())
        cout<<q.DeQueue()<<' ';
    cout<<endl;
    return 0;
}