· EEM227

EEM227 Veri Yapıları: Java ile Bağlı Liste (Node Zinciri)

EEM227 – Veri Yapıları · 10.11.2013 · 16.10.2026

Bu yazı, Başkent Üniversitesi EEM227 Veri Yapıları dersinde (Kasım 2013) işlenen bağlı liste (linked list) örneğinin Java kodlarını içeriyor. Konu, izlencenin 3. haftasındaki "Linked Lists – Java programlama dilinde kullanımı". Örnek adım adım ilerliyor: önce tek bir düğüm, sonra elle bağlanan bir zincir, sonra bu zinciri yöneten bir liste sınıfı. Orijinal BlueJ projesi yazının sonunda 7z arşivi olarak indirilebilir.

Düğüm: Node

Her düğüm bir değer ve bir sonraki düğümü gösteren bir referans taşır.

public class Node
{
    private int value;
    private Node next;

    public int getValue()
    {
        return value;
    }
    public void setValue(int pValue)
    {
        value = pValue;
    }

    public Node getNext()
    {
        return next;
    }

    public void setNext(Node pNode)
    {
        next = pNode;
    }
}

Elle kurulan zincir

Üç düğüm oluşturulup birbirine bağlanıyor: 3 → 5 → 7.

public class NodeChainTest1
{
    public static void main()
    {
        Node n1 = new Node();
        n1.setValue(3);

        Node n2 = new Node();
        n2.setValue(5);

        Node n3 = new Node();
        n3.setValue(7);

        n1.setNext(n2);
        n2.setNext(n3);
    }
}

Liste sınıfı: MyLinkedList

Zincirin başını ve sonunu tutan, eleman sayısını sayan bir sınıf. Sona eklemede son düğümün next'i yeni düğüme bağlanıyor; başa eklemede yeni düğümün next'i eski ilk düğüme bağlanıyor.

public class MyLinkedList
{
    private Node firstNode;
    private Node lastNode;
    private int nodeCount = 0;

    public void addToLast(Node node)
    {
        if (nodeCount == 0)
        {
            firstNode = node;
            lastNode = node;
            nodeCount++;
        }
        else
        {
          Node temp = lastNode;
          temp.setNext(node);
          lastNode = node;
          nodeCount++;
        }
    }

    public Node getFirstNode()
    {
        return firstNode;
    }
    public Node getLastNode()
    {
        return lastNode;
    }
    public int size()
    {
        return nodeCount;
    }

    public void addToFront(Node node)
    {
        if (nodeCount == 0)
        {
            firstNode = node;
            lastNode = node;
            nodeCount++;
        }
        else
        {
            Node temp = firstNode;
            node.setNext(firstNode);
            firstNode = node;
            nodeCount++;
        }
    }
}

Düğümleri gizleyen sürüm: MyLinkedListHideNodeInt

İkinci sürümde liste dışarıya Node değil, doğrudan int alıyor; düğüm oluşturma işi sınıfın içine saklanıyor. Kullanıcı artık bağlı listenin iç yapısını bilmek zorunda değil. Bu sürümde ilk elemanı silen removeFirst de var.

public class MyLinkedListHideNodeInt
{
    private Node firstNode;
    private Node lastNode;
    private int nodeCount = 0;

    public void addToLast(int sayi)
    {
        Node node = new Node();
        node.setValue(sayi);

        if (nodeCount == 0)
        {
            firstNode = node;
            lastNode = node;
            nodeCount++;
        }
        else
        {
          Node temp = lastNode;
          temp.setNext(node);
          lastNode = node;
          nodeCount++;
        }
    }

    public int size()
    {
        return nodeCount;
    }

    public void addToFront(int sayi)
    {
        Node node = new Node();
        node.setValue(sayi);

        if (nodeCount == 0)
        {
            firstNode = node;
            lastNode = node;
            nodeCount++;
        }
        else
        {
            Node temp = firstNode;
            node.setNext(firstNode);
            firstNode = node;
            nodeCount++;
        }
    }

    public void removeFirst()
    {
        if (nodeCount == 0)
        {
            return;
        }
        else if (nodeCount == 1)
        {
            nodeCount--;
            firstNode = null;
            lastNode = null;
        }
        else
        {
            Node  newFirstNode = firstNode.getNext();
            firstNode = newFirstNode;
            nodeCount--;
        }
    }
}

removeFirst ilk düğümü silmek için yalnızca firstNode'u bir sonrakine kaydırıyor; eski ilk düğüme artık hiçbir referans kalmadığı için çöp toplayıcı onu temizliyor. Bağlı listenin diziden farkı tam olarak bu: başa ekleme ve baştan silme, eleman sayısından bağımsız olarak sabit sürede yapılabiliyor.

LinkedListNodeChain.7z

7z arşivi · 3 KB · 10.11.2013

⬇ (3 KB)