题目链接
关键点:
1、利用两个队列,先判断快的A队列是否为空,再在该循环中,每次输出两个A队列就输出一个B队列,当然要注意B队列在输出时为空,所以如果为空那么就直接继续输出A队列
2、还有一点,A队列在次循环中是一定会全部输出的,但是B队列不一定,所以最后要加判断B队列是否完全输出,如果没有,那么就继续输出B队列
完整代码:
# include <stdio.h>
# include <stdlib.h>
typedef struct queue *Queue;
struct queue{
int *data;
int front, rear;
};
Queue createqueue(int size)
{
Queue q = (Queue)malloc(sizeof(struct queue));
q->data = (int *)malloc(sizeof(int)*size);
q->front = -1;
q->rear = -1;
return q;
}
void push(int x, Queue q)
{
q->data[++q->rear] = x;
}
int pop(Queue q)
{
return q->data[++q->front];
}
int Isempty(Queue q)
{
if (q->front==q->rear)
return 1;
else
return 0;
}
int n;
int main()
{
scanf("%d", &n);
Queue qj, qo;
qj = createqueue(1010);
qo = createqueue(1010);
for (int i=1; i<=n; i++)
{
int x;
scanf("%d", &x);
if (x%2==1)
push(x, qj);
else
push(x, qo);
}
int num = 0;
int pan=0;
while (!Isempty(qj))
{
int x;
num++;
if (num>2)
{
if (!Isempty(qo))
{
x = pop(qo);
num = 0;
}
else
{
x = pop(qj);
}
}
else
x = pop(qj);
if (!pan)
{
printf("%d", x);
pan = 1;
}
else
printf(" %d", x);
}
while (!Isempty(qo))
{
int x = pop(qo);
if (!pan)
{
printf("%d", x);
pan = 1;
}
else
printf(" %d", x);
}
return 0;
}