क्यू एक रैखिक डेटा संरचना है जिसमें संचालन का क्रम फीफो (फर्स्ट इन फर्स्ट आउट) है।
सरणी एक डेटा संरचना है जिसमें समान डेटा प्रकार के तत्व होते हैं, जो निरंतर स्मृति स्थान में संग्रहीत होते हैं।
कतार में सम्मिलन और विलोपन संचालन कतार के विपरीत छोर पर किया जाता है। स्टैक की तुलना में कार्यान्वयन थोड़ा अधिक जटिल है।
कतार के सरणी कार्यान्वयन में, हम दो चर शीर्ष और अंत के साथ आकार n की एक सरणी कतार बनाते हैं।
अब, प्रारंभ में, सरणी खाली है यानी शीर्ष और अंत दोनों सरणी के 0 अनुक्रमणिका पर हैं। और जैसे ही तत्वों को क्यू में जोड़ा जाता है (सम्मिलन) अंतिम चर का मान बढ़ा दिया गया है। अंत का मान n यानी किसी सरणी की अधिकतम लंबाई तक बढ़ सकता है।
जब तत्वों को क्यू से हटाना हो (हटाना) , शीर्ष चर का मान बढ़ जाता है। शीर्ष का मूल्य अंत के मूल्य तक जा सकता है।
कतार संचालन का कार्यान्वयन
एनक्यू - यह कतार में तत्वों को जोड़ने का ऑपरेशन है। कतार में तत्वों को जोड़ने से पहले, हम जांच करेंगे कि कतार भरी हुई है या नहीं। इसे जांचने की शर्त समाप्त होती है, यदि यह n से कम है तो हम तत्वों को कतार [अंत] पर संग्रहीत कर सकते हैं। और अंत को 1 से बढ़ाएं।
एक अतिप्रवाह स्थिति तब होती है जब सरणी भर जाती है यानी अंत ==n।
डेक्यू - यह कतार के तत्वों को हटाने का कार्य है। कतार के तत्वों को हटाने से पहले, हम जांच करेंगे कि कतार खाली है या नहीं। यह जांचने की शर्त है कि कतार खाली है या नहीं, शीर्ष और अंत के मूल्यों की जाँच की जाती है। यदि शीर्ष ==अंत सरणी से खाली है।
यदि तत्व हैं तो हम सरणी को हटा देंगे। सरणी के बाईं ओर सभी तत्वों को एक-एक करके स्थानांतरित करके।
सामने - कतार के पहले तत्व यानी सरणी [शीर्ष] को निकालना। यह ऑपरेशन केवल तभी किया जा सकता है जब सरणी खाली न हो।
प्रदर्शन - यह ऑपरेशन कतार के सभी तत्वों को प्रदर्शित करता है। यानी कतार को पार करता है।
एल्गोरिदम
ENQUEUE : Step 1 : if (end == n), print : “OVERFLOW”. Exit Step 2 : queue[end] = data and end++ DEQUEUE : Step 1 : If (top == 0), print : “empty Queue”. Exit Step 2 : shift all elements one position left. End-- ;
उदाहरण
#include <bits/stdc++.h> using namespace std; struct Queue { int top, end, n; int* queue; Queue(int c){ top = end = 0; n = c; queue = new int; } ~Queue() { delete[] queue; } void Enqueue(int data){ if (n == end) { printf("\nQueue is full\n"); return; } else { queue[end] = data; end++; } return; } void Dequeue(){ if (top == end) { printf("\nQueue is empty\n"); return; } else { for (int i = 0; i < end - 1; i++) { queue[i] = queue[i + 1]; } end--; } return; } void Display(){ int i; if (top == end) { printf("\nQueue is Empty\n"); return; } for (i = top; i < end; i++) { printf(" %d <-- ", queue[i]); } return; } void Front(){ if (top == end) { printf("\nQueue is Empty\n"); return; } printf("\nFront Element is: %d", queue[top]); return; } }; int main(void){ Queue q(4); q.Display(); q.Enqueue(12); q.Enqueue(89); q.Enqueue(65); q.Enqueue(34); q.Display(); q.Enqueue(92); q.Display(); q.Dequeue(); q.Dequeue(); q.Display(); q.Front(); return 0; }
आउटपुट
Queue is Empty 12 <-- 89 <-- 65 <-- 34 <-- Queue is full 12 <-- 89 <-- 65 <-- 34 <-- 65 <-- 34 <-- Front Element is: 65