问题描述
给定一个队列,请用一系列合法的队列操作函数,比如判断队列是否为空,入队操作,出队操作,将队列中的元素从小到大排序。
输入说明
输入首先给出1个正整数N(N<1000),表示队列中元素的个数。随后按入队的顺序给出N个整数。
输出说明
在一行中输出排序后出对的序列。数字间以空格分隔,但末尾不得有多余空格。
输入样例
10 3 6 4 8 7 2 9 0 1 5
输出样例
0 1 2 3 4 5 6 7 8 9
提示
可以使用一个辅助的队列,采用循环筛选法(即第一轮将最小的选出来,第二轮将次小的选出来,以此类推)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct sequeue
{
int data[1000];
int front=-1,rear=-1;
}seq;
seq *sq,*s;
int frq(seq *sq)
{
int ret;
ret=sq->data[(sq->front+1)%1000];
return ret;
}
void enq(seq *sq,int x)
{
sq->rear=(sq->rear+1)%1000;
sq->data[sq->rear]=x;
}
int deq(seq *sq)
{
int ret;
sq->front=(sq->front+1)%1000;
ret=sq->data[sq->front];
return ret;
}
int main()
{
int n,i,x,t,f,j;
scanf("%d",&n);
sq=(seq*)malloc(sizeof(seq));
s=(seq*)malloc(sizeof(seq));
for(i=0;i<n;i++)
{
scanf("%d",&x);
enq(sq,x);
}
j=n;
while(j!=0)
{
t=frq(sq);
for(i=0;i<j;i++)
{
f=deq(sq);
if(t>f) t=f;
enq(s,f);
}
for(i=0;i<j;i++)
{
f=deq(s);
if(f!=t) enq(sq,f);
}
j--;
printf("%d",t);
if(j!=0) printf(" ");
}
return 0;
}