Positional Doubly Linked List
Positional Doubly Linked List, pozisyonlarını takip etmek istediğiniz öğelerle çalışmanız gerektiğinde kullanabileceğiniz bir veri yapısıdır. İkili bağlı liste (Doubly Linked List) üzerine inşa edilmiştir, bu nedenle her düğüm bir sonraki düğüme ve bir önceki düğüme işaret eder.
class PositionalList: class Node: def __init__(self, element, prev, next): 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, None, None) self.trailer = self.Node(None, None, 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) def before(self, p): return self._make_position(p.node.prev) def after(self, p): return self._make_position(p.node.next) 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) def add_before(self, p, e): return self._insert_between(e, p.node.prev, p.node) def add_after(self, p, e): return self._insert_between(e, p.node, p.node.next) def delete(self, p): node = p.node node.prev.next = node.next node.next.prev = node.prev self.size -= 1 element = node.element node.prev = node.next = node.element = None return element def _insert_between(self, e, prev_node, next_node): node = self.Node(e, prev_node, next_node) prev_node.next = node next_node.prev = node self.size += 1 return self._make_position(node) def __iter__(self): cursor = self.first() while cursor: yield cursor.element() cursor = self.after(cursor)
Örnek Kullanım:
plist = PositionalList() p1 = plist.add_first(10) p2 = plist.add_after(p1, 20) p3 = plist.add_last(30) for element in plist: print(element, end=' -> ') # 10 -> 20 -> 30 -> print() plist.delete(p2) for element in plist: print(element, end=' -> ') # 10 -> 30 ->
Bu kod, Positional Doubly Linked List veri yapısının temel bir uygulamasını ve kullanımını göstermektedir. Positional Doubly Linked List, öğelerin pozisyonlarını hatırlamanızı ve bu pozisyonlara göre öğeleri eklemenizi, silmenizi ve güncellemenizi sağlar. Bu, algoritmalarda ve veri yapılarında oldukça yararlı olabilir.
0 Comments
Recommended Comments
There are no comments to display.