လွယ်လွယ်ပြောရရင် Linked List ဆိုတာ Data တွေကို တစ်ခုနဲ့တစ်ခု ချိတ်ဆက်ပြီး စီထားတဲ့ ပုံစံပါ။ List ပုံမှန်လိုပဲ အစီအစဉ်အတိုင်း Data တွေကို သိမ်းထားတယ်၊ ဒါပေမယ့် သိမ်းတဲ့နည်းက မတူဘူး။ Python ရဲ့ List က Data တွေကို ကပ်လျက် တစ်တန်းတည်း စီထားတာဆိုရင် Linked List ကတော့ Data တစ်ခုချင်းစီကို သီးသန့် “အထုပ်” လေးတွေအဖြစ် ထားပြီး တစ်ခုက နောက်တစ်ခုကို လက်ညှိုးထိုးပြထားတာပါ။

ကျွန်တော် ဒါကို ရထားနဲ့ ယှဉ်ပြီးမှတ်ထားတယ်။ ရထားတစ်စင်းမှာ တွဲတွေက တစ်ခုနဲ့တစ်ခု ချိတ်ထားတယ်။ ပထမတွဲက ဒုတိယတွဲကို ချိတ်တယ်၊ ဒုတိယက တတိယကို ချိတ်တယ်၊ ဒီလိုနဲ့ ဆက်သွားတယ်။ တွဲအသစ်တစ်တွဲကို အလယ်မှာ ထည့်ချင်ရင် ချိတ်နှစ်ခုကိုပဲ ဖြုတ်ပြီး ပြန်ချိတ်ရုံပဲ။ တွဲတွေအားလုံးကို ရွှေ့စရာမလိုဘူး။ Linked List လည်း ဒီအတိုင်းပဲ။ Data တစ်ခုချင်းစီကို Node လို့ ခေါ်တယ်။ Node တစ်ခုမှာ အပိုင်းနှစ်ပိုင်း ပါတယ် — တစ်ခုက တကယ့် Data (ဥပမာ ဂဏန်း ၁၀၊ စာလုံး “A”)၊ နောက်တစ်ခုက နောက် Node ဘယ်မှာရှိလဲဆိုတဲ့ လိပ်စာ (Next Pointer) ပါ။

Linked List နဲ့ Python List ဘာကွာလဲ?

Python List အကြောင်း အရင်က ရေးခဲ့ဖူးပါတယ်။ List က Data တွေကို Memory ထဲမှာ ကပ်လျက်စီထားတယ်။ ဒါကြောင့် အလယ်က Data တစ်ခုကို ဖတ်ချင်ရင် ချက်ချင်း ခုန်သွားလို့ရတယ် — List[2] ဆိုပြီး နေရာနံပါတ်နဲ့ တိုက်ရိုက်ယူလို့ရတယ်။ ဒါက မြန်တယ်။ ဒါပေမယ့် အလယ်မှာ Data အသစ်ထည့်ချင်ရင်တော့ နောက်က Data တွေအားလုံးကို တစ်နေရာစီ ရွှေ့ရတယ်။ လူများတဲ့ တန်းစီရာမှာ အလယ်ကနေ ဝင်ဖို့ လူအားလုံးကို နောက်ဆုတ်ခိုင်းရသလိုပေါ့။

Linked List ကတော့ ပြောင်းပြန်ပါ။

အလယ် (သို့) အစမှာ Data အသစ်ထည့်တာ မြန်တယ်။ ချိတ်နှစ်ခုကိုပဲ ဖြုတ်ပြန်ချိတ်ရုံပဲ၊ ကျန်တာကို ရွှေ့စရာမလိုဘူး။
ဒါပေမယ့် Data တစ်ခုကို ရှာဖို့က နှေးတယ်။ နေရာနံပါတ်နဲ့ ခုန်သွားလို့မရဘူး။ ပထမ Node ကနေ စပြီး တစ်ခုချင်းစီ လိုက်ကြည့်ရတယ်။ ရထားရဲ့ ပဉ္စမတွဲကို ရောက်ဖို့ ပထမတွဲကနေ တွဲတစ်ခုချင်း ဖြတ်သွားရသလိုပေါ့။
Memory မှာလည်း Data တွေက နေရာအနှံ့မှာ ရှိနိုင်တယ်။ ကပ်လျက်ဖြစ်စရာမလိုဘူး။ Node တစ်ခုက နောက် Node ရဲ့ လိပ်စာကို သိထားရင်ကို လုံလောက်တယ်။

Python မှာ Linked List ကို ရိုးရိုးရှင်းရှင်း ဒီလိုရေးလို့ရတယ်။


class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

first = Node(10)
second = Node(20)
first.next = second

ဒီမှာ first က Data ၁၀ ပါတဲ့ Node ပါ၊ သူ့ရဲ့ next က second ကို ညွှန်ပြထားတယ်။ first.next.data လို့ ရေးရင် ၂၀ ရပါတယ်။ ဒီလိုနဲ့ Node တွေ ဆက်ချိတ်သွားရင် Linked List တစ်ခု ဖြစ်လာပါပြီ။

Linked List က ဘယ်မှာသုံးလဲ?

တကယ်သုံးနေတဲ့နေရာတွေက ကိုယ့်ပတ်ဝန်းကျင်မှာပဲ ရှိပါတယ်။

Browser ရဲ့ Back/Forward ခလုတ် — ကြည့်ခဲ့တဲ့ စာမျက်နှာတွေကို အစီအစဉ်အတိုင်း ချိတ်ထားတာပါ။ Back နှိပ်ရင် အရင် Node ကို ပြန်သွားတယ်။
Music Player ရဲ့ Playlist — သီချင်းတစ်ပုဒ်ပြီးရင် နောက်တစ်ပုဒ်ကို အလိုလို ဆက်သွားတာက Node တွေ ချိတ်ထားလို့ပါ။ သီချင်းအသစ်ကို အလယ်မှာ ထည့်တာလည်း လွယ်တယ်။
Undo/Redo — စာရိုက်တဲ့ App တွေမှာ လုပ်ခဲ့တာတွေကို အစီအစဉ်အတိုင်း မှတ်ထားပြီး နောက်ပြန်ဆုတ်တာက Linked List နဲ့ ဆင်တူတဲ့ စိတ်ကူးပါ။

Linked List မှာလည်း အမျိုးအစားတွေရှိပါတယ်။ Singly Linked List က ရှေ့ကိုပဲ ညွှန်ပြတယ် (ရထားလို)။ Doubly Linked List က ရှေ့နဲ့နောက် နှစ်ဖက်လုံး ညွှန်ပြတယ် (Back/Forward လို)။ Circular Linked List ကတော့ နောက်ဆုံး Node က ပထမ Node ကို ပြန်ချိတ်ထားတယ် — သီချင်း Playlist ကို Repeat ဖွင့်ထားသလိုပေါ့။

ဘယ်အချိန်မှာ Linked List သုံးသင့်လဲ၊ ဘယ်အချိန်မှာ သာမန် List သုံးသင့်လဲဆိုတာ ဒီလိုခွဲပါ။ Data ကို အလယ်မှာ ခဏခဏ ထည့်/ဖြုတ်လုပ်နေရင် Linked List က သင့်တော်တယ်။ Data ကို နေရာနံပါတ်နဲ့ ခဏခဏ ရှာဖွေနေရင် သာမန် List က ပိုမြန်တယ်။ Python မှာ သာမန် List က အတော်များများ အဆင်ပြေလို့ Linked List ကို ကိုယ်တိုင် သိပ်မရေးရဘူး။ ဒါပေမယ့် Interview တွေ၊ Data Structure သင်တဲ့အခါတွေမှာ Linked List က အခြေခံအကျဆုံး သင်ခန်းစာတစ်ခု ဖြစ်နေတုန်းပါ။ ဘာလို့လဲဆိုတော့ Pointer နဲ့ Node ဆိုတဲ့ စိတ်ကူးက တခြား Data Structure တွေ (Tree, Graph) ကို နားလည်ဖို့ တံခါးပေါက်ဖြစ်လို့ပါပဲ။

နောက်တစ်ခါ Playlist ထဲမှာ သီချင်းအသစ်ထည့်တိုင်း တစ်ပုဒ်ချင်း ရွှေ့စရာမလိုဘဲ နေရာဝင်သွားတာကို သတိရမိရင် Linked List ကို နားလည်သွားပြီလို့ မှတ်ပါ။ ရထားတွဲတွေ ချိတ်သလို Data တွေကို ချိတ်ထားတဲ့ ရိုးရိုးလေးပါပဲ။ 🙂

—

Avatar photo
Min SiThu
@itsmeminsithu

Software Engineer & Tech Content Creator

View all posts