Jump to content
  • entries
    33
  • comments
    0
  • views
    1,227

Pozisyonel Liste (Positional List)


Doğuhan ELMA

22 views

Pozisyonel Liste (Positional List) soyut veri tipi (ADT), öğelerin pozisyonlarını veya yerlerini temsil etmeyi kolaylaştıran bir veri yapısıdır. Bu yapı, öğeleri hatırlayarak, onları düzenli bir şekilde eklemeye, çıkarmaya ve güncellemeye olanak tanır.

Pozisyonel Liste ADT'si, genellikle ikili bağlı listeler gibi veri yapıları kullanılarak uygulanır ve aşağıdaki ana işlemleri içerir:

İlk Pozisyonu Bulma: Listenin ilk pozisyonunu verir.

Son Pozisyonu Bulma: Listenin son pozisyonunu verir.

Sonraki Pozisyonu Bulma: Belirli bir pozisyondan sonraki pozisyonu verir.

Önceki Pozisyonu Bulma: Belirli bir pozisyondan önceki pozisyonu verir.

Eleman Ekleme: Belirli bir pozisyona bir eleman ekler.

Eleman Silme: Belirli bir pozisyondaki bir elemanı siler.

Elemanı Değiştirme: Belirli bir pozisyondaki bir elemanı değiştirir.

Pozisyonun Elemanını Alma: Belirli bir pozisyondaki elemanı alır.

Pozisyon Listesinin Uzunluğunu Alma: Pozisyonel listenin uzunluğunu verir.

Pozisyon Listesinin Boş Olup Olmadığını Kontrol Etme: Pozisyonel listenin boş olup olmadığını kontrol eder.

Pozisyonel Liste ADT'sinin Python'da Uygulanması

Bir pozisyonel liste uygulaması genellikle, öğe ile birlikte bir pozisyonun durumunu saklayan bir iç sınıf içerir. Bu, pozisyonel listeye spesifik bir işlevsellik ekler ve kullanıcıya pozisyonu referans olarak sağlar.

Aşağıda, bir Pozisyonel Liste sınıfının temel bir örneğini bulacaksınız. Bu örnek, pozisyonları temsil etmek için ikili bağlı bir liste kullanır:

class PositionalList:
    class _Node:
        def __init__(self, element, prev=None, next=None):
            self._element = element
            self._prev = prev
            self._next = next

    class Position:
        def __init__(self, container, node):
            self._container = container
            self._node = node

        def element(self):
            return self._node._element

    def __init__(self):
        self._header = self._Node(None)
        self._trailer = self._Node(None)
        self._header._next = self._trailer
        self._trailer._prev = self._header
        self._size = 0

    def _make_position(self, node):
        return self.Position(self, node) if node is not self._header and node is not self._trailer else None

    def first(self):
        return self._make_position(self._header._next)

    def last(self):
        return self._make_position(self._trailer._prev)

        # Eleman ekleme
    def add_after(self, p, e):
        node = p._node
        return self._insert_between(e, node, node._next)

    def add_before(self, p, e):
        node = p._node
        return self._insert_between(e, node._prev, node)

    def add_first(self, e):
        return self._insert_between(e, self._header, self._header._next)

    def add_last(self, e):
        return self._insert_between(e, self._trailer._prev, self._trailer)

    # Özel ekleme yardımcı metodu
    def _insert_between(self, e, predecessor, successor):
        node = self._Node(e, predecessor, successor)
        predecessor._next = node
        successor._prev = node
        self._size += 1
        return self._make_position(node)

    # Eleman silme
    def delete(self, p):
        node = p._node
        predecessor = node._prev
        successor = node._next
        predecessor._next = successor
        successor._prev = predecessor
        self._size -= 1
        element = node._element
        node._prev = node._next = node._element = None
        return element

    # Eleman güncelleme
    def replace(self, p, e):
        node = p._node
        old_value = node._element
        node._element = e
        return old_value

    # Listeyi yazdırmak için
    def __str__(self):
        result = []
        node = self._header._next
        while node._next:
            result.append(str(node._element))
            node = node._next
        return ' -> '.join(result)

 

Uygulama:

plist = PositionalList()

# Elemanlar ekleniyor
p1 = plist.add_first(10)
p2 = plist.add_last(20)
p3 = plist.add_after(p1, 15)

print(plist) # 10 -> 15 -> 20

# Elemanlar güncelleniyor
plist.replace(p1, 5)
print(plist) # 5 -> 15 -> 20

# Elemanlar siliniyor
plist.delete(p2)
print(plist) # 5 -> 15

Bu örnek, PositionalList sınıfının temel işlevlerini göstermektedir. İlk eleman ekleme, son eleman ekleme, belirli bir pozisyondan sonraki veya önceki yere ekleme gibi işlevler kullanılarak liste oluşturulur. Ayrıca, belirli bir pozisyondaki bir öğeyi silmek veya değiştirmek de mümkündür.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...