لیستی بەستراو (Linked List)
پێناسە و چەمکی سەرەکی
لیستی بەستراو (Linked List) پێکهاتەیەکی داتایە کە کۆمەڵێک نۆد (Node) لەخۆدەگرێت کە بە شێوەیەکی زنجیرەیی پەیوەندییان پێکەوە هەیە. هەر نۆدێک دوو بەشی سەرەکی هەیە:
- بەشی داتا: بەهاکە هەڵدەگرێت
- بەشی ئاماژە (Pointer): ئاماژە بۆ نۆدی داهاتوو دەکات
بەپێچەوانەی ئەڕەی (Array)، نۆدەکانی لیستی بەستراو پێویست ناکات بەشێوەیەکی بەردەوام لە بیرگەدا هەڵبگیرێن، بەڵکو دەکرێت لە هەر شوێنێکی بیرگەدا هەڵبگیرێن و لە ڕێگەی ئاماژەکانەوە پەیوەندییان پێکەوە هەبێت.
جۆرەکانی لیستی بەستراو
1. لیستی بەستراوی یەک لایەن (Singly Linked List)
- هەر نۆدێک تەنها یەک ئاماژەی هەیە کە بەرەو نۆدی داهاتوو دەڕوات
- نۆدی کۆتایی ئاماژە بۆ NULL دەکات
- تەنها بەرەو پێشەوە دەتوانرێت بەستنەوە بکرێت
2. لیستی بەستراوی دوو لایەن (Doubly Linked List)
- هەر نۆدێک دوو ئاماژەی هەیە:
- یەکێک بۆ نۆدی داهاتوو (next)
- یەکێک بۆ نۆدی پێشوو (previous)
- دەکرێت بەرەو پێشەوە و بەرەو دواوە پەیمان بکرێت
٣. لیستی بەستراوی بازنەیی (Circular Linked List)
- نۆدی کۆتایی ئاماژە بۆ نۆدی سەرەتا دەکات لە جیاتی NULL
- دەکرێت یەک لایەن یان دوو لایەن بێت
کردارە سەرەکییەکان لەسەر linked list
١. زیادکردنی نۆد
-
زیادکردن لە سەرەتاوە: O(1) - خێراترین کردارە
- نۆدی نوێ دروست بکە
- ئاماژەی نۆدەکە بۆ سەری لیست بگۆڕە
- سەری لیست بگۆڕە بۆ نۆدی نوێ
-
زیادکردن لە کۆتاییەوە: O(n) لە لیستی یەک لایەن، O(1) ئەگەر ئاماژەی کۆتایی هەبێت
- نۆدی نوێ دروست بکە
- بەدوای دوا نۆدی لیستدا بگەڕێ
- ئاماژەی دوا نۆد بگۆڕە بۆ نۆدی نوێ
-
زیادکردن لە شوێنێکی دیاریکراو: O(n)
- بەدوای شوێنی دیاریکراودا بگەڕێ
- ئاماژەکان بەشێوەیەک بگۆڕە کە نۆدی نوێ لە نێوان نۆدی پێشوو و داهاتوو بێت
٢. سڕینەوەی نۆد
-
سڕینەوە لە سەرەتاوە: O(1)
- ئاماژەی سەری لیست بگۆڕە بۆ نۆدی دووەم
- بیرگەی نۆدی سەرەتا ئازاد بکە
-
سڕینەوە لە کۆتاییەوە: O(n) لە لیستی یەک لایەن
- بەدوای نۆدی پێش-کۆتایی بگەڕێ
- ئاماژەی نۆدی پێش-کۆتایی بگۆڕە بۆ NULL
- بیرگەی نۆدی کۆتایی ئازاد بکە
-
سڕینەوە لە شوێنێکی دیاریکراو: O(n)
- بەدوای نۆدەکە و نۆدی پێشووی بگەڕێ
- ئاماژەی نۆدی پێشوو بگۆڕە بۆ نۆدی داهاتووی ئەو نۆدەی دەسڕدرێتەوە
- بیرگەی نۆدەکە ئازاد بکە
٣. گەڕان
- تێچووی کاتی: O(n) - پێویستە بە شێوەی زنجیرەیی بە هەموو نۆدەکاندا بڕۆیت
- پرۆسە:
- دەست پێبکە لە سەری لیست
- بە ئاماژەی داهاتوودا بڕۆ هەتا ئەو بەهایەی بەدوایدا دەگەڕێیت دەدۆزیتەوە یان دەگەیتە کۆتایی
کۆدی لیستی بەستراو بە پایسۆن
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
# زیادکردن لە کۆتاییەوە
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
return
last = self.head
while last.next:
last = last.next
last.next = new_node
# زیادکردن لە سەرەتاوە
def prepend(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
# نیشاندانی لیست
def display(self):
current = self.head
while current:
print(current.data, end=" -> ")
current = current.next
print("NULL")
# گەڕان بەدوای بەهایەک
def search(self, key):
current = self.head
while current:
if current.data == key:
return True
current = current.next
return False
# سڕینەوەی نۆدێک بەپێی بەها
def delete(self, key):
current = self.head
# ئەگەر سەری لیست بێت
if current and current.data == key:
self.head = current.next
current = None
return
# گەڕان بەدوای نۆدەکە
prev = None
while current and current.data != key:
prev = current
current = current.next
# ئەگەر نۆدەکە نەدۆزرایەوە
if current is None:
return
# جیاکردنەوەی نۆدەکە لە لیست
prev.next = current.next
current = None
باشی و خراپی لیستی بەستراو
باشییەکان
- زیادکردن و سڕینەوەی دینامیکی: بەپێچەوانەی ئەڕەی، قەبارەی لیستی بەستراو دینامیکیە و پێویست ناکات پێشتر قەبارەکەی دیاری بکەیت
- زیادکردن و سڕینەوەی ئاسان: لە سەرەتا و کۆتایی لیست زۆر خێرایە (O(1) بۆ سەرەتا)
- بەکارهێنانی کاریگەری بیرگە: تەنها ئەو بیرگەیە بەکاردەهێنێت کە پێویستە
- جێبەجێکردنی ئاسان: بۆ زۆر پێکهاتەی داتای تر وەک stack و queue بەکاردێت
خراپییەکان
- دەستگەیشتنی ڕاستەوخۆ نییە: پێویستە بە شێوەی زنجیرەیی تێپەڕ بیت، ناتوانیت ڕاستەوخۆ بگەیتە نۆدێکی دیاریکراو
- تێچووی بیرگەی زیاتر: هەر نۆدێک پێویستی بە بیرگەی زیاترە بۆ هەڵگرتنی ئاماژەکان
- پەیمانکردنی دوو لایەن ئاڵۆزە: بەتایبەتی لە لیستی دوو لایەن، ئاڵۆزی زیاترە لە کاتی گۆڕینی پێکهاتەکەدا
بەکارهێنانەکانی لیستی بەستراو
- لەبەرگرتنەوەی کردارەکان: لیستی کردارە نەهێڵکارەکان (Undo functionality) لە پرۆگرامەکان
- پێکهاتەکانی تر: وەک بناغە بۆ جێبەجێکردنی ستاک، کیو، هاش تەیبڵ، گراف
- سیستەمی بەڕێوەبردنی بیرگە: فایل سیستەم و سیستەمی بەڕێوەبردنی پرۆسێسەکان
- ئەلگۆریتمەکانی ڕێکخستن: وەک Merge Sort
لیستی بەستراو یەکێکە لە گرنگترین پێکهاتەکانی داتا کە خوێندکارانی زانستی کۆمپیوتەر دەبێت بەتەواوەتی لێیان تێبگەن، چونکە بناغەی تێگەیشتنی زۆربەی پێکهاتە ئاڵۆزترەکانی داتایە.
