Donanım Seviyesinde Stack Mantığı
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.
Not: Pratikte Python'da stack için list kullanmak
daha yaygındır (bir sonraki ders).
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()}")
np.zeros(capacity, dtype=int): capacity boyutunda, 0'larla dolu numpy arrayself.top = 0: Stack pointer, bir sonraki boş pozisyonu gösteririf self.top == self.capacityself.data[self.top] = valueself.top += 1if self.top == 0self.top -= 1val = self.data[self.top]self.data[self.top] = 0| İş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 |