我不明白这段代码是如何工作的?

时间:2016-06-24 10:18:32

标签: java

所以我明天在java上参加考试,而且我没有得到这个队列代码,这是完整的课程:

public class queues {

    static final int max = 5;
    static int[] queue = new int[max];
    static int t = 0, h = 0;

    static boolean isempty() {
        return t == h;
    }

    static boolean isfull() {
        return (t + 1) % max == h;
    }

    static void enqueue(int e) {
        if (isfull()) {
            System.out.println("Queue is Full");
        } else {
            queue[t] = e;
            t = (t + 1) % max;
        }
    }

    static int dequeue() {
        if (isempty()) {
            System.out.println("Queue is empty");
            return 0;
        } else {
            int temp = queue[h];
            queue[h] = 0;
            h = (h + 1) % max;
            return temp;
        }
    }
}

但是,当其他执行时,我不会得到enqueue()方法。t=(t+1)%max;行不应该在{{1}之前}}, 或者我们不应该写queue[t]=e;而不是?因为我们在t旁边的地址中插入一个元素,而不是t本身。 有人可以向我解释这个插入是如何工作的吗?

1 个答案:

答案 0 :(得分:1)

将队列视为空,所以你的t == 0.当你用enqueue方法插入第一个元素时,它应该放在int []队列数组的0位置。然后指针t递增,以便下一次元素插入1位置。因此,首先,插入完成,然后指针递增,但反之亦然。

所以,基本上,你的t只是一个指向单元格的指针,应该插入一个新元素。