算法-队列操作

简介

新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ 号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第 1 个数删除,紧接着将第 2 个数放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串数的末尾,再将第 5 个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的 QQ 啦。现在你来帮帮小哼吧。小哈给小哼加密过的一串数是“6 3 1 7 5 8 9 2 4”。
OK,现在轮到你动手的时候了。快去找出 9 张便签或小纸片,将“6 3 1 7 5 8 9 2 4”这9 个数分别写在 9 张便签上,模拟一下解密过程。如果你没有理解错解密规则的话,解密后小哈的 QQ 号应该是“6 1 5 9 4 7 2 8 3”。其实解密的过程就像是将这些数“排队”。每次从最前面拿两个,第 1 个扔掉,第 2 个放到尾部。具体过程是这样的:刚开始这串数是“6 3 1 7 5 8 9 2 4”,首先删除 6 并将 3 放到这串数的末尾,这串数更新为“1 7 5 8 9 2 4 3”。接下来删除 1 并将 7 放到末尾,即更新为“5 8 9 2 4 3 7”。再删除 5 并将 8 放到末尾即“9 2 4 3 7 8”,删除 9 并将 2 放到末尾即“4 3 7 8 2”,删除 4 并将 3 放到末尾即“7 8 2 3”,删除 7 并将 8 放到末尾即“2 3 8”,删除 2 并将3 放到末尾即“8 3”,删除 8 并将 3 放到末尾即“3”,最后删除 3。因此被删除的顺序是“6 1 5 9 4 7 2 8 3”,这就是小哈的 QQ 号码了。

Java

import java.util.ArrayList;
public class Ceshi {
    public static void main(String[] args) {
        //定义队列 的本体 List
        int[] queue = new int[]{6,3,1,7,5,8,9,2,4};
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 0;i<=queue.length-1;i++){
            list.add(queue[i]);
        }
        //定义队头 队尾
        int head = 0,tail = queue.length ;
        //开始入队出队
        while (head<tail){
            System.out.println("出队元素为:"+ list.get(head));
            head++;
            //防止get超过index范围报错
            if (head!=tail){
                list.add(list.get(head));
            }
            tail++;
            head++;
        }
    }
}

 

Python

list = [6, 3, 1, 7, 5, 8, 9, 2, 4]
head = 0
tail = len(list)
while head < tail:
    print(f"出队元素:{list[head]}")
    head += 1
    if head != tail:
        list.append(list[head])
    tail += 1
    head += 1