
JavaScript ile Veri Yapıları ve Algoritmalar: Kapsamlı Rehber
Giriş
JavaScript, web geliştirmenin temel taşlarından biri olmanın ötesinde, veri yapıları ve algoritmalar için de güçlü bir dildir. Bu yazıda, JavaScript ile temel ve ileri düzey veri yapılarını, algoritmaları ve bunların gerçek hayattaki kullanımlarını inceleyeceğiz.
1. Veri Yapıları
Veri yapıları, verileri saklamak ve düzenlemek için kullanılan yapısal formatlardır. JavaScript'te en yaygın veri yapıları şunlardır:
1.1 Diziler (Arrays)
Diziler, birden fazla değeri tek bir değişkende saklamak için kullanılır.
let sayilar = [1, 2, 3, 4, 5];
console.log(sayilar[0]); // 1
Dizi Metotları:
push()
,pop()
,shift()
,unshift()
,splice()
,slice()
,map()
,filter()
,reduce()
vb.
1.2 Bağlı Listeler (Linked Lists)
Bağlı listeler, elemanların düğüm (node) yapısında saklandığı bir veri yapısıdır.
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
append(data) {
let newNode = new Node(data);
if (!this.head) {
this.head = newNode;
return;
}
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
Bağlı listeler, dizilere göre daha dinamik bellek kullanımı sağlar.
1.3 Yığın (Stack)
Yığın, LIFO (Last In, First Out) prensibiyle çalışan bir veri yapısıdır.
class Stack {
constructor() {
this.items = [];
}
push(element) {
this.items.push(element);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
}
Gerçek Hayatta Kullanım Alanları:
- Tarayıcı geri-al (“undo”) fonksiyonu
- Fonksiyon çağrı yığını (call stack)
1.4 Kuyruk (Queue)
Kuyruk, FIFO (First In, First Out) prensibiyle çalışan bir veri yapısıdır.
class Queue {
constructor() {
this.items = [];
}
enqueue(element) {
this.items.push(element);
}
dequeue() {
return this.items.shift();
}
}
Gerçek Hayatta Kullanım Alanları:
- Baskı kuyrukları
- Veri akışı sistemleri
2. Algoritmalar
2.1 Sıralama Algoritmaları
2.1.1 Seçmeli Sıralama (Selection Sort)
function selectionSort(arr) {
let n = arr.length;
for (let i = 0; i < n - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
return arr;
}
2.1.2 Hızlı Sıralama (Quick Sort)
function quickSort(arr) {
if (arr.length < 2) return arr;
let pivot = arr[0];
let left = arr.slice(1).filter(el => el < pivot);
let right = arr.slice(1).filter(el => el >= pivot);
return [...quickSort(left), pivot, ...quickSort(right)];
}
2.2 Arama Algoritmaları
2.2.1 Doğrusal Arama (Linear Search)
function linearSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) return i;
}
return -1;
}
2.2.2 İkili Arama (Binary Search)
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
target < arr[mid] ? (right = mid - 1) : (left = mid + 1);
}
return -1;
}
Sonuç
Bu yazıda JavaScript kullanarak temel veri yapıları ve algoritmaları ayrıntılı bir şekilde inceledik. Bu bilgiler, geliştirme sürecinizi optimize etmek ve verimli kod yazmak için önemlidir. Daha derinlemesine çalışmak için uygulamalı projeler geliştirebilirsiniz.
Yorum Yap