Сложность с ручным созданием стека с использованием цикла For - PullRequest
0 голосов
/ 09 декабря 2018

Псевдокод, предоставленный нашим профессором, выглядит следующим образом:

Node Head; 
int N; //(# of nodes in the stack)
if (N > 0) { 
  Head = CurrentNode //She never creates a current node? 
  for (int x = 0; x < (n-1); x++) { //I don't understand the n-1.

       CurrentNode.setLink(Head); 
       Head = CurrentNode; 

  } else { 

     System.out.println("No Stack Possible"); 

   } if (N == 0) { 
     Head = Null; 
   }
} 

Когда профессор написал этот псевдокод (как набросок), она либо плохо объяснила, либо я просто не смогпонять это (это все, что она дала нам для стеков).По этой причине у меня возникают проблемы при повторном создании кода.Я могу создать структуру данных стека, используя метод push, благодаря поиску его в Интернете, но в итоге я заполняю пробел, поэтому я хотел бы убедиться, что я понимаю, как это сделать по-своему.Вот моя попытка:

import java.util.Scanner; 
import java.util.Random; 
public class Stack
{
public static void main(String[] args) { 
    Node head= null;
    head = generateStack(); 
    Print(head); 

} 
public static Node generateStack() { 

    Random randomGenerator = new Random();
    Node head = new Node (randomGenerator.nextInt(100),null);
    Node currentNode = head; 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter the amount of Nodes you would 
    like to enter."); 
    int N = input.nextInt(); 
    Node newNode = null; 
    if (N > 0) { 

        for (int i = 0; i < (N-1); i++) { 

            newNode = new Node (randomGenerator.nextInt(100),null)
            currentNode.setLink(newNode); //push
            head = currentNode; 

        } 

    } else {  

        System.out.println("No Stack Possible!"); 

    }
    if (N==0) { 

        head = null; 

    } return head; 

}
 public static void Print(Node entry)
{   
    Node Current = entry; 
    while (Current != null){ 
        System.out.print(Current.getData() + " -> ");
        Current = Current.getLink(); 
    }
}
}

Класс узлов:

public class Node
{
private int data;
private Node link

public Node(int ndata, Node nlink)
{
    data = ndata; 
    link = nlink; 

}

public int getData(){
    return data; 
}

public Node getLink(){
    return link;
}

public void setData(int mydata){
    data = mydata; 
}

public void setLink(Node mylink){
    link = mylink; 
}
} 

К сожалению, код создает только 2 узла, когда я ставлю 3 в качестве ввода пользователя.Я попробовал это сделать цикл for просто перейти к N, однако, это не имело значения.в чем именно проблема?:

1 Ответ

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

Мне кажется, я понимаю, чего хочет ваш профессор.Ваш код почти правильный.Единственное, что вы сделали неправильно - это содержимое цикла for.По словам вашего профессора, это должно быть:

CurrentNode.setLink(Head); 
Head = CurrentNode;

Единственное, чего не сделал ваш профессор, - это создать новый CurrentNode.Таким образом, этот код будет выглядеть примерно так, используя то, что вы уже сделали:

currentNode = new Node (randomGenerator.nextInt(100),null);
currentNode.setLink(head); //push
head = currentNode;

Кроме того, ваш код выглядит хорошо.

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