Front je ďalší druh lineárnej dátovej štruktúry, ktorá sa používa na ukladanie prvkov rovnako ako akákoľvek iná dátová štruktúra, ale určitým spôsobom. Jednoducho povedané, môžeme povedať, že front je typ dátovej štruktúry v programovacom jazyku Java, ktorý ukladá prvky rovnakého druhu. Komponenty vo fronte sú uložené v správaní FIFO (First In, First Out). V kolekcii fronty sú dva konce, t. j. predný a zadný. Fronta má dva konce, predný a zadný.
Nasledujúci obrázok dokonale popisuje vlastnosť FIFO (First In, First Out) frontu Java.
Ako je vysvetlené na predchádzajúcom obrázku, môžeme vidieť, že front je lineárna dátová štruktúra s dvoma terminálmi, t. j. štart (predný) a koniec (zadný). Komponenty sa pridávajú do frontu zo zadného konca frontu a komponenty sa extrahujú z predného konca frontu.
Queue je rozhranie v Java ktorý patrí do balíka Java.util . Rozširuje tiež rozhranie kolekcie .
Všeobecná reprezentácia rozhrania Java Queue je uvedená nižšie:
java nahradiť všetok reťazec
public interface Queue extends Collection
Ako sme už diskutovali vyššie, že front je rozhranie, preto môžeme tiež povedať, že frontu nemožno vytvoriť inštanciu, pretože rozhrania nemožno vytvoriť. Ak chce používateľ implementovať funkčnosť rozhrania Queue v Jave, potom je povinné mať nejaké pevné triedy, ktoré implementujú rozhranie Queue.
V programovacom jazyku Java existujú dve rôzne triedy, ktoré sa používajú na implementáciu rozhrania Queue. Tieto triedy sú:
kandidátsky kľúč
Charakteristika Java Queue
Java Queue možno považovať za jednu z najdôležitejších dátových štruktúr vo svete programovania. Java Queue je atraktívny svojimi vlastnosťami. Významné vlastnosti dátovej štruktúry Java Queue sú uvedené takto:
- Java Queue sa riadi spôsobom FIFO (First In, First Out). Označuje, že prvky sú zaradené do frontu na konci a eliminované spredu.
- Rozhranie Java Queue poskytuje všetky pravidlá a procesy rozhrania kolekcie, ako je zahrnutie, vymazanie atď.
- Existujú dve rôzne triedy, ktoré sa používajú na implementáciu rozhrania Queue. Tieto triedy sú LinkedList a PriorityQueue.
- Okrem týchto dvoch existuje trieda, ktorá je, Array Blocking Queue, ktorá sa používa na implementáciu rozhrania Queue.
- Existujú dva typy frontov, neobmedzené fronty a ohraničené fronty. Fronty, ktoré sú súčasťou balíka java.util, sú známe ako neobmedzené fronty a ohraničené fronty sú fronty, ktoré sú prítomné v balíku java.util.concurrent.
- Deque alebo (dvojitý front) je tiež typom frontu, ktorý nesie zahrnutie a vymazanie prvkov z oboch koncov.
- Deque sa tiež považuje za bezpečné pre vlákna.
- Blokovacie fronty sú tiež jedným z typov frontov, ktoré sú tiež bezpečné pre vlákna. Blokovacie fronty sa používajú na implementáciu dopytov medzi výrobcami a spotrebiteľmi.
- Blokovacie fronty nepodporujú prvky null. Ak v blokovacích frontoch vyskúšate akúkoľvek prácu podobnú hodnotám null, vyvolá sa aj výnimka NullPointerException.
Implementácia frontu
Triedy používané pri implementácii Queue
Triedy, ktoré sa používajú na implementáciu funkcií frontu, sú uvedené takto:
Rozhrania používané pri implementácii Queue
Rozhrania Java sa používajú aj pri implementácii frontu Java. Rozhrania, ktoré sa používajú na implementáciu funkcií frontu, sú uvedené takto:
- O čom
- Blokovanie frontu
- Blokovanie Deque
Java Queue Class Methods
Vo fronte Java existuje veľa metód, ktoré sa používajú veľmi bežne. Rozhranie Queue podporuje rôzne metódy, ako je vkladanie, mazanie, nahliadnutie atď. Niektoré operácie frontu Java vyvolávajú výnimku, zatiaľ čo niektoré z týchto operácií vracajú konkrétnu hodnotu, keď je program dokončený.
Poznámka - V Java SE 8 nie sú vykonané žiadne zmeny v kolekcii frontov Java. Tieto metódy, ktoré sú definované nižšie, sú ďalej pripravované v nasledujúcich verziách programovacieho jazyka Java. Napríklad Java SE 9.
Rôzne metódy Java Queue sú definované nižšie:
Metóda | Prototyp metódy | Popis |
---|---|---|
pridať | boolovské sčítanie (E e) | Pridá prvok e do frontu na koniec (koniec) frontu bez porušenia obmedzení kapacity. V prípade úspechu vráti hodnotu true alebo v prípade vyčerpania kapacity vráti IllegalStateException. |
nahliadnuť | E nahliadnuť () | Vráti hlavu (prednú časť) frontu bez jej odstránenia. |
element | E prvok() | Vykoná rovnakú operáciu ako metóda peek (). Vyhodí výnimku NoSuchElementException, keď je front prázdny. |
odstrániť | E odstrániť() | Odstráni hlavu frontu a vráti ju späť. Ak je front prázdny, vyvolá výnimku NoSuchElementException. |
anketa | E anketa() | Odstráni hlavu frontu a vráti ju späť. Ak je front prázdny, vráti hodnotu null. |
Ponuka | booleovská ponuka (E e) | Vložte nový prvok e do frontu bez porušenia kapacitných obmedzení. |
veľkosť | int size() | Vráti veľkosť alebo počet prvkov vo fronte. |
Implementácia Java Queue Array
Implementácia frontu nie je taká jednoduchá ako implementácia zásobníka.
Aby sme implementovali front pomocou polí, najprv deklarujeme pole, ktoré obsahuje n počet prvkov.
hiba bukhari
Potom definujeme nasledujúce operácie, ktoré sa majú vykonať v tomto fronte.
1) Zaradiť do poradia: Operácia na vloženie prvku do frontu je Enqueue (funkcia Queue Enqueue v programe). Pre vloženie prvku na zadný koniec musíme najprv skontrolovať, či je front plný. Ak je plný, prvok nemôžeme vložiť. Ak zadný 2) Chvost: Operácia na odstránenie prvku z frontu je Dequeue (funkcia fronta Dequeue v programe). Najprv skontrolujeme, či je front prázdny. Aby operácia vyradenia z frontu fungovala, musí byť vo fronte aspoň jeden prvok. 3) Predná strana: Táto metóda vráti začiatok frontu. 4) Displej: Táto metóda prechádza frontom a zobrazuje prvky frontu. Nasledujúci program Java demonštruje implementáciu Queue. QueueArrayImplementation.java Keďže sme implementovali dátovú štruktúru Queue pomocou Arrays vo vyššie uvedenom programe, môžeme tiež implementovať Queue pomocou Linked List. V tomto programe implementujeme rovnaké metódy enqueue, dequeue, front a display. Rozdiel je v tom, že namiesto Array budeme používať dátovú štruktúru Linked List. Nižšie uvedený program demonštruje implementáciu Linked List pre Queue v Jave. QueueLLImplementation.java Výkon: Program Java Queue
c boolovská hodnota
class Queue { private static int front, rear, capacity; private static int queue[]; Queue(int size) { front = rear = 0; capacity = size; queue = new int[capacity]; } // insert an element into the queue static void queueEnqueue(int item) { // check if the queue is full if (capacity == rear) { System.out.printf('
Queue is full
'); return; } // insert element at the rear else { queue[rear] = item; rear++; } return; } //remove an element from the queue static void queueDequeue() { // check if queue is empty if (front == rear) { System.out.printf('
Queue is empty
'); return; } // shift elements to the right by one place uptil rear else { for (int i = 0; i <rear 0 4 - 1; i++) { queue[i]="queue[i" + 1]; } set queue[rear] to if (rear < capacity) decrement rear rear--; return; print queue elements static void queuedisplay() int i; (front="=" rear) system.out.printf('queue is empty
'); traverse front and for (i="front;" i rear; system.out.printf(' %d , ', queue[i]); of queuefront() system.out.printf('
front element the queue: %d', queue[front]); public class queuearrayimplementation main(string[] args) create a capacity q="new" queue(4); system.out.println('initial queue:'); q.queuedisplay(); inserting in q.queueenqueue(10); q.queueenqueue(30); q.queueenqueue(50); q.queueenqueue(70); system.out.println('queue after enqueue operation:'); q.queuefront(); insert q.queueenqueue(90); q.queuedequeue(); system.out.printf('
queue two dequeue operations:'); pre> <p> <strong>Output:</strong> </p> <pre> Initial Queue: Queue is Empty Queue after Enqueue Operation: 10 , 30 , 50 , 70 , Front Element of the queue: 10 Queue is full 10 , 30 , 50 , 70 , Queue after two dequeue operations: 50 , 70 , Front Element of the queue: 50 </pre> <h2>Java Queue Linked List Implementation</h2> <p>As we have implemented the Queue data structure using Arrays in the above program, we can also implement the Queue using Linked List.</p> <p>We will implement the same methods enqueue, dequeue, front, and display in this program. The difference is that we will be using the Linked List data structure instead of Array.</p> <p>The below program demonstrates the Linked List implementation of Queue in Java.</p> <p> <strong>QueueLLImplementation.java</strong> </p> <pre> class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front & rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println('Element ' + data+ ' removed from the queue'); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println('Element ' + data+ ' added to the queue'); } //print front and rear of the queue public void print_frontRear() { System.out.println('Front of the queue:' + front.data + ' Rear of the queue:' + rear.data); } } class QueueLLImplementation{ public static void main(String a[]){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } } </pre> <p> <strong>Output:</strong> </p> <pre> Element 6 added to the queue Element 3 added to the queue Front of the queue:6 Rear of the queue:3 Element 12 added to the queue Element 24 added to the queue Element 6 removed from the queue Element 3 removed from the queue Element 9 added to the queue Front of the queue:12 Rear of the queue:9 </pre> <hr></rear>
Implementácia prepojeného zoznamu Java Queue
inak java
class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front & rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println('Element ' + data+ ' removed from the queue'); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println('Element ' + data+ ' added to the queue'); } //print front and rear of the queue public void print_frontRear() { System.out.println('Front of the queue:' + front.data + ' Rear of the queue:' + rear.data); } } class QueueLLImplementation{ public static void main(String a[]){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } }
Element 6 added to the queue Element 3 added to the queue Front of the queue:6 Rear of the queue:3 Element 12 added to the queue Element 24 added to the queue Element 6 removed from the queue Element 3 removed from the queue Element 9 added to the queue Front of the queue:12 Rear of the queue:9