1. Écrivez-le devant
Les files d'attente dans la structure de données doivent être plus familières, ce qui est le premier. En raison de l'ordre, ils sont nommés comme des files d'attente. C'est comme la file d'attente. L'insertion d'un nouveau nœud à la fin de l'avant, en supprimant le nœud au cadre de la collection First.jdk fournit également une interface de file d'attente. Cette interface représente une file d'attente. Files d'attente séquentielles: ArrayBlockingQueue, LinkedBlockingQueue. (Les deux ci-dessus sont des files d'attente en couleur) et l'autre est concurrentLinkedQueue.
L'implémentation sous-jacente se compose de deux types de listes combinées. La mise en œuvre des tableaux aura des inconvénients, ce qui entraînera une fausse plénitude. Au début, lorsque la file d'attente est vide, les variables de référence de la première variable de référence à la queue sont nulles. Au fur et à mesure que les éléments de file d'attente sont supprimés, l'avant + 1 se produira et l'arrière est égal à la capacité du réseau sous-jacent. Dans la structure de stockage séquentielle, l'avant enregistre toujours l'indice des éléments qui sont sur le point d'être hors de la file d'attente dans la file d'attente, et l'arrière enregistre toujours l'indice des éléments qui sont sur le point d'être entrés dans la file d'attente. Le nombre d'éléments dans la file d'attente est à l'arrière. Dans la file d'attente séquentielle, la couche sous-jacente est un tableau, donc les éléments de données enregistrés ne changeront pas, et seules les deux variables de référence, arrière et avant, sont modifiées.
Ce qui peut être utilisé pour utiliser efficacement l'espace en utilisant le stockage de la chaîne ici, c'est que les variables de référence prennent un espace supplémentaire.
Opérations communes pour les files d'attente:
1: initialisation
2: retournez la longueur de la file d'attente
3: Ajouter des éléments
4: Supprimer les éléments
5: Accédez à l'élément d'en-tête
6: Accédez aux éléments de la queue de la file d'attente
7: Déterminez si la file d'attente est vide
8: Effacer la file d'attente
2. Implémentation personnalisée
L'affichage du code source est clair, il n'est donc pas nécessaire de l'introduire
classe publique LinkedQueue <T> {// Classes internes non statiques de file d'attente de file d'attente de chaîne personnalisées pour représenter le nœud de données du nœud de classe privée de file d'attente de chaîne {// désigne le nœud de données de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente; // Référence au nœud nœud suivant Next; @SuppressWarnings ("inutilisé") Public Node () {} Node public (T data, nœud suivant) {this.data = data; this.next = suivant; }} // Définissez la référence à la tête et à la queue du front de nœud privé de la file d'attente de chaîne; arrière du nœud privé; // Définissez la taille de la taille INT privée de la pile de chaîne; // Créer un public à colonne de chaîne à colonne LinkEdQueue () {front = null; arrière = null;} // créer une colonne de paire de chaîne avec un certain élément, et un seul nœud public lienkeueeue (t élément) {front = nouveau nœud (élément, null); // pointer vers le même élément arrière = front; taille ++;} // renvoie la taille de la file d'asimité de chaîne en intrigue publique () {Retour Size;} // Renvoie l'élément avec la tête droite dans la file d'attente de chaîne, et ne détient pas l'élément t-t-il avec l'élément avec la tête de la file d'attente, et ne fait pas de l'élément Tip elementFront () {if (! vide ()) {return front.data;} else {return null; }} // Accédez au dernier élément de la file d'attente publique t elementRear () {if (! Vide ()) {return rear.data; } else {return null; }} // Renvoie si la file d'attente de paire de chaîne actuelle est vide booléen publique vide () {return size == 0; } // effacer une file d'attente de chaîne public void clear () {front = null; arrière = null; size = 0;} // insérer un nœud dans la file d'attente de chaîne - pair public void add (t element) {// Si la colonne de paire de chaîne est vide, créez un nouveau nœud if (front == null) {rear = nouveau nœud (élément, null); avant = arrière; } else {// Créez dynamiquement un nouveau nœud nœud newrear = new nœud (élément, null); arrière.Next = newrear; arrière = newrear; } size ++;} // supprimer un nœud dans la file d'attente de chaîne et renvoyer le nœud supprimé public t dis do dans () {nœud oldfront = front; front = front.next; oldfront.next = null; taille--; return oldfront.data;} // renvoie la file d'attente publique toString () {// si la file d'attente de chaîne est la file d'attente de chaîne vide est if (vide ()) {return "[]"; } else {StringBuilder sbuilder = new StringBuilder ("["); pour (nœud current = front; current! = null; current = current.next) {sbuilder.append (current.data.toString () + ",");} int len = sbuilder.length (); return sbuilder.delete (Len-1, len) .Apnd ("]"). toString ();}} public static void main (string [] args) {linkedQueue <string> lQueue = new LinkedQueue <string> (); lQueue.add ("aaa"); lQueue.add ("bbb"); lQueue.add ("CCC"); lQueue.add ("ddd"); System.out.println ("Renvoie la valeur du nœud de tête de la file d'attente:" + lQueue.ElementFront ()); System.out.println ("Renvoie la valeur du nœud de queue du nœud de la queue du nœud de la queue du nœud de la queue du nœud de la queue file d'attente: "+ lQueue.ElementRear ()); System.out.println (lQueue.length ()); System.out.println (lQueue);}}Résultats en cours:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.