Πώς να δημιουργήσετε δομές δεδομένων με κλάσεις JavaScript ES6

Πώς να δημιουργήσετε δομές δεδομένων με κλάσεις JavaScript ES6

Οι δομές δεδομένων αποτελούν θεμελιώδη πτυχή της επιστήμης των υπολογιστών και του προγραμματισμού, ανεξάρτητα από τη γλώσσα που χρησιμοποιείτε. Η πλήρης γνώση τους μπορεί να σας βοηθήσει να οργανώσετε αποτελεσματικά, να διαχειριστείτε, να αποθηκεύσετε και να τροποποιήσετε δεδομένα. Ο εντοπισμός της κατάλληλης δομής δεδομένων για τη θήκη χρήσης σας μπορεί να βελτιώσει την απόδοση με τεράστιο περιθώριο.





Ωστόσο, η JavaScript συνοδεύεται από πρωτόγονες δομές δεδομένων, όπως πίνακες και αντικείμενα από προεπιλογή. Αλλά με την εισαγωγή των κλάσεων ECMAScript 6 (ES6), μπορείτε τώρα να δημιουργήσετε προσαρμοσμένες δομές δεδομένων, όπως στοίβες και ουρές, με τη βοήθεια πρωτόγονων δομών δεδομένων.





Μπορώ να χρησιμοποιήσω hdmi splitter για διπλές οθόνες

Δομή δεδομένων στοίβας

Η δομή δεδομένων στοίβας σας επιτρέπει να προωθήσετε νέα δεδομένα πάνω από τα υπάρχοντα δεδομένα με τρόπο LIFO (τελευταίος, πρώτος-έξω). Αυτή η γραμμική δομή δεδομένων είναι εύκολο να απεικονιστεί χρησιμοποιώντας ένα απλό παράδειγμα. Σκεφτείτε μια στοίβα πιάτα που φυλάσσονται σε ένα τραπέζι. Μπορείτε να προσθέσετε ή να αφαιρέσετε μια πλάκα μόνο από το πάνω μέρος της στοίβας.





Δείτε πώς μπορείτε να εφαρμόσετε τη δομή δεδομένων στοίβας χρησιμοποιώντας πίνακες JavaScript και Τάξεις ES6 :

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

Ας εξερευνήσουμε και δημιουργήσουμε μερικές από τις λειτουργίες που μπορείτε να εκτελέσετε σε μια στοίβα.



Λειτουργία ώθησης

Η λειτουργία ώθησης χρησιμοποιείται για την εισαγωγή νέων δεδομένων στη στοίβα. Πρέπει να περάσετε τα δεδομένα ως παράμετρο ενώ καλείτε τη μέθοδο push. Πριν από την εισαγωγή των δεδομένων, ο επάνω δείκτης της στοίβας αυξάνεται κατά ένα και τα νέα δεδομένα εισάγονται στην επάνω θέση.

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

Λειτουργία ποπ

Η λειτουργία pop χρησιμοποιείται για την αφαίρεση του ανώτερου στοιχείου δεδομένων της στοίβας. Κατά την εκτέλεση αυτής της λειτουργίας, ο επάνω δείκτης μειώνεται κατά 1.





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

Λειτουργία Peek

Η λειτουργία peek χρησιμοποιείται για την επιστροφή της τιμής που υπάρχει στο πάνω μέρος της στοίβας. Η χρονική πολυπλοκότητα για την ανάκτηση αυτών των δεδομένων είναι O (1).

Μάθε περισσότερα: Τι είναι το Big-O Notation;





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

Δομή Δεδομένων Συνδεδεμένης Λίστας

Μια συνδεδεμένη λίστα είναι μια γραμμική δομή δεδομένων που αποτελείται από πολυάριθμους κόμβους συνδεδεμένους μεταξύ τους με τη βοήθεια δεικτών. Κάθε κόμβος στη λίστα περιέχει τα δεδομένα και μια μεταβλητή δείκτη που δείχνει στον επόμενο κόμβο της λίστας.

Μάθετε περισσότερα: Εισαγωγή στους δείκτες για προγραμματιστές

Σε αντίθεση με μια στοίβα, οι εφαρμογές της συνδεδεμένης λίστας στο JavaScript απαιτούν δύο κλάσεις. Η πρώτη τάξη είναι η Κόμβος κλάση για τη δημιουργία ενός κόμβου και η δεύτερη κλάση είναι η LinkedList κλάση για την εκτέλεση όλων των λειτουργιών στη συνδεδεμένη λίστα. Ο δείκτης κεφαλής δείχνει τον πρώτο κόμβο της συνδεδεμένης λίστας και ο δείκτης ουράς δείχνει τον τελευταίο κόμβο της συνδεδεμένης λίστας.

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

Ακολουθούν μερικές κύριες λειτουργίες που μπορείτε να εκτελέσετε σε μια συνδεδεμένη λίστα:

Προσθήκη λειτουργίας

Η λειτουργία προσάρτησης χρησιμοποιείται για την προσθήκη ενός νέου κόμβου στο τέλος της συνδεδεμένης λίστας. Πρέπει να περάσετε τα δεδομένα ως παράμετρο για την εισαγωγή ενός νέου κόμβου. Πρώτον, δημιουργήστε ένα νέο αντικείμενο κόμβου χρησιμοποιώντας το νέος λέξη -κλειδί στο JavaScript.

Εάν η συνδεδεμένη λίστα είναι κενή, τόσο ο δείκτης κεφαλής όσο και η ουρά θα δείξουν τον νέο κόμβο. Διαφορετικά, μόνο ο δείκτης ουράς θα δείχνει τον νέο κόμβο.

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;
}

Εισαγωγή λειτουργίας

Για να εισαγάγετε έναν νέο κόμβο σε ένα συγκεκριμένο ευρετήριο, μπορείτε να χρησιμοποιήσετε τη λειτουργία εισαγωγής. Αυτή η μέθοδος λαμβάνει δύο παραμέτρους: τα δεδομένα που πρέπει να εισαχθούν και το ευρετήριο στο οποίο πρόκειται να εισαχθούν. Στη χειρότερη περίπτωση, αυτή η μέθοδος έχει χρονική πολυπλοκότητα Ο (Ν) καθώς μπορεί να χρειαστεί να διανύσει ολόκληρο τον κατάλογο.

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 (πρώτη σε, πρώτη έξω) για εισαγωγή και αφαίρεση δεδομένων. Αυτή η δομή δεδομένων μπορεί να αναδημιουργηθεί σε JavaScript χρησιμοποιώντας μια συνδεδεμένη λίστα με αυτόν τον τρόπο:

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

Δείτε πώς μπορείτε να εισαγάγετε και να αφαιρέσετε δεδομένα από μια ουρά στο JavaScript:

μπορείτε να αναμίξετε 4gb και 8gb RAM

Enqueue Operation

Η λειτουργία enqueue εισάγει νέα δεδομένα στην ουρά. Κατά την κλήση αυτής της μεθόδου, εάν η δομή δεδομένων ουράς είναι κενή, τόσο ο μπροστινός όσο και ο πίσω δείκτης δείχνουν τον πρόσφατα εισαγόμενο κόμβο στην ουρά. Εάν η ουρά δεν είναι κενή, ο νέος κόμβος προστίθεται στο τέλος της λίστας και ο πίσω δείκτης δείχνει αυτόν τον κόμβο.

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

Η λειτουργία αποστράγγισης αφαιρεί το πρώτο στοιχείο στην ουρά. Κατά τη διάρκεια της λειτουργίας αποστράγγισης, ο δείκτης κεφαλής μετακινείται μπροστά στον δεύτερο κόμβο της λίστας. Αυτός ο δεύτερος κόμβος γίνεται τώρα το κεφάλι της ουράς.

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;
}

Το επόμενο βήμα μετά από δομές δεδομένων

Οι δομές δεδομένων μπορεί να είναι μια δύσκολη έννοια για κατανόηση, ειδικά αν είστε νέοι στον προγραμματισμό. Αλλά όπως κάθε άλλη δεξιότητα, η πρακτική μπορεί να σας βοηθήσει να κατανοήσετε πραγματικά και να εκτιμήσετε την αποτελεσματικότητα που παρέχει για την αποθήκευση και τη διαχείριση δεδομένων στις εφαρμογές σας.

Οι αλγόριθμοι είναι εξίσου χρήσιμοι με τις δομές δεδομένων και θα μπορούσαν να γίνουν το επόμενο λογικό βήμα στο ταξίδι προγραμματισμού σας. Λοιπόν, γιατί να μην ξεκινήσετε με έναν αλγόριθμο ταξινόμησης όπως η ταξινόμηση φυσαλίδων;

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Εισαγωγή στον αλγόριθμο ταξινόμησης φυσαλίδων

Ο αλγόριθμος Bubble Sort: μια εξαιρετική εισαγωγή στη διαλογή συστοιχιών.

Διαβάστε Επόμενο
Σχετικά θέματα
  • Προγραμματισμός
  • JavaScript
  • Προγραμματισμός
  • Φροντιστήρια κωδικοποίησης
Σχετικά με τον Συγγραφέα Νίτιν Ρανγκανάθ(Δημοσιεύθηκαν 31 άρθρα)

Ο Nitin είναι ένας άπληστος προγραμματιστής λογισμικού και φοιτητής μηχανικής υπολογιστών που αναπτύσσει εφαρμογές ιστού χρησιμοποιώντας τεχνολογίες JavaScript. Εργάζεται ως ανεξάρτητος προγραμματιστής ιστού και του αρέσει να γράφει για Linux και προγραμματισμό στον ελεύθερο χρόνο του.

Περισσότερα από τον Nitin Ranganath

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή