2016-06-24 3 views
-4

Так что у меня завтра экзамен в 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() метода, когда else. Не должна ли линия t=(t+1)%max; быть до queue[t]=e;, или не стоит ли писать queue[t=(t+1)%max]=e? Потому что мы вставляем элемент в адрес, который находится рядом с t, а не сам. Может кто-нибудь объяснить мне, как эта вставка работает?

+0

конвенции Следуйте именовании и форматировать Ваш код. – eldo

+0

не пытайтесь выучить концепцию из кода, если вы новичок. Сначала поймите, как работает очередь и основные операции. Затем попробуйте ввести код самостоятельно. Удачи! – uniquephase

+0

просто пройдите код для случая пустой очереди, вы фактически вставляете 't'! – luk2302

ответ

1

Рассмотрите, что очередь пуста, поэтому ваш t == 0. Когда вы вставляете первый элемент с помощью метода enqueue, его следует поместить в 0-позицию массива очереди int []. Затем ваш указатель t увеличивается, так что следующий элемент времени будет вставлен в 1 позицию. Следовательно, сначала вставка выполняется, тогда ваш указатель увеличивается, но не наоборот.

Таким образом, в основном, ваша т это просто указатель, который указывает на ячейку новый элемент должен быть вставлен в.

Смежные вопросы