2016-12-01 3 views
3

Я читал о очередях в реализации Java. Я нашел следующий кодметоды декомпрессии и очереди в реализации очереди

public class QueueOfStrings { 

    private Node first = null; // least-recently added 
    private Node last = null; // most-recently added 

    private class Node { 

     private String item; 
     private Node next; 
    } 

    // is the queue empty? 
    public boolean isEmpty() { 
     return first == null; 
    } 

    public String dequeue() { 
     if (isEmpty()) { 
      throw new RuntimeException("Queue underflow"); 
     } 
     String item = first.item; 
     first = first.next; 
     return item; 
    } 

    public void enqueue(String item) { 
     Node x = new Node(); 
     x.item = item; 
     if (isEmpty()) { 
      first = x; 
      last = x; 
     } else { 
      last.next = x; 
      last = x; 
     } 
    } 

Я переписывать их на моем пути, как это:

public String dequeue() { 
    if (isEmpty()) { 
     throw new RuntimeException("Queue underflow"); 
    } else if (first = last) { 
     String f = first.item; 
     first = null; 
     last = null; 
     return f; 
    } 

    String f = first.item; 
    first = first.next; 
    return f; 

} 
public void enqueue(String item) { 
    Node x = new Node(item); 
    if (first = last = null) { 
     first = last = x; 
    } 
    last.next = x; 
    last = x; 
} 

я делаю прямо в DEQUEUE() и Епдиеие() методы?

В основной метод, который я должен сделать так:

public static void main(String[] args) { 

    QueueOfStrings q = new QueueOfStrings(); 
    q.enqueue("roro"); 
    q.enqueue("didi"); 
    q.enqueue("lala"); 

    System.out.println(q.dequeue()); 
} 

Благодаря

+0

, что имеется в виду под "Могу ли я делать запись в DEQUEUE() и Епдиеие() методы?" ? - также, ваш последний, если должен быть, если (first == null && last == null) {вместо if (first = last = null) { – matt

+0

Я имел в виду право. Я нашел в других кодах, которые они используют иногда 'first = last = null' – Joe

+0

это даже не компилируется. Что вы пытаетесь сделать с first = last = null? –

ответ

3
public String dequeue() { 
    if (isEmpty()) { 
     throw new RuntimeException("Queue underflow"); 
    } else if (first == last) { 
     String f = first.item; 
     first = null; 
     last = null; 
     return f; 
    } 

    String f = first.item; 
    first = first.next; 
    return f; 

} 
public void enqueue(String item) { 
    Node x = new Node(item); 
    if (first == null && last == null) { 
     first = x; 
     last = x; 
     return; // return back when first node is enqueued 
    } 
    last.next = x; 
    last = x; 
} 
+0

@Joe Когда очередь пуста и вы вставляете элемент в очередь, она переходит прямо в оператор 'if' метода' enqueue() ', правильно? Если вы не поместите оператор 'return', код продолжит выполнение строк за пределами оператора' if'. Под «return» я подразумеваю, что «элемент был уравновешен, завершите метод здесь и верните туда, где был вызван метод из« – rafid059

+1

Rafiduzzaman Sonnet, но когда я удалил возврат, код работал хорошо, даже если первый и последний из них null ,, thanks – Joe

+0

@Joe удаление инструкции 'return' тоже работает, но это более понятно. Кроме того, если вы удаляете оператор return, когда вы вставляете первый элемент, к концу метода он укажет на себя (который фиксируется, когда вы вставляете второй элемент, но это поведение, которое вы не хотите). Итак, лучше безопасно, чем жаль – rafid059

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