实现先进先出队列的Java类

时间:2017-04-24 13:31:28

标签: java class queue

我即将开始考试并且正在努力解决这个问题,希望有人可以帮忙。

提供实现接口的完整Java类

interface StringQueue 
{ boolean isEmpty(); 
void add(String c); 
String front(); 
void removeFront(); 
} 

该类应提供标准先进先出队列的实现。队列中的字符应存储在使用QueueCell类型的对象构造的单链表中;你必须把这个类写成一个内部类。 (不得使用Collections Framework中的LinkedList类)。当应用于空队列时,front和removeFront方法应抛出QueueException类型的异常;您可以假设已经编写了QueueException类。

提前致谢

2 个答案:

答案 0 :(得分:1)

轻松尝试

实施:

 private LinkedList<E> list = new LinkedList<E>();
 public void add(E item) {
    list.addLast(item);
 }
 public E removeFront() {
    return list.poll();
 }
 public boolean isEmpty() {
    return !list.isEmpty();
 }
 public int size() {
    return list.size();
 }
 public void addItems(GenQueue<? extends E> q) {
    while (q.hasItems()) list.addLast(q.dequeue());
 }

答案 1 :(得分:0)

我建议你看看我的实现并尝试编写自己的实现。否则,如果你只是复制并粘贴它,它对你没用。

<强>接口

public interface StringQueue {
    boolean isEmpty();
    void add(String c);
    String front();
    void removeFront();
}

<强>实施

public class StringQueueImpl implements StringQueue {
    private QueueCell head;
    private int size = 0;

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public void add(String c) {
        if(head == null){
            head = new QueueCell(c);
        } else {
            QueueCell current = head;
            while(current != null){
                if(current.next == null){
                    current.next = new QueueCell(c);
                    break;
                } else {
                    current = head.next;
                }
            }
        }
        size++;
    }

    @Override
    public String front() throws QueueException {
        if(size == 0 || head == null){
            throw new QueueException();
        }
        return head.value;
    }

    @Override
    public void removeFront() throws QueueException {
        if(size == 0 || head == null){
            throw new QueueException();
        }

        if(head.next != null){
            head = head.next;
        } else { // if only 1 element is in the queue
            head = null;
        }
        size--;
    }

    private static class QueueCell {
        private QueueCell next;
        private String value;

        QueueCell(String s){
            value = s;
        }
    }

    public static class QueueException extends RuntimeException {
        public QueueException(){
            super("Queue is empty");
        }
    }
}