L'exemple de cet article décrit comment Java utilise une structure de liste chaînée circulaire pour résoudre le problème de Joseph. Partagez-le avec tout le monde pour votre référence. L’analyse spécifique est la suivante :
C'est la première question d'examen Java. Pour les étudiants qui n'ont jamais vu de liste chaînée, ils ne sauront pas comment le faire maintenant, ce n'est vraiment pas difficile.
Question de Joseph :
Il y a n personnes dont les numéros sont 1, 2, 3,..., n. Ces n personnes sont disposées en cercle dans l’ordre. Maintenant, étant donné s et d, commencez à compter à partir de 1 dans l'ordre à partir de la énième personne, et la personne qui compte jusqu'à d sortira de la file d'attente, puis commencerez à compter à partir de la personne suivante et commencerez à partir de 1 dans l'ordre, et la personne qui les comptes jusqu'à d sortiront à nouveau de la file d'attente. Ce cycle continue jusqu'à ce que tout le monde sorte enfin. Il est nécessaire de définir une classe de nœuds et d'utiliser une structure de liste chaînée circulaire pour résoudre le problème de Joseph.
La version Java suivante de la réponse :
Copiez le code comme suit : importez java.util.Scanner ;
public class LinkNode { //Classe de nœuds de liste chaînée unidirectionnelle
données publiques int ; //Valeur du nœud de stockage
public LinkNode next ; //Référence de stockage de la valeur du nœud
public LinkNode(int k){ //Méthode de construction, nœud de valeur k
données = k ;
suivant= nul ;
}
}
classe Josèphe{
public static void printJosephus(int n,int s,int d){
int i=1; //Créer une liste circulaire de longueur n
LinkNode q,queue ;
Tête LinkNode = nouveau LinkNode(i);
head.next = tête;
tail = head; //Le premier nœud, la queue et la tête sont ensemble
tandis que(i<n){
je++;
q = new LinkNode(i); //Ajouter un nouveau nœud
q.next = head; //La référence du nœud pointe vers la tête
tail.next = q; //La référence du dernier élément pointe vers q
tail = q; //Alors le dernier élément est q
}
int j= 0; //Commencez à compter à partir de s et affichez le numéro de la file d'attente dans l'ordre.
LinkNode p = head; //Point de départ du comptage
tandis que(j<s-1){
j++;
p = p.suivant ;
}
while(p.suivant != p){
j = 1 ;
while(j<d-1) //Point de départ du comptage
{
j++;
p = p.suivant ;
}
System.out.print(p.next.data + " "); // Afficher le numéro de nœud retiré de la file d'attente
p.suivant = p.suivant.suivant;
p = p.next; //Pointez continuellement vers le nœud suivant
}
System.out.print(p.data);
}
public static void main (String[] arguments) {
Entrée du scanner = nouveau scanner (System.in);
int n = input.nextInt();
int a = input.nextInt();
int b = input.nextInt();
Josephus.printJosephus(n, a, b);
}
}
J'espère que cet article sera utile à la programmation Java de chacun.