[编程题] 构造队列

来源:互联网 发布:淘宝 笑涵阁 猫腻 编辑:程序博客网 时间:2024/06/07 19:55

小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:

while(!Q.empty())              //队列不空,执行循环{    int x=Q.front();            //取出当前队头的值x    Q.pop();                 //弹出当前队头    Q.push(x);               //把x放入队尾    x = Q.front();              //取出这时候队头的值    printf("%d\n",x);          //输出x    Q.pop();                 //弹出这时候的队头}

做取出队头的值操作的时候,并不弹出当前队头。
小明同学发现,这段程序恰好按顺序输出了1,2,3,…,n。现在小明想让你构造出原始的队列,你能做到吗?[注:原题样例第三行5有错,应该为3,以下已修正]
输入描述:
第一行一个整数T(T ≤ 100)表示数据组数,每组数据输入一个数n(1 ≤ n ≤ 100000),输入的所有n之和不超过200000。

输出描述:
对于每组数据,输出一行,表示原始的队列。数字之间用一个空格隔开,不要在行末输出多余的空格.

输入例子1:
4
1
2
3
10

输出例子1:
1
2 1
2 1 3
8 1 6 2 10 3 7 4 9 5

解题思路

可以先构建一个空的数组,长度为n。按照1,2,3,…,n的顺序进行填充,填充的位置是每间隔一个空白处,空白处即尚未被填充过的数组中的位置,到末尾之后,再返回数组头部,直到所有位置被填充上元素。这里使用的linkedlist的数据结构,适合删除操作。

import java.util.LinkedList;import java.util.ListIterator;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int T = sc.nextInt();        for (int i = 0; i < T; i++) {            int num = sc.nextInt();            int[] data = new int[num];            LinkedList<Integer> list = new LinkedList<>();            for (int x = 0; x < num; x++)                list.add(x);            int val = 1;            ListIterator<Integer> it = list.listIterator();            while (list.size() != 0) {                if (it.hasNext()) {                    it.next();                } else {                    it = list.listIterator();                    it.next();                }                int index = 0;                if (it.hasNext()) {                    index = it.next();                    it.remove();                } else {                    it = list.listIterator();                    index = it.next();                    it.remove();                }                data[index] = val++;            }            for (int j = 0; j < data.length - 1; j++)                System.out.print(data[j]+" ");            System.out.println(data[data.length - 1]);        }    }}
原创粉丝点击