Печать стопки с помощью цикла «for» - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь напечатать элементы стека S в обратном порядке (используя цикл "for") , но пока я не добился успеха.

Мне удалосьсделать это с "поп" довольно легко, но второй способ уклоняется от меня.Мое решение для «pop» закомментировано в конце кода.

Любая помощь будет оценена.

PS.Большая часть этого кода не имеет отношения к вопросу, но если бы я знал, что и где я могу вырезать, мне, вероятно, вообще не понадобилась бы помощь.Извините.

package simplearraystackofchars;

public class SimpleArrayStackofchars implements Stack {

protected int capacity;     // The actual capacity of the stack array
public static final int CAPACITY = 2;   // default array capacity
protected Object S[], K[];      // Generic array used to implement the stack 
protected int top = -1; // index for the top of the stack (-1 = empty stack)

public SimpleArrayStackofchars() {
    this(CAPACITY); // default capacity 
}

public SimpleArrayStackofchars(int cap) {
    capacity = cap;
    S = new Object[capacity];
}

public int size() {
    return (top + 1);
}

public boolean isEmpty() {
    return (top == -1);
}

public void push(Object element) throws FullStackException {
    if (size() == capacity) {
        //throw new FullStackException("Stack is full. Stack size max is "+ capacity);
        // can replace previous line with code to double stack size
        doubleArray();
    }
    S[++top] = element;
}

public Object top() throws EmptyStackException {
    if (isEmpty()) {
        throw new EmptyStackException("Stack is empty.");
    }
    return S[top];
}

public Object pop() throws EmptyStackException {
    Object element;
    if (isEmpty()) {
        throw new EmptyStackException("Stack is empty.");
    }
    element = S[top];
    S[top--] = null; // dereference S[top] for garbage collection.
    return element;
}

private void doubleArray() {
    Object[] newArray;

    System.out.println("Stack is full (max size was " + capacity + "). Increasing to " + (2 * capacity));
    //double variable capacity
    capacity = 2 * capacity;
    newArray = new Object[capacity];
    for (int i = 0; i < S.length; i++) {
        newArray[i] = S[i];
    }
    S = newArray;
}

public static void main(String[] args) {
    Stack S = new SimpleArrayStackofchars();

    S.push("1");
    S.push("2");
    S.push("3");
    S.push("4");
    S.push("5");
    S.push("6");

//      Stack K is created by popping elements of Stack S from the top.
//      This reverses the order.
//
//      Stack K = new SimpleArrayStackofchars();
//      while (!S.isEmpty()) {
//          K.push(S.pop());
//        }
//      while (!K.isEmpty()) {
//            System.out.println(K.pop());
//        }

    while (!S.isEmpty()) {
        System.out.println(S.pop());
    }
}

}

1 Ответ

0 голосов
/ 22 октября 2018
Not really sure about what you need that for loop for, but this should produce the same result:
 Stack K = new SimpleArrayStackofchars();
 for (int i = 0, i < S.size(); i++) {
     K.push(S.pop());
 }
 for (int i = 0, i < K.size(); i++) {
     System.out.println(K.pop());
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...