C++编程组队列,组队列是个什么概念?能不能举个例子?

2024-12-28 11:18:56
推荐回答(2个)
回答1:

例如课室有8排,5个人要选择坐哪一排,如果

第一个人要坐第 2 排,

第二个人要坐第 3 排,

第三个人要坐第 1 排,

第四个人要坐第 2 排,

第五个人要坐第 1 排,

则第2排坐了第1,第4个人,第3排坐了第2个人,第1排坐了第3,第5个人,

那么这5个人组成的整个队列是这样子的:

1 4 2 3 5。

需要代码实现吗?

#include
#include
#include
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<    cout<    return 0;
}

回答2:

意思是同一个类别或者分组的元素必须挨着。