जावास्क्रिप्ट ES6 कक्षाओं के साथ डेटा संरचनाएं कैसे बनाएं

जावास्क्रिप्ट ES6 कक्षाओं के साथ डेटा संरचनाएं कैसे बनाएं

डेटा संरचनाएं कंप्यूटर विज्ञान और प्रोग्रामिंग का एक मूलभूत पहलू हैं, चाहे आप किसी भी भाषा का उपयोग करें। इनका संपूर्ण ज्ञान होने से आपको डेटा को कुशलतापूर्वक व्यवस्थित, प्रबंधित, संग्रहीत और संशोधित करने में मदद मिल सकती है। अपने उपयोग के मामले के लिए उचित डेटा संरचना की पहचान करने से प्रदर्शन में भारी अंतर से सुधार हो सकता है।





हालाँकि, जावास्क्रिप्ट केवल आदिम डेटा संरचनाओं जैसे कि सरणियों और वस्तुओं के साथ डिफ़ॉल्ट रूप से आता है। लेकिन ईसीएमएस्क्रिप्ट 6 (ईएस6) कक्षाओं की शुरुआत के साथ, अब आप आदिम डेटा संरचनाओं की मदद से कस्टम डेटा संरचनाएं जैसे स्टैक और क्यू बना सकते हैं।





एक स्मार्ट टीवी क्या करता है

स्टैक डेटा संरचना

स्टैक डेटा संरचना आपको LIFO (लास्ट-इन, फ़र्स्ट-आउट) तरीके से मौजूदा डेटा के शीर्ष पर नए डेटा को पुश करने की अनुमति देती है। यह रैखिक डेटा संरचना एक साधारण उदाहरण का उपयोग करके कल्पना करना आसान है। एक मेज पर रखी प्लेटों के ढेर पर विचार करें। आप केवल स्टैक के ऊपर से प्लेट जोड़ या हटा सकते हैं।





यहां बताया गया है कि आप जावास्क्रिप्ट सरणियों का उपयोग करके स्टैक डेटा संरचना को कैसे लागू कर सकते हैं और ES6 कक्षाएं :

class Stack {
constructor() {
this.data = [];
this.top = -1;
}
}

आइए कुछ ऐसे कार्यों का अन्वेषण और निर्माण करें जिन्हें आप स्टैक पर कर सकते हैं।



पुश ऑपरेशन

पुश ऑपरेशन का उपयोग स्टैक में नया डेटा डालने के लिए किया जाता है। पुश विधि को कॉल करते समय आपको डेटा को पैरामीटर के रूप में पास करने की आवश्यकता होती है। डेटा डालने से पहले, स्टैक के शीर्ष सूचक को एक से बढ़ाया जाता है, और नया डेटा शीर्ष स्थान पर डाला जाता है।

push(data) {
this.top++;
this.data[this.top] = data;
return this.data;
}

पॉप ऑपरेशन

पॉप ऑपरेशन का उपयोग स्टैक के सबसे ऊपरी डेटा तत्व को हटाने के लिए किया जाता है। इस ऑपरेशन को करते समय, शीर्ष सूचक 1 से कम हो जाता है।





pop() {
if (this.top <0) return undefined;
const poppedTop = this.data[this.top];
this.top--;
return poppedTop;
}

पीक ऑपरेशन

पीक ऑपरेशन का उपयोग स्टैक के शीर्ष पर मौजूद मान को वापस करने के लिए किया जाता है। इस डेटा को पुनः प्राप्त करने की समय जटिलता O(1) है।

और अधिक जानें: बिग-ओ नोटेशन क्या है?





peek() {
return this.top >= 0 ? this.data[this.top] : undefined;
}

लिंक्ड सूची डेटा संरचना

एक लिंक्ड सूची एक रैखिक डेटा संरचना है जिसमें पॉइंटर्स की सहायता से एक दूसरे से जुड़े कई नोड्स होते हैं। सूची में प्रत्येक नोड में डेटा और एक सूचक चर होता है जो सूची में अगले नोड को इंगित करता है।

और जानें: प्रोग्रामर्स के लिए पॉइंटर्स का परिचय

स्टैक के विपरीत, जावास्क्रिप्ट में लिंक्ड सूची कार्यान्वयन के लिए दो वर्गों की आवश्यकता होती है। प्रथम श्रेणी है नोड एक नोड बनाने के लिए वर्ग, और दूसरा वर्ग है लिंक्ड सूची लिंक की गई सूची पर सभी कार्यों को करने के लिए वर्ग। हेड पॉइंटर लिंक्ड लिस्ट के पहले नोड की ओर इशारा करता है, और टेल पॉइंटर लिंक्ड लिस्ट के आखिरी नोड की ओर इशारा करता है।

class Node {
constructor(data, next = null) {
this.data = data;
this.next = next;
}
}
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
this.size = 0;
}
}

यहां कुछ प्राथमिक ऑपरेशन दिए गए हैं जिन्हें आप लिंक की गई सूची पर कर सकते हैं:

ऑपरेशन जोड़ें

एपेंड ऑपरेशन का उपयोग लिंक की गई सूची के अंत में एक नया नोड जोड़ने के लिए किया जाता है। नया नोड डालने के लिए आपको डेटा को पैरामीटर के रूप में पास करना होगा। सबसे पहले, का उपयोग करके एक नया नोड ऑब्जेक्ट बनाएं नया जावास्क्रिप्ट में कीवर्ड।

यदि लिंक की गई सूची खाली है, तो हेड और टेल पॉइंटर दोनों नए नोड को इंगित करेंगे। अन्यथा, केवल टेल पॉइंटर नए नोड को इंगित करेगा।

append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
}
this.size++;
return this;
}

ऑपरेशन डालें

किसी विशेष इंडेक्स पर एक नया नोड डालने के लिए, आप इन्सर्ट ऑपरेशन का उपयोग कर सकते हैं। इस विधि में दो पैरामीटर होते हैं: सम्मिलित करने के लिए डेटा और वह अनुक्रमणिका जिस पर इसे सम्मिलित किया जाना है। सबसे खराब स्थिति में, इस पद्धति में O(N) की समय जटिलता है क्योंकि इसे पूरी सूची से गुजरना पड़ सकता है।

insert(data, index) {
if (index this.size) return undefined;
if (index === 0) {
this.head = new Node(data, this.head);
!this.tail ? (this.tail = this.head) : null;
this.size++;
return this;
}
if (index === this.size) return this.append(data);
let count = 0;
let beforeNode = this.head;
while (count !== index) {
beforeNode = beforeNode.next;
count++;
}
const newNode = new Node(data);
let afterNode = beforeNode.next;
newNode.next = afterNode;
beforeNode.next = newNode;
this.size++;
return this;
}

ऑपरेशन हटाएं

हटाए जाने वाले नोड का संदर्भ प्राप्त करने के लिए डिलीट ऑपरेशन लिंक की गई सूची से होकर गुजरता है और पिछले नोड के लिंक को हटा देता है। इन्सर्ट ऑपरेशन के समान, डिलीट ऑपरेशन में भी सबसे खराब स्थिति में O (N) की समय जटिलता होती है।

deleteNode(index) {
if (index === 0) {
const removedHead = this.head;
this.head = this.head.next;
this.size--;
this.size === 0 ? (this.tail = null) : null;
return removedHead;
}
if (index === this.size - 1) {
if (!this.head) return undefined;
let currentNode = this.head;
let newTail = currentNode;
while (currentNode.next) {
newTail = currentNode;
currentNode = currentNode.next;
}
this.tail = newTail;
this.tail.next = null;
this.size--;
this.size === 0 ? ([this.head, this.tail] = [null, null]) : null;
return currentNode;
}
if (index this.size - 1) return undefined;
let count = 0;
let beforeNode = this.head;
while (count !== index - 1) {
beforeNode = beforeNode.next;
count++;
}
const removedNode = beforeNode.next;
let afterNode = removedNode.next;
beforeNode.next = afterNode;
removedNode.next = null;
this.size--;
return removedNode;
}

कतार डेटा संरचना

कतार डेटा संरचना कतार में खड़े लोगों के समूह के समान है। जो व्यक्ति पहले कतार में प्रवेश करता है उसे दूसरों के सामने परोसा जाता है। इसी तरह, यह रैखिक डेटा संरचना डेटा डालने और निकालने के लिए FIFO (फर्स्ट इन, फ़र्स्ट आउट) दृष्टिकोण का अनुसरण करती है। इस डेटा संरचना को इस तरह से लिंक की गई सूची का उपयोग करके जावास्क्रिप्ट में फिर से बनाया जा सकता है:

class Queue {
constructor() {
this.front = null;
this.rear = null;
this.size = 0;
}
}

यहां बताया गया है कि आप जावास्क्रिप्ट में एक कतार से डेटा कैसे सम्मिलित और हटा सकते हैं:

mylife को कैसे पता चलता है कि कौन मुझे ढूंढ रहा है

कतार संचालन

एनक्यू ऑपरेशन कतार में नया डेटा सम्मिलित करता है। इस विधि को कॉल करते समय, यदि कतार डेटा संरचना खाली है, तो आगे और पीछे दोनों पॉइंटर्स कतार में नए सम्मिलित नोड को इंगित करते हैं। यदि कतार खाली नहीं है, तो सूची के अंत में नया नोड जोड़ा जाता है और पिछला पॉइंटर इस नोड को इंगित करता है।

enqueue(data) {
const newNode = new Node(data);
if (!this.front) {
this.front = newNode;
this.rear = newNode;
} else {
this.rear.next = newNode;
this.rear = newNode;
}
this.size++;
return this;
}

डीक्यू ऑपरेशन

डीक्यू ऑपरेशन कतार में पहले तत्व को हटा देता है। डीक्यू ऑपरेशन के दौरान, हेड पॉइंटर को सूची में दूसरे नोड के आगे ले जाया जाता है। यह दूसरा नोड अब कतार का प्रमुख बन जाता है।

dequeue() {
if (!this.front) return undefined;
if (this.front === this.rear) this.rear = null;
const dequeuedNode = this.front;
this.front = this.front.next;
this.size--;
return dequeuedNode;
}

डेटा संरचनाओं के बाद अगला चरण

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

एल्गोरिदम डेटा संरचनाओं की तरह ही उपयोगी होते हैं और आपकी प्रोग्रामिंग यात्रा में अगला तार्किक कदम बन सकते हैं। तो, बबल सॉर्ट जैसे सॉर्टिंग एल्गोरिदम से क्यों न शुरू करें?

साझा करना साझा करना कलरव ईमेल बबल सॉर्ट एल्गोरिथम का परिचय

बबल सॉर्ट एल्गोरिथ्म: सरणियों को छांटने के लिए एक उत्कृष्ट परिचय।

आगे पढ़िए
संबंधित विषय
  • प्रोग्रामिंग
  • जावास्क्रिप्ट
  • प्रोग्रामिंग
  • कोडिंग ट्यूटोरियल
लेखक के बारे में Nitin Ranganath(31 लेख प्रकाशित)

नितिन एक शौकीन चावला सॉफ्टवेयर डेवलपर और एक कंप्यूटर इंजीनियरिंग छात्र है जो जावास्क्रिप्ट तकनीकों का उपयोग करके वेब एप्लिकेशन विकसित कर रहा है। वह एक फ्रीलांस वेब डेवलपर के रूप में काम करता है और अपने खाली समय में लिनक्स और प्रोग्रामिंग के लिए लिखना पसंद करता है।

नितिन रंगनाथी की और फ़िल्में या टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें