Pozisyonel Liste (Positional List)
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.