Реализация очереди JAVA с использованием массивов - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь реализовать очереди в JAVA.Я новичокЯ не понимаю, почему это не работает.Push () работает нормально, но pop () не работает.Может кто-нибудь указать, где я не так?

pop ():

 public void pop()
    {
    for(int i=0;i<length;i++)
    {
         while(i<(length-1))
         {
        arr[i]=arr[i+1];

        }

    }

    }

push ():

public void push(int x)
    {
    push:for(int i=0;i<length;i++)
    {
        if(arr[i]==null) 
        {
        arr[i]=x;
        break push;
        }
    }
    }

show ():

public void show()
    {
    int c=0;
    for(int i=0;i<length;i++)
        //if(arr[i]!=null) 
        {
            System.out.println(arr[i]);
            c++;

        }
    System.out.println("Current Capacity "+c+"/"+length);       
    }

main ()

public static void main(String...i)
    {
        System.out.println("Stack Implementation");
        Queue stack = new Queue();
        System.out.println("Push");
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        stack.show();
        System.out.println("Pop");
        stack.pop();
        stack.show();
    }

В выводе не отображаются данные после запуска pop ().

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Когда вы нажимаете на элемент, вам нужно вернуться из метода:

 public void push(int x) {
   for (int i = 0; i < length; i++) {
     if (arr[i] == null) {
       arr[i] = x;
       return;  // Exit from push when you added the element in the right position
     }
   }
 }

Обратите внимание, что этот код не оптимизирован.Push-элемент требует O (n), поэтому может тратить много времени на большие очереди, но это самое близкое решение для вашего кода.В любом случае можно выполнить простую оптимизацию, введя переменную, содержащую последний использованный индекс.Таким образом, вы можете использовать эту переменную, чтобы вставить и вставить элемент в O (1).

0 голосов
/ 18 декабря 2018

Вы не увеличиваете i в pop(), поэтому цикл while будет работать бесконечно.

В режиме push вы используете цикл for, который увеличивает i: :for(int i=0;i<length;i++ /*here*/)

Вы также не инициализируете i в pop(), поэтому оно, вероятно, будет иметь значение последнего приращения в push().Это значение будет индексом следующего пустого элемента (если он остался один), и это в любом случае неверно.Однако вы хотите получить всплывающее окно, поэтому вам нужно начинать с i = 0 - в этом случае также будет работать другой цикл for, т.е. вы просто копируете значение элемента с i+1 в индекс i и установите для последнего элемента значение null (для большей эффективности вы можете остановиться, если i+1 имеет элемент null).

Редактировать: теперь, когда вы опубликовали большекод для pop() ситуация немного другая.Вы уже используете цикл for в pop(), но внутри него еще один цикл.Я предполагаю, что вы хотите сделать if(i<(length-1)) вместо while(i<(length-1)) - но в этом случае вам все равно придется обрабатывать последний элемент, т. Е. После заполнения очереди вам нужно будет установить последний элемент на null, когдавы выдвигаете один, а остальные перемещаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...