C++编程组队列,组队列是个什么概念?能不能举个例子?1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 21:27:23
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;
}