Как удалить (поп) элемент из реализации стека? - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я работаю над своим домашним заданием, кодом симуляции для создания стека с поддержкой массива Dynami c. Метод pop() не работает, это функция, я написал часть кода, но мне нужно доработать. Мой стек должен быть похож на это: вы вставляете числа для вызова top, а затем удаляете это число (top).

import java.util.NoSuchElementException;

public class MyStack implements IntStack {

    int[] heltal;

    public MyStack() {
        heltal = new int[0];
    }

    public void push(int tal) {

        int[] temp = new int[heltal.length + 1];

        for (int x = 0; x < heltal.length; x++) {
            temp[x] = heltal[x] + tal;

        }
        heltal = temp;

        for (int i = 0; i < heltal.length; i++) {
            heltal[i] = tal;
        }

    }

    @Override
    public int pop() {
        if (Isempty()) {
            throw new NoSuchElementException("The stack is empty, there is nothing to pop");

        } else {

            int[] temp = new int[heltal.length - 1];

            for (int x = 0; x < heltal.length - 1; x++) {
                temp[x] = heltal[x];

            }

            int etttal = heltal[0];


            heltal = temp;
            return etttal;
        }
    }

    @Override
    public int peek() {
        if (Isempty()) {
            throw new NoSuchElementException("The stack is empty");
        } else {
            return heltal[0];
        }

    }

    public boolean Isempty() {
        return heltal.length == 0;

    }
}

1 Ответ

1 голос
/ 17 марта 2020

Вы, кажется, делаете это более трудным, чем требуется. Для реализации стека push, pop, peek и другие являются не более чем манипуляторами индекса, которые возвращают или сохраняют значение. Стек может быть поддержан массивом или списком. И pushing и др. Являются абстрактными терминами. Поэтому, когда вы получаете sh значение, вам не нужно копировать все на единицу. Просто добавьте его в конец вашей структуры данных.

  • pop - проверьте индекс и, если он действительный, верните элемент с текущим индексом, обновите индекс.
  • pu sh - сохранить значение в следующем месте. Вероятно, индекс + 1, но это зависит от того, как вы это реализуете.
  • peek - вернуть верхнее значение (по индексу), но не обновлять индекс.

Если вы используете массив, вам нужно добавить метод (ы) в увеличить его емкость.

Для получения дополнительной информации, посмотрите Stack

Вот простой метод pu sh, подкрепленный array, называемым stack и index поле. Предполагается, что используется ints.

public void push(int v) {
    if (index == stack.length-1) {
    // no more room, increase array size
    // while retaining current values.
    }
    stack[++index] = v;
}
...