Das Beispiel in diesem Artikel beschreibt, wie Java eine kreisförmige verknüpfte Listenstruktur verwendet, um Josephs Problem zu lösen. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Dies ist die erste Java-Prüfungsfrage. Für Studenten, die noch nie eine verknüpfte Liste gesehen haben, ist es im Nachhinein wirklich nicht schwierig.
Joseph-Frage:
Es gibt n Menschen, deren Zahlen 1, 2, 3, ..., n sind. Diese n Personen sind der Reihe nach im Kreis angeordnet. Wenn nun s und d gegeben sind, beginnen Sie mit dem Zählen bei 1 in der Reihenfolge von der etw. Person, und die Person, die bis d zählt, kommt aus der Warteschlange, und dann beginnen Sie mit dem Zählen bei der nächsten Person und beginnen bei 1 in der Reihenfolge und der Person, die zählt bis d wieder aus der Warteschlange herauskommt. Dieser Zyklus wird fortgesetzt, bis schließlich alle herauskommen. Um Josephs Problem zu lösen, ist es erforderlich, eine Knotenklasse zu definieren und eine zirkuläre verknüpfte Listenstruktur zu verwenden.
Die folgende Java-Version der Antwort:
Kopieren Sie den Code wie folgt: import java.util.Scanner;
öffentliche Klasse LinkNode { //Knotenklasse der einseitig verknüpften Liste
public int data; //Speicherknotenwert
public LinkNode next; //Speicherreferenz des Knotenwerts
public LinkNode(int k){ //Konstruktionsmethode, Knoten mit Wert k
Daten = k;
next= null;
}
}
Klasse Josephus{
public static void printJosephus(int n,int s,int d){
int i=1; //Eine kreisförmige Liste der Länge n erstellen
LinkNode q,tail;
LinkNode head = new LinkNode(i);
head.next = head;
tail = head; // Der erste Knoten, der Schwanz und der Kopf sind zusammen
while(i<n){
i++;
q = new LinkNode(i); //Neuen Knoten hinzufügen
q.next = head; //Die Referenz des Knotens zeigt auf den Kopf
tail.next = q; //Die Referenz des letzten Elements zeigt auf q
tail = q; //Dann ist das letzte Element q
}
int j= 0; // Beginnen Sie mit dem Zählen ab s und geben Sie die Nummer des Warteschlangens nacheinander aus.
LinkNode p = head; //Zählstartpunkt
while(j<s-1){
j++;
p = p.next;
}
while(p.next != p){
j = 1;
while(j<d-1) //Startpunkt der Zählung
{
j++;
p = p.next;
}
System.out.print(p.next.data + " "); // Ausgabe der aus der Warteschlange entfernten Knotennummer
p.next = p.next.next;
p = p.next; // Kontinuierlich auf den nächsten Knoten zeigen
}
System.out.print(p.data);
}
public static void main(String[] args) {
Scanner-Eingabe = neuer Scanner(System.in);
int n = input.nextInt();
int a = input.nextInt();
int b = input.nextInt();
Josephus.printJosephus(n, a, b);
}
}
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.