Stack məlumat strukturu
-
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.
-
Azerbaijan Python User Group-dan Şəhriyar abimizin Stack-la bağlı paylaşdığı gözəl yazısı.
Data_Structures_Algo_Python/book/6.Stack_Yığın.md at master · AzePUG/Data_Structures_Algo_Python
Azərbaycan dilində "Data strukturları və Alqoritmlər" mövzusunda Open Source kitab. - Data_Structures_Algo_Python/book/6.Stack_Yığın.md at master · AzePUG/Data_Structures_Algo_Python
GitHub (github.com)
Bilik paylaşdıqca artan bir sərvətdir