La file d'attente séquentielle bidirectionnelle ArrayDeque et la file d'attente de chaîne bidirectionnelle, JDK a été incluse, omise ici. ArrayDeque inclut une pile séquentielle et une file d'attente séquentielle, tandis que Linkedlist contient la pile de chaîne et la file d'attente de chaîne. ArrayDeque et LinkedList sont tous deux insérectrices. PriorityQueue La file d'attente de priorité est également dans le JDK.
1. Implémentation de files d'attente séquentielles
Package Lang; Importer Java.io.Serializable; Importer Java.util.array Final long SerialVersionUID = 7333344126529379197L; private int default_size = 10; Private int Capacité; // Enregistrer la longueur du tableau d'objet privé [] elementData; // définir un tableau pour enregistrer des éléments de la file d'attente séquentielle int private front = 0; // Fleet Head private int arrière = 0; // Terminal Team // Créer une file d'attente séquentielle vide ArrayQueue () {capacile = default_size; elementData = nouvel objet [capacité]; } // Créer une file d'attente séquentielle ArrayQueue (t élément) {this (); elementData [0] = élément; arrière ++; } public arrayqueue (int inItsize) {elementData = nouvel objet [iniTSize]; } / ** * Créer une file d'attente d'ordre avec un tableau d'élément de longueur spécifiée * @param Spécifiez le premier élément de la file d'attente d'ordre * @param initSize Spécifiez la longueur du tableau sous-jacent de la file d'attente d'ordre * / ArrayQueue publique (élément t, int inItSize) {this.capacity = iniTSize; elementData = nouvel objet [capacité]; elementData [0] = élément; arrière ++; } / ** * @Title: Size * @Description: Obtenez la taille de la file d'attente séquentielle * @return * / public int size () {return arrière - avant; } / ** * @Title: Offre * @Description: ENQUEUe * @param élément * / public void offre (élément t) {Ensurecapacité (arrière + 1); elementData [arrière ++] = élément; } private void Assurecapacity (int mincapacity) {// Si la longueur d'origine du tableau est inférieure à la longueur requise actuelle int oldcapacity = elementData.length; if (mincapacity> oldcapacity) {int newcapacity = (oldcapacity * 3) / 2 + 1; if (newcapacity <mincapacity) newCapacity = mincapacity; // La mincapacité est généralement proche de la taille, il s'agit donc d'une victoire: elementData = arrays.copyof (elementData, newcapacity); }} / ** * @Title: Poll * @Description: Dequeue * @return * / public t Poll () {if (isEmpty ()) {throw new IndexOutOfBoundSexception ("Exception de file d'attente vide"); } // conserve la valeur de l'élément à l'extrémité avant de la file d'attente t oldvalue = (t) elementData [front]; // Libérez l'élément à l'extrémité avant de la file d'attente ElementData [Front ++] = NULL; Retour OldValue; } / ** * @Title: Peek * @Description: renvoie l'élément supérieur de la file d'attente, mais ne supprime pas l'élément supérieur de la file d'attente * @return * / public t Powek () {if (isEmpty ()) {Throw New IndexOutofBoundSexception ("Exception de file d'attente vide"); } return (t) elementData [front]; } / ** * @title: iSempty * @Description: Déterminez si la file d'attente de commande est une file d'attente vide * @return * / public boolean isEmpty () {return arrière == avant; } / ** * @Title: Clear * @Description: Effacez la file d'attente d'ordre * / public void clear () {// Attribuez tous les éléments du tableau sous-jacent à Null Arrays.fill (elementData, null); front = 0; arrière = 0; } public String toString () {if (isEmpty ()) {return "[]"; } else {StringBuilder sb = new StringBuilder ("["); for (int i = front; i <arrière; i ++) {sb.append (elementData [i] .toString () + ","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); }}}2. Mise en œuvre des files d'attente de chaîne
Package Lang; Importer Java.io.Serializable; / ** * @className: LinkQueue * @Description: Chain Queue * @Date 21 janvier 2014 à 3:24:38 PM * @param <T> * / public class LinkQueue <T> implémente Serializable {/ ** * @fields serialversionuid: tood * / private stic -6726728595616312615L; // Définissez un nœud de classe interne et l'instance de nœud représente le nœud de la file d'attente de chaîne. Node de classe privée {données privées T; // Enregistrer les données du nœud nœud privé Suivant; // référence au nœud suivant // Constructeur sans paramètres Node public () {} // Constructeur pour initialiser tous les attributs Node public Node (T data, nœul suivant) {this.data = data; this.next = suivant; }} Nœud privé Front; // Enregistrer le nœud de tête de la file d'attente de chaîne Private Node arrière; // Enregistrer le nœud de queue de la file d'attente de chaîne INT Private Int SIZE; // Enregistrer le nombre de nœuds déjà inclus dans la file d'attente de chaîne / ** * <p> Title: LinkQueue </p> * <p> Description: Créer une file d'attente de chaîne vide </p> * / Public LinkQueue () {// TIDE TILL, Front et récent Are Front = Null = Null; arrière = null; } / ** * <p> Titre: linkqueue </p> * <p> Description: Créez une file d'attente de chaîne en spécifiant les éléments de données, qui n'a qu'un seul élément dans la file d'attente de chaîne </p> * / public linkQueue (t element) {front = new nœud (élément, null); // Un seul nœud, point avant et arrière vers l'arrière du nœud = avant; taille ++; } / ** * @Title: Size * @Description: Obtenez la taille de la file d'attente séquentielle * @return * / public int size () {return size; } / ** * @Title: Offre * @Description: ENQUEUe * @Param Element * / public void offre (élément t) {// Si la file d'attente de chaîne est toujours une file d'attente de chaîne vide if (front == null) {front = nouveau nœud (élément, null); arrière = avant; // il n'y a qu'un seul nœud, le point avant et l'arrière du nœud} else {nœud newnode = nouveau nœud (élément, null); // créer un nouveau node.next = newNode; // laissez le prochain point de nœud de queue au nouveau nœud de nœud arrière = newnode; // prendre un nouveau nœud de queue} taille ++; } / ** * @Title: Poll * @Description: Dequeue * @return * / public t Poll () {Node oldFront = Front; front = front.next; oldfront.next = null; taille--; retourner oldfront.data; } / ** * @Title: Peek * @Description: Renvoyez l'élément supérieur de la file d'attente, mais ne supprimez pas l'élément supérieur de la file d'attente * @return * / public t peek () {return rear.data; } / ** * @title: iSempty * @Description: Déterminez si la file d'attente de commande est une file d'attente vide * @return * / public boolean isEmpty () {return size == 0; } / ** * @Title: Clear * @Description: Effacer la file d'attente de commande * / public void clear () {// attribuez les nœuds avant et arrière comme null front = null; arrière = null; taille = 0; } public String toString () {// Lorsque la file d'attente de chaîne est une file d'attente de chaîne vide if (isEmpty ()) {return "[]"; } else {StringBuilder sb = new StringBuilder ("["); pour (nœud current = front; current! = null; current = current.next) {sb.append (current.data.toString () + ","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); }} public static void main (string [] args) {linkqueue <string> queue = new linkqueue <string> ("aaaa"); // ajouter deux éléments queue.offer ("bbbb"); queue.offer ("CCCC"); System.out.println (file d'attente); // CROUTE Queue.poll () après la suppression d'un élément; System.out.println ("Supprimer la file d'attente après un élément:" + file d'attente); // Ajouter un élément à nouveau queue.offer ("dddd"); System.out.println ("Ajoutez à nouveau la file d'attente après un élément:" + file d'attente); // Ajouter un élément à nouveau queue.poll (); // Ajouter un élément à nouveau que la file d'attente.offer ("eeee"); System.out.println (file d'attente); }}3. Implémentation de files d'attente circulaires
Package Lang; Importer Java.io.Serializable; Importer Java.util.array SerialVersionUID = -3670496550272478781L; private int default_size = 10; Private int Capacité; // Enregistrer la longueur de l'objet privé de tableau [] elementData; // définir un tableau pour enregistrer les éléments de la file d'attente de boucle private int front = 0; // Fleet Head private int arrière = 0; // Terminal Team // Créer la file d'attente de boucle vide avec la longueur par défaut de la longueur du tableau Loopqueue publique () {capacile = default_size; elementData = nouvel objet [capacité]; } // Créer une file d'attente de boucle avec un élément d'initialisation Loopqueue (élément t) {this (); elementData [0] = élément; arrière ++; } / ** * Créer une file d'attente de boucle avec un tableau de longueur spécifiée * @param élément Spécifiez le premier élément de la file d'attente de boucle * @param initSize Spécifiez la longueur du tableau sous-jacent de la file d'attente de boucle * / Loopqueue publique (élément t, INT INITSIZE) {this.capacity = initsize; elementData = nouvel objet [capacité]; elementData [0] = élément; arrière ++; } // Obtenez la taille de la file d'attente de boucle publique int size () {if (isempty ()) {return 0; } Retour arrière> Front? Arrière - Avant: Capacité - (avant - arrière); } // Insérez la file d'attente publique void add (t element) {if (arrière == front && elementData [front]! = Null) {lancez new indexoutofboundSexception ("exception dont la file d'attente est complète"); } elementData [arrière ++] = élément; // Si l'arrière a atteint l'extrémité, retournez la tête = arrière == Capacité? 0: arrière; } // Supprime la file d'attente publique T dislète () {if (isEmpty ()) {throw new IndexOutofBoundSexception ("Exception de file d'attente vide"); } // conserve la valeur de l'élément à l'arrière de la file d'attente t oldvalue = (t) elementData [front]; // Libérez l'élément à l'arrière de la file d'attente ElementData [Front ++] = NULL; // Si l'avant a atteint la fin, alors tournez avant = avant == Capacité? 0: Front; Retour OldValue; } // Renvoie l'élément supérieur de la file d'attente, mais ne supprimez pas l'élément supérieur de l'élément public t que la file d'attente () {if (isEmpty ()) {throw new IndexOutofBoundSexception ("Exception de file d'attente vide"); } return (t) elementData [front]; } // Déterminez si la file d'attente de boucle est une file d'attente vide booléenne publique iSempty () {// arrière == avant et l'élément à l'arrière est Null Return arrière == Front && elementData [arrière] == null; } // effacer la file d'attente de boucle publique void clear () {// attribue tous les éléments du tableau sous-jacent à Null Arrays.fill (elementData, null); front = 0; arrière = 0; } public String toString () {if (isEmpty ()) {return "[]"; } else {// Si avant <arrière, l'élément valide est l'élément entre l'avant et l'arrière if (avant <arrière) {StringBuilder sb = new StringBuilder ("["); for (int i = front; i <arrière; i ++) {sb.append (elementData [i] .toString () + ","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); } // Si avant> = arrière, l'élément valide est ailleurs entre la capacité frontale> et 0-> Front {StringBuilder sb = new StringBuilder ("["); for (int i = front; i <capacity; i ++) {sb.append (elementData [i] .toString () + ","); } pour (int i = 0; i <arrière; i ++) {sb.append (elementData [i] .toString () + ","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); }}} public static void main (string [] args) {loopqueue <string> queue = new loopqueue <string> ("aaaa", 3); // ajouter deux éléments queue.add ("bbbb"); queue.add ("CCCC"); // Pour le moment, la file d'attente est complète System.out.println (file d'attente); // Après avoir supprimé un élément, la file d'attente peut ajouter une autre file d'attente d'élément.Remove (); System.out.println ("La file d'attente après la suppression d'un élément:" + file d'attente); // Ajouter à nouveau un élément, et la file d'attente est à nouveau complète queue.add ("dddd"); System.out.println (file d'attente); System.out.println (file d'attente); System.out.println (file d'attente); // Après avoir supprimé un élément, la file d'attente peut ajouter une autre file d'attente d'élément.Remove (); // Ajouter à nouveau un élément, et la file d'attente est à nouveau complète queue.add ("eeee"); System.out.println (file d'attente); }}La méthode d'implémentation de file d'attente Java ci-dessus (file d'attente séquentielle, file d'attente de chaîne, file d'attente en boucle) est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.