Stack Nədir?
Stack — elementlərdən ibarət olan bir abstrakt məlumat strukturu və ya verilənlər tipi kimi istifadə olunur. Stack-in əsas xüsusiyyəti ondan ibarətdir ki, elementlər yalnız bir tərəfdən - “üst” (top) hissədən əlavə edilir və çıxarılır. Bu səbəbdən LIFO (Last-In-First-Out - Son Daxil Olan İlk Çıxır) prinsipinə əsaslanır.
Stack-lər proqramlaşdırmada geniş istifadə olunur və aşağıdakı sahələrdə tətbiq edilir:
- Funksiya çağırışlarının idarə edilməsi (call stack);
- Undo/Redo əməliyyatları (məsələn, mətn redaktorlarında geri qaytarma);
- Brauzer tarixçəsinin idarə edilməsi (routing, tarix obyekti stack kimi işləyir).
Stack-in JavaScript-də implementasiyası
Stack üçün əsas class
Stack-i yaratmaq üçün əvvəlcə Node və Stack class-larını müəyyən etməliyik.
Node classı:
- Constructor qəbul etdiyi
value
parametrinithis.value
-ə mənimsədir; this.next
default olaraqnull
olur.
Stack classı:
- Constructor heç bir parametr qəbul etmir, amma
this.first
vəthis.last
dəyərlərinull
olur; this.size
dəyişəni isə 0-dır.
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class Stack {
constructor() {
this.first = null;
this.last = null;
this.size = 0;
}
}
Element əlavə etmə (Push) — O(1)
Stack-ə element əlavə etmək üçün push() metodunu yazırıq.
Addım-addım izah:
- Yeni bir
Node
yaradırıq və ona dəyər ötürürük. - Əgər stack boşdursa, first və last propertiləri bu yeni node-a bərabər olur.
- Əgər stack-də artıq element varsa:
- Mövcud
first
dəyərini müvəqqəti (temp
) dəyişəndə saxlayırıq. - Yeni node-u
first
kimi təyin edirik. - Yeni
first
-innext
propertiyini əvvəlkifirst
-ə yönəldirik.
- Mövcud
- Stack-in ölçüsünü (
size
) artırırıq.
Kod:
push(value) {
const newNode = new Node(value);
if (!this.first) {
this.first = newNode;
this.last = newNode;
} else {
const temp = this.first;
this.first = newNode;
this.first.next = temp;
}
return ++this.size;
}
Element Silmə (Pop) — O(1)
Stack-in üstündən element silmək üçün pop() metodunu yazırıq.
Addım-addım izah:
- Əgər stack boşdursa (
this.first === null
),null
qaytarırıq. - Mövcud
first
dəyərini müvəqqəti (temp
) dəyişəndə saxlayırıq. - Əgər stack-də tək element varsa (
first === last
), last-inull
edirik. - First dəyərini
this.first.next
-ə təyin edirik. - Stack-in ölçüsünü (
size
) azaldırıq və silinmiş elementin (temp
) dəyərini qaytarırıq.
Kod:
pop() {
if (!this.first) return null;
const temp = this.first;
if (this.first === this.last) {
this.last = null;
}
this.first = this.first.next;
this.size--;
return temp.value;
}
Nəticə
Stack, proqramlaşdırmada geniş istifadə olunan mühüm məlumat strukturudur. LIFO prinsipi ilə işləyir və element əlavə etmə və silmə əməliyyatları O(1) vaxt mürəkkəbliyinə malikdir.
Bu məqalədə Stack-in JavaScript-də necə qurulmasını və push/pop əməliyyatlarının necə həyata keçirildiyini öyrəndik. Stack, xüsusilə funksiya çağırışlarının idarə olunması, undo/redo əməliyyatları və brauzer tarixçəsinin idarə edilməsi kimi sahələrdə geniş istifadə edilir.