एक प्राथमिकता कतार एक प्रकार की कतार है जिसमें तत्वों को उन्हें सौंपी गई प्राथमिकताओं के अनुसार डाला या हटा दिया जाता है जहां प्राथमिकता एक पूर्णांक मान है जो 0-10 के बीच हो सकता है जहां 0 तत्व को सर्वोच्च प्राथमिकता के साथ दिखाता है और 10 तत्व को दिखाता है सबसे कम प्राथमिकता। प्राथमिकता कतार को लागू करने के लिए दो नियमों का पालन किया जाता है -
- उच्चतम प्राथमिकता वाले डेटा या तत्व को न्यूनतम प्राथमिकता वाले डेटा या तत्व से पहले निष्पादित किया जाएगा।
- यदि दो तत्वों की प्राथमिकता समान है तो उन्हें सूची में जोड़े जाने के क्रम में निष्पादित किया जाएगा।
कई डेटा संरचनाएं उपलब्ध हैं जिनका उपयोग स्टैक, क्यू और लिंक्ड लिस्ट जैसी प्राथमिकता कतार को लागू करने के लिए किया जा सकता है। इस लेख में, हम कतार डेटा संरचना की व्याख्या कर रहे हैं। प्राथमिकता कतार को लागू करने के दो तरीके हैं जैसे -
- एक ही सरणी में अनेक प्राथमिकताओं के लिए कतार बनाए रखें
प्राथमिकता कतार को लागू करने का एक तरीका प्रत्येक प्राथमिकता के लिए एक कतार बनाए रखना है। हम इन एकाधिक कतारों को एक ही सरणी में संग्रहीत कर सकते हैं, जहां प्रत्येक कतार में दो पॉइंटर्स होंगे यानी फ्रंट और रियर। कतार में, फ्रंट पॉइंटर का उपयोग कतार में तत्व डालने के लिए किया जाता है और जब भी तत्व डाला जाता है तो इसे 1 से बढ़ाया जाता है और दूसरा पॉइंटर पीछे होता है जिसका उपयोग कतार से तत्व को हटाने या हटाने के लिए किया जाता है जो कि जब भी तत्व 1 से घटाया जाता है कतार से हटा दिया जाता है। अंत में, दो बिंदुओं की स्थिति के माध्यम से हम कतार में तत्वों की संख्या भी निर्धारित कर सकते हैं।
- इस प्रकार के प्रतिनिधित्व में, हमें नए तत्वों को सम्मिलित करने के लिए जगह बनाने के लिए पॉइंटर्स को स्थानांतरित करने की आवश्यकता है जो इसे समय और स्थान दोनों के मामले में जटिल बना देगा।
- एक ही सरणी में प्रत्येक प्राथमिकता के लिए कतार बनाए रखें
इस प्रकार की विधि में हम प्रत्येक तत्व के लिए अलग तीर बनाते हैं। प्रत्येक कतार को एक वृत्ताकार सरणी के रूप में कार्यान्वित किया जाता है और इसमें दो सूचक चर होते हैं। अगला और पिछला। प्राथमिकता संख्या वाला तत्व संबंधित कतार में डाला जाता है इसी तरह यदि हम कतार से किसी तत्व को हटाना चाहते हैं तो यह सर्वोच्च प्राथमिकता कतार से तत्व होना चाहिए। निम्नतम प्राथमिकता पूर्णांक सर्वोच्च प्राथमिकता(0) को इंगित करता है।
नोट - यदि प्रत्येक कतार का आकार समान है तो हम एक से अधिक एक-आयामी सरणी बनाने के बजाय एक एकल द्वि-आयामी सरणी बना सकते हैं।
प्राथमिकता कतार में सम्मिलित करें ऑपरेशन के लिए एल्गोरिदम
insert(queue, data, priority) If(queue->Rear[priority] = MAX-1 AND queue->Front[priority] = 0) OR (queue->Rear[priority] +1 =queue->Front[priority]) Print Overflow End IF queue->Rear[priority - 1] = MAX-1 Set queue->Rear[priority - 1] = 0 Else Set queue->Rear[priority] = queue->Rear[priority - 1] +1 End Set queue->CQueue[priority - 1] [queue->Rear[priority - 1] = data IF queue->Front[priority - 1] = -1 Set queue->Front[priority - 1] = 0 End
प्राथमिकता कतार में सम्मिलित करें ऑपरेशन के लिए एल्गोरिदम
delete(queue) Set flag = 0, priority = 0 While priority <= MAX-1 IF NOT queue->Front[priority] = -1 Set flag = 1 Set value = queue->CQueue[priority][queue->Front[priority]] IF queue->Front[priority] = queue->Rear[priority] Set queue->Front[priority] = queue->Rear[priority] = -1 Else IF queue->Front[priority] = MAX-1 Set queue->Front[priority] = 0 Else Set queue->Front[priority] = queue->Front[priority] + 1 End End Break End Set priority = priority + End If flag = 0 Print underflow Else Return value End