ADT队列不使用Java库

时间:2015-07-15 11:00:24

标签: java linked-list queue abstract-data-type

我目前正在为即将到来的考试做准备,有一次来自较旧的考试,我们已经获得了ADTQueue

public interface ADTQueue<T> { public void enq(T element);
public void deq();
public T front();
public boolean empty(); } 

我们现在必须实现类Queue以及带有构造函数ListElement(T元素)的内部类及其中的一些方法......

我已经实现了,这是我的以下代码:

public class Queue<T> implements ADTQueue<T> {
private ListElement<T> head;
private ListElement<T> tail;

public Queue(){
    head=null;
    tail=null;
}

public void enq (T element){
    if (empty()){
        head= new ListElement(element);
        tail= new ListElement(element);
    }

    tail.nextElement=new ListElement(element);
    tail=tail.nextElement;
}

public void deq(){
    if (empty()){
        throw new Exception();
    }

    T firstElement=front();
    head=head.nextElement;
    if (head==null){
        tail = null;
    }
}

public T front(){
    if(empty()){
        return null;
    }
    return head.element;
}
public boolean empty(){
    return (head==null);
}

public class ListElement<T>{
    private T element = null;
    private ListElement<T> nextElement = null;

    public ListElement(T element) {
        this.element = element;
    }

    public T getElement() {
        return element;
    }

    public ListElement<T> getNextElement() {
        return nextElement;
    }

    public void setNextElement(ListElement<T> nextElement) {
        this.nextElement = nextElement;
    }



}

我想知道,如果我做的正确,如果我能做得更好。 另外,如果我想做同样但有双链表,它会是什么样子? 我知道,我还需要一个get-和setPreviousElement,但我不确定,enqueue和dequeue方法会有什么变化...... 如果你们能提出一些建议,我会非常高兴 thx提前

1 个答案:

答案 0 :(得分:0)

我也尝试过实施和ADTStack,如果你们其中一个人能告诉我,它是否合适以及我应该改进什么,我会非常高兴

public class Stack<T> implements ADTStack<T> {
private ListElement<T> firstElement;
int size = 0;

public static void main(String[] args) {
    // TODO Auto-generated method stub

}

@Override
public void push(T element) {
    if (empty()){
        firstElement = new ListElement(element);
        size++;
    }
    else{
        firstElement.nextElement=firstElement;
        firstElement=new ListElement(element);
        size++;
    }

}

@Override
public void pop() {
    if(empty()){
        throw new RuntimeException("stack is empty");
    }
    else {
        T element = top();
        firstElement=firstElement.nextElement;
        size--;
    }


}

@Override
public T top() {
    if(empty()){
        return null;
    }
    else{
        return firstElement.element;
    }
}

@Override
public boolean empty() {
    return (firstElement==null);
}

@Override
public int size() {
    return size;
}

public class ListElement<T>{
    private T element = null;
    private ListElement<T> nextElement = null;

    public ListElement(T element){
        this.element = element;
    }

    public T getElement(){
        return element;
    }

    public ListElement<T>getNextElement(){
        return nextElement;

    }

    public void setNextElement(ListElement<T> element){
        this.nextElement = nextElement;

    }
}


}