🏗️ 2.2: Numpy ile Stack Kodlama

Donanım Seviyesinde Stack Mantığı

📌 Ön Bilgi: Bu Sayfada Ne Öğreneceğiz?

Bu sayfada sabit boyutlu bir stack nasıl oluşturulur göreceğiz. Numpy kullanmamızın sebebi, C dilindeki diziler gibi sabit boyutlu, bitişik bellekte tutulan bir yapı elde etmektir.

Neden Sabit Boyutlu Stack?

Not: Pratikte Python'da stack için list kullanmak daha yaygındır (bir sonraki ders).

Stack Pointer (Top) Görselleştirme

💻 Tam Kod Implementasyonu

🐍 Python - Numpy Stack
import numpy as np

class NumpyStack:
    def __init__(self, capacity):
        self.capacity = capacity
        self.data = np.zeros(capacity, dtype=int)
        self.top = 0

    def push(self, value):
        if self.top == self.capacity:
            print("❌ Stack Overflow! Stack dolu.")
            return False
        self.data[self.top] = value
        self.top += 1
        print(f"✅ Push({value}) -> Top: {self.top}, Data: {self.data}")
        return True

    def pop(self):
        if self.top == 0:
            print("❌ Stack Underflow! Stack boş.")
            return None
        self.top -= 1
        val = self.data[self.top]
        self.data[self.top] = 0  # Opsiyonel: Temizle
        print(f"🔻 Pop() -> {val}, Top: {self.top}, Data: {self.data}")
        return val

    def peek(self):
        if self.top == 0:
            print("❌ Stack boş!")
            return None
        return self.data[self.top - 1]

    def is_empty(self):
        return self.top == 0

    def size(self):
        return self.top

# Test Kodu
print("=== Numpy Stack Testi ===\n")
s = NumpyStack(5)

print("1. Eleman ekleme:")
s.push(10)
s.push(20)
s.push(30)

print("\n2. Peek:")
print(f"👀 En üstteki: {s.peek()}")

print("\n3. Pop işlemleri:")
s.pop()
s.pop()

print("\n4. Tekrar push:")
s.push(99)
s.push(88)

print("\n5. Overflow testi:")
s.push(77)
s.push(66)
s.push(55)  # Bu overflow verecek

print(f"\n6. Final durum - Boyut: {s.size()}")

🔍 Kod Açıklaması

1. __init__(self, capacity)

2. push(value)

3. pop()

📊 Zaman Karmaşıklığı

İşlem Zaman Karmaşıklığı Açıklama
push() O(1) Sabit zamanda indeksleme ve atama
pop() O(1) Sabit zamanda indeksleme
peek() O(1) Sadece indeksleme
is_empty() O(1) Sadece sayı karşılaştırma