3. Hafta: Bağlı Listeler I: Tek Yönlü Bağlı Liste (Singly Linked List)
📊 Ders Sunumu ve Slaytlar
Ders sunumunu tarayıcıda doğrudan inceleyebilir veya sunum dosyasını indirebilirsiniz.
🔗 Neden Bağlı Liste?
Dizilerin en büyük dezavantajı eleman eklemek veya silmek için diğer tüm elemanları kaydırma ($O(n)$) zorunluluğudur.
Bağlı liste (Linked List), elemanların bellekte ardışık olma zorunluluğunu ortadan kaldırır. Her eleman bir Düğüm (Node) içinde saklanır ve her düğüm kendisinden sonraki düğümün bellek adresini (pointer/reference) tutar.
🧩 Düğüm (Node) Mimarisi
class Node:
def __init__(self, data):
self.data = data
self.next = None # Bir sonraki düğüme işaret eder
⚙️ Temel İşlemler ve Karmaşıklıkları
- Başa Ekleme (Prepend): $O(1)$
- Sona Ekleme (Append): Tail pointer varsa $O(1)$, yoksa $O(n)$
- Arama: $O(n)$ (Rastgele erişim yapılamaz, baştan itibaren gezilmelidir)
- Referansı Bilinen Düğümün Ardına Ekleme: $O(1)$
class SinglyLinkedList:
def __init__(self):
self.head = None
def insert_at_head(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
def display(self):
current = self.head
elements = []
while current:
elements.append(str(current.data))
current = current.next
print(" -> ".join(elements) + " -> None")