TypeScript में कार्य कतारें: शुरुआती लोगों के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में कार्य कतारों का परिचय

\n\n

कार्य कतार (Queue) प्रोग्रामिंग में मूलभूत डेटा संरचनाओं में से एक है, जो FIFO (First In, First Out — "पहले आया, पहले गया") सिद्धांत पर काम करती है। एक सामान्य दुकान की कतार की कल्पना करें: पहला ग्राहक जो कतार में खड़ा होता है, पहले सेवा प्राप्त करता है। प्रोग्रामिंग में, कार्य कतार का उपयोग सर्वर पर अनुरोधों को संसाधित करने से लेकर ब्राउज़र में एसिंक्रोनस संचालन प्रबंधित करने तक, हर जगह किया जाता है।

\n\n

इस लेख में, हम TypeScript में कार्य कतार बनाने और उपयोग करने का तरीका समझेंगे। आप सीखेंगे कि कतार को टाइप कैसे करें, बुनियादी विधियों को कैसे लागू करें और इसे वास्तविक परियोजनाओं में कैसे उपयोग करें। यह सामग्री उन शुरुआती डेवलपर्स के लिए है जो TypeScript की मूल बातों से परिचित हैं।

\n\n

कतार के साथ बुनियादी संचालन

\n\n

किसी भी कार्य कतार को कई बुनियादी संचालनों का समर्थन करना चाहिए:

\n\n
    \n
  • enqueue (कतार के अंत में एक तत्व जोड़ना);
  • \n
  • dequeue (कतार की शुरुआत से एक तत्व निकालना);
  • \n
  • peek (हटाए बिना पहला तत्व देखना);
  • \n
  • isEmpty (जांचना कि कतार खाली है या नहीं);
  • \n
  • size (तत्वों की संख्या जानना)।
  • \n
\n\n

TypeScript में, हम कतार को ऐरे या लिंक्ड लिस्ट के आधार पर लागू कर सकते हैं। सरलता के लिए, हम ऐरे से शुरू करते हैं।

\n\n

ऐरे-आधारित कतार कार्यान्वयन

\n\n

जेनेरिक्स का उपयोग करके एक Queue क्लास बनाएं — यह किसी भी प्रकार के डेटा को संग्रहीत करने की अनुमति देगा:

\n\n
class Queue<T> {\n    private items: T[] = [];\n\n    // कतार के अंत में तत्व जोड़ें\n    enqueue(element: T): void {\n        this.items.push(element);\n    }\n\n    // पहला तत्व हटाएं और लौटाएं\n    dequeue(): T | undefined {\n        return this.items.shift();\n    }\n\n    // हटाए बिना पहला तत्व देखें\n    peek(): T | undefined {\n        return this.items[0];\n    }\n\n    // जांचें कि कतार खाली है या नहीं\n    isEmpty(): boolean {\n        return this.items.length === 0;\n    }\n\n    // कतार का आकार प्राप्त करें\n    size(): number {\n        return this.items.length;\n    }\n}
\n\n

अब किसी भी डेटा प्रकार के लिए एक कतार बनाई जा सकती है:

\n\n
// स्ट्रिंग्स की कतार\nconst stringQueue = new Queue<string>();\nstringQueue.enqueue('कार्य 1');\nstringQueue.enqueue('कार्य 2');\nconsole.log(stringQueue.dequeue()); // 'कार्य 1'\n\n// संख्याओं की कतार\nconst numberQueue = new Queue<number>();\nnumberQueue.enqueue(10);\nnumberQueue.enqueue(20);\nconsole.log(numberQueue.peek()); // 10
\n\n

ऐरे कार्यान्वयन की कमियां

\n\n

JavaScript/TypeScript में shift() विधि की जटिलता O(n) है, क्योंकि पहले तत्व को हटाने के बाद बाकी सभी तत्व स्थानांतरित हो जाते हैं। बड़े डेटा वॉल्यूम के लिए यह अक्षम है। समाधान — कतार को ऑब्जेक्ट या लिंक्ड लिस्ट के आधार पर लागू करना।

\n\n

ऑब्जेक्ट के साथ अनुकूलित कतार

\n\n

तत्वों के स्थानांतरण से बचने के लिए, हम तत्वों को एक ऑब्जेक्ट में संग्रहीत करेंगे और शुरुआत और अंत के इंडेक्स को ट्रैक करेंगे:

\n\n
class OptimizedQueue<T> {\n    private items: Record<number, T> = {};\n    private head: number = 0;\n    private tail: number = 0;\n\n    enqueue(element: T): void {\n        this.items[this.tail] = element;\n        this.tail++;\n    }\n\n    dequeue(): T | undefined {\n        if (this.isEmpty()) {\n            return undefined;\n        }\n        const item = this.items[this.head];\n        delete this.items[this.head];\n        this.head++;\n        return item;\n    }\n\n    peek(): T | undefined {\n        return this.items[this.head];\n    }\n\n    isEmpty(): boolean {\n        return this.tail === this.head;\n    }\n\n    size(): number {\n        return this.tail - this.head;\n    }\n}
\n\n

अब enqueue और dequeue संचालन O(1) — स्थिर समय में निष्पादित होते हैं, भले ही

ब्लॉग

पुस्तक अनुशंसाएँ