Stacks & Queues In Python

1918 views Nov 21, 2024

ကျွန်တေ်ာတို့ Python Basic ကိုလေ့လာပြီဆို အသုံးဝင်တယ့် Data Structure တွေဖြစ်တဲ့ Stacks နဲ့ Queues တို့ကိုနားလည်ထားသင့်ပါတယ်။ဒီနေ့ ပို့စ်မှာတော့ ကျွန်တော်တို့ stacks and queues တွေရဲ့ အလုပ်လုပ်ပုံနဲ့ ဘယ်လိုတွေ တည်ဆောက်လို့ရတယ်ကိုလေ့လာသွားရမှာဖြစ်ပါတယ်။

Stacks

Stacks တွေက (LIFOs) လို့ခေါ်တဲ့ Last-in,First-out ပုံစံနဲ့ သွားကြပါတယ်။ဥပမာအားဖြင့်ကြည့်မယ်ဆို Python list တွေကိုကြည့်မယ်ဆိုရင်နားလည်နိုင်ပါတယ်။

>>> st = []
>>> st.append('a')
>>> st.append('b')
>>> st.append('c')
>>> st
['a', 'b', 'c']
>>> st.pop()
'c'
>>> st.pop()
'b'
>>> st
['a']
>>>

ကျွန်တော်တို့ Last-in,first-out ဆိုတဲ့ တိုင်း နောက်ဆုံးမှထည့်တယ့်ကောင်က အရင်ဦးဆုံးထွက်လာတာကိုတွေ့ရမှာပါ။

နောက်တစ်နည်းကတော့ collections.deque ကိုသုံးတာပါ။ဒါကတော့ ပိုလဲမြန်တယ် မှန်တဲ့နည်းလဲဆိုရမှာပါ။Deque တွေက stacks အနေနဲ့ကော Queues အနေနဲ့ကော အလုပ်လုပ်နိုင်ကြပါတယ်။ကျွန်တော်တို့အခု Stacks ပုံစံကိုကြည့်ရအောင်

>>> from collections import deque
>>> s = deque()
>>> s.append('a')
>>> s.append('b')
>>> s.append('c')
>>> s.pop()
'c'
>>> 

ကျွန်တော်တို့အပေါ်ကတိုင်း deque objectတည်ဆောက်ပြီး append method ကိုသုံးကာ ထည့်လိုက်ပါတယ်။ထုံးစံတိုင်း နောက်ဆုံးက ကောင်ရှေ့ဆုံးကထွက်လာပါတယ်။

နောက်တစ်မျိုးကတော့ LifoQueue ကိုသုံးတာပါ။ဒါကတော့ ကျွန်တော်တို့ thread တွေသုံးရေးတာမျိုး parallel ရေးတာမျိုးမှာ တစ်ခုနဲ့တစ်ခုဆက်သွယ်ပြီး အလုပ်လုပ်ဖို့အဆင်ပြေဆုံးပါ။

>>> from queue import LifoQueue
>>> s = LifoQueue()
>>> s.put('a')
>>> s.put('b')
>>> s.put('c')
>>> s.get()
'c'
>>> s.get()
'b'
>>> 

သူတို့က ထည့်တဲ့အခါမှာ put ကိုသုံးပြီးလိုချင်ရင်တော့ get ကိုသုံးပါတယ်။ဒါလေးပဲကွာခြားတာပါ။

Queues

Queues တွေကတော့ FIFOs လို့ခေါ်တဲ့ First-in,First-Out ပုံစံမျိုးနဲ့သွားပါတယ်။အရမ်းမကွာခြားပါဘူး List တွေနဲ့ကြည့်မယ်ဆို

>>> qu = []
>>> qu.append('a')
>>> qu.append('b')
>>> qu.append('c')
>>> qu.pop(0)
'a'
>>> qu.pop(0)
'b'
>>> qu.pop(0)
'c'
>>> 

ကျွန်တော်တို့ ရှေ့ကထည့်တဲ့ကောင် ရှေ့ဆုံးက ထွက်လာတာတွေ့ရမှာပါ။ဒါလေးပါပဲ။

မှတ်ချက်။ ။မရေးသင့်တဲ့ပုံစံပါ နှေးပါတယ်အရမ်း။

အောက်ကတော့collections.deque ကိုသုံးရေးတာပါ။ကျွန်တော်ပြောခဲ့ပါတယ် stack ကော queue  အနေနဲ့သုံးလို့ရပြီး မြန်တယ်လို့ပြောခဲ့ပါတယ်။

>>> from collections import deque
>>> s = deque()
>>> s.append('a')
>>> s.append('b')
>>> s.append('c')
>>> s.popleft()
'a'
>>> 

ဒီနည်းကတော့ queue ကိုသုံးပြီးရေးတာပါ။

>>> from queue import Queue
>>> qu = Queue()
>>> qu.put('a')
>>> qu.put('b')
>>> qu.put('c')
>>> qu.get()
'a'
>>> 

ကျွန်တော်တို့ ဒီနောက်ဆုံးနည်းသည် Thread Communication မှာအသုံးအရမ်းဝင်ပါတယ်။ဥပမာ မိတ်ဆွေရဲ့ web crawler မှာ thread တစ်ခုက url list တွေကိုစုပေးပြီး နောက် thread တစ်ခုက အဲ့urlကို လိုက်scrape လုပ်တဲ့အခါမျိုး တစ်ခြား exampleတွေလဲအများကြီးပါ အဲ့လိုတွေမှာအသုံးဝင်ပါတယ်။

အားလုံးကိုကျေးဇူးတင်ပါတယ်။