इस लेख में, हम समझेंगे कि क्यू डेटा स्ट्रक्चर कैसे लागू करें। एक क्यू एक रैखिक संरचना है जो ऑपरेशन्स किए जाने के क्रम में एक विशेष क्रम का पालन करती है। क्रम First In First Out (FIFO) है।
नीचे इसका प्रदर्शन है:
मान लीजिए हमारा इनपुट है:
इनपुट क्यू: [150, 300, 450, 600]
वांछित आउटपुट होगा:
एक एलिमेंट हटाने के बाद, क्यू के एलिमेंट्स हैं: [300, 450, 600]
एल्गोरिदम
चरण 1 - शुरू चरण 2 - घोषित करें चरण 3 - 'offer' मेथड का उपयोग करके एलिमेंट्स जोड़ें चरण 4 - क्यू कंटेंट प्रदर्शित करें चरण 5 - क्यू से एलिमेंट डिलीट करने के लिए 'poll' मेथड का उपयोग करें चरण 6 - 'poll' मेथड कॉल करने के बाद क्यू के एलिमेंट्स प्रदर्शित करें चरण 7 - परिणाम प्रदर्शित करें चरण 8 - रुकें
उदाहरण 1: बिल्ट-इन Queue इंटरफेस
यहाँ, हम सभी स्टैक ऑपरेशन्स को निष्पादित करने के लिए बिल्ट-इन परिभाषित फंक्शन्स का उपयोग करते हैं।
import java.util.Queue;
import java.util.LinkedList;
public class Demo {
public static void main(String[] args) {
System.out.println("आवश्यक पैकेज आयात किए गए हैं");
Queue input_queue = new LinkedList<>();
input_queue.offer(150);
input_queue.offer(300);
input_queue.offer(450);
input_queue.offer(600);
System.out.println("क्यू परिभाषित है: " + input_queue);
int removedNumber = input_queue.poll();
System.out.println("एक एलिमेंट हटाने के बाद, क्यू के एलिमेंट्स हैं: " + input_queue);
}
}
आउटपुट
आवश्यक पैकेज आयात किए गए हैं क्यू परिभाषित है: [150, 300, 450, 600] एक एलिमेंट हटाने के बाद, क्यू के एलिमेंट्स हैं: [300, 450, 600]
उदाहरण 2: कस्टम ऐरे-आधारित क्यू कार्यान्वयन
यहाँ, हम सभी स्टैक ऑपरेशन्स को निष्पादित करने के लिए यूजर-डिफाइंड फंक्शन्स का उपयोग करते हैं।
public class Queue {
int SIZE = 5;
int items[] = new int[SIZE];
int front, rear;
Queue() {
front = -1;
rear = -1;
}
boolean isFull() {
if (front == 0 && rear == SIZE - 1) {
return true;
}
return false;
}
boolean isEmpty() {
if (front == -1)
return true;
else
return false;
}
void enQueue(int element) {
if (isFull()) {
System.out.println("\nक्यू भरा हुआ है");
} else {
if (front == -1) {
front = 0;
}
rear++;
items[rear] = element;
System.out.println("\nएलिमेंट " + element + " इंसर्ट हुआ");
}
}
int deQueue() {
int element;
if (isEmpty()) {
System.out.println("\nक्यू खाली है");
return (-1);
} else {
element = items[front];
if (front >= rear) {
front = -1;
rear = -1;
} else {
front++;
}
System.out.println("\nएलिमेंट " + element + " डिलीट हुआ");
return (element);
}
}
void display() {
int i;
if (isEmpty()) {
System.out.println("क्यू खाली है");
} else {
System.out.println("\nक्यू के एलिमेंट्स हैं: ");
for (i = front; i <= rear; i++)
System.out.print(items[i] + " ");
}
}
public static void main(String[] args) {
Queue input_queue = new Queue();
for (int i = 1; i < 6; i++) {
input_queue.enQueue(i * 100);
}
System.out.println("क्यू परिभाषित है: " + input_queue);
input_queue.enQueue(6);
input_queue.display();
input_queue.deQueue();
input_queue.display();
}
}
आउटपुट
एलिमेंट 100 इंसर्ट हुआ एलिमेंट 200 इंसर्ट हुआ एलिमेंट 300 इंसर्ट हुआ एलिमेंट 400 इंसर्ट हुआ एलिमेंट 500 इंसर्ट हुआ क्यू परिभाषित है: Queue@2a139a55 क्यू भरा हुआ है क्यू के एलिमेंट्स हैं: 100 200 300 400 500 एलिमेंट 100 डिलीट हुआ क्यू के एलिमेंट्स हैं: 200 300 400 500
Java में क्यू कार्यान्वयन विकल्प
| कार्यान्वयन | विशेषताएं | उपयोग का मामला |
|---|---|---|
| LinkedList | अनबाउंडेड, O(1) एनक्यू/डीक्यू | सामान्य उद्देश्य |
| ArrayDeque | अनबाउंडेड, O(1), ऐरे-आधारित, तेज़ | उच्च प्रदर्शन, नॉन-थ्रेड-सेफ |
| PriorityQueue | प्राथमिकता-आधारित ऑर्डरिंग | टास्क शेड्यूलिंग |
| ConcurrentLinkedQueue | थ्रेड-सेफ, नॉन-ब्लॉकिंग | मल्टी-थ्रेडेड एनवायरनमेंट |
| ArrayBlockingQueue | बाउंडेड, ब्लॉकिंग, थ्रेड-सेफ | प्रोड्यूसर-कंज्यूमर पैटर्न |
| LinkedBlockingQueue | वैकल्पिक रूप से बाउंडेड, ब्लॉकिंग | उच्च थ्रूपुट प्रोड्यूसर-कंज्यूमर |
Queue इंटरफेस मुख्य मेथड्स
- offer(e): इंसर्ट करता है, विफलता पर false रिटर्न करता है
- add(e): इंसर्ट करता है, विफलता पर एक्सेप्शन फेंकता है
- poll(): हटाता और हेड रिटर्न करता है, खाली होने पर null
- remove(): हटाता और हेड रिटर्न करता है, खाली होने पर एक्सेप्शन
- peek(): हेड रिटर्न करता है बिना हटाए, खाली होने पर null
- element(): हेड रिटर्न करता है बिना हटाए, खाली होने पर एक्सेप्शन