0

这是来自 Lafore 的数据结构和算法一书中的编程练习:

在此处输入图像描述

到目前为止,我有这个:

public class DequeLong {
private int maxSize;
private long[] dequeArray;
private int front;
private int rear;
private int nItems;

public DequeLong(int size){
    maxSize = size;
    dequeArray = new long[maxSize];
    front = 0;
    rear = -1;
    nItems = 0;
}

public void insertLeft(long j){
    if(rear == maxSize - 1)
        rear = -1;
    dequeArray[++rear] = j;
    nItems++;
    getDequeArray();
}

public void insertRight(long j){
    if(front == maxSize)
        front = 0;
    dequeArray[front] = j;
    front++;
    nItems++;
    getDequeArray();
}

public long removeLeft(){
    long temp = dequeArray[rear];
    if(rear == 0)
        rear = maxSize - 1;
    else{
        rear--;
    }
    nItems--;
    getDequeArray();
    return temp;
}

public long removeRight(){
    long temp = dequeArray[front++];
    if(front == maxSize)
        front = 0;
    nItems--;
    getDequeArray();
    return temp;
}

public long peekFront(){
    return dequeArray[front];
}

public long peekRear(){
    return  dequeArray[rear];
}

public boolean isFull(){
    return nItems == maxSize;
}

public boolean isEmpty(){
    return nItems == 0;
}

public int size(){
    return nItems;
}

public long get(int i){
    return dequeArray[i];
}

public void getDequeArray(){
    System.out.print("[");
    for(int i = 0; i < nItems; i++){
        System.out.print(dequeArray[i] + " ");
    }
    System.out.print("]");
    System.out.println();
}

}

主要课程:

public class DequeApp {
public static void main(String[] args) {

    DequeLong dl = new DequeLong(5);

    //check stack - insertLeft() & removeLeft()
    dl.insertLeft(100);
    dl.insertLeft(200);
    dl.insertLeft(300);
    dl.insertLeft(400);
    dl.insertLeft(500);
    dl.removeLeft();
    dl.removeLeft();
    dl.insertLeft(600);
    dl.insertLeft(700);
    System.out.println("");
    for(int i = 0; i < dl.size(); i++){
        System.out.print(dl.get(i) + " ");
    }
    System.out.println("");

    while(!dl.isEmpty())
        System.out.println("removed: " + dl.removeLeft());
    System.out.println("*************************");

    //check queue - insertLeft() & removeRight()
    dl.insertLeft(1_000);
    dl.insertLeft(2_000);
    dl.insertLeft(3_000);
    dl.insertLeft(4_000);
    dl.insertLeft(5_000);
    dl.removeRight();
    dl.removeRight();
    dl.insertLeft(6_000);
    dl.insertLeft(7_000);
    System.out.println("");
    for(int i = 0; i < dl.size(); i++){
        System.out.print(dl.get(i) + " ");
    }
    System.out.println("");

    while(!dl.isEmpty())
        System.out.println("removed: " + dl.removeRight());
    System.out.println("*************************");

    //insertRight() & removeLeft()
    dl.insertRight(10_000);
    dl.insertRight(20_000);
    dl.insertRight(30_000);
    dl.insertRight(40_000);
    dl.insertRight(50_000);

    dl.removeLeft();
    dl.removeLeft();
    dl.insertRight(60_000);
    dl.insertRight(70_000);
    System.out.println("");
    for(int i = 0; i < dl.size(); i++){
        System.out.print(dl.get(i) + " ");
    }
    System.out.println("");

    while(!dl.isEmpty())
        System.out.println("removed: " + dl.removeLeft());
    System.out.println("*************************");

    //insertRight() & removeRight()
    dl.insertRight(100_000);
    dl.insertRight(200_000);
    dl.insertRight(300_000);
    dl.insertRight(400_000);
    dl.insertRight(500_000);
    dl.removeRight();
    dl.removeRight();
    dl.insertRight(600_000);
    dl.insertRight(700_000);
    System.out.println("");
    for(int i = 0; i < dl.size(); i++){
        System.out.print(dl.get(i) + " ");
    }
    System.out.println("");

    while(!dl.isEmpty())
        System.out.println("removed: " + dl.removeRight());
    System.out.println("*************************");
}

}

问题:

1)现在我正在对同一个对象应用所有操作,我做对了吗?或者我必须创建新对象(或向现有对象添加重置方法)才能按顺序应用 insertLeft()、insertRight()、removeLeft()、removeRight() 组合?

2)如果可以按顺序使用方法,我的代码是否返回正确的结果?

4

0 回答 0