گولانگ میں قطار کیا ہے؟

Gwlang My Qtar Kya



گو ایک مقبول پروگرامنگ زبان ہے جس کی کارکردگی، استعمال میں آسانی، اور موافقت کی وجہ سے تعریف کی جاتی ہے۔ ٹولز اور لائبریریوں کے بھرپور سیٹ کے ساتھ، Go ڈویلپرز کو طاقتور اور موثر سافٹ ویئر ایپلی کیشنز بنانے کے لیے ضروری وسائل فراہم کرتا ہے۔ گو کے پاس نہیں ہے۔ دم ڈیٹا سٹرکچر کے طور پر اس کی معیاری لائبریری میں، انہیں مختلف طریقوں سے لاگو کیا جا سکتا ہے۔ کے تصور کے بارے میں بات کریں گے۔ دم اور اس ٹیوٹوریل میں ان کو کیسے نافذ کیا جائے۔

ایک قطار کیا ہے؟

دم ڈیٹا ڈھانچے ہیں جو پہلے سے طے شدہ ترتیب میں عناصر کو ذخیرہ کرنے اور بازیافت کرنے کے لیے استعمال ہوتے ہیں۔ یہ ایک لکیری ڈیٹا ڈھانچہ ہے جو اسٹیک سے ملتا ہے اور اس پر عمل کرتا ہے۔ FIFO (پہلے ان، پہلے آؤٹ) حکمرانی اس کا موازنہ انتظار کی فہرست یا اس لائن سے کیا جا سکتا ہے جہاں پہنچنے والے پہلے شخص کی خدمت پہلے کی جاتی ہے۔ موجودہ اجزاء کے سامنے سے گرا دیا جاتا ہے قطار ، اور پچھلے حصے میں نئے عناصر شامل کیے گئے ہیں۔

گولانگ میں قطار کا نفاذ

ایک کا نفاذ قطار in Go آسان اور موثر ہے اور اسے درج ذیل چار طریقوں سے لاگو کیا جا سکتا ہے۔







1: سلائسس

گو میں، اے ٹکڑا ایک متحرک صف ہے جو سائز میں بدل سکتی ہے۔ لاگو کرنا a قطار استعمال کرتے ہوئے a ٹکڑا ، ہم عناصر کو کے پچھلے حصے میں شامل کرسکتے ہیں۔ ٹکڑا بلٹ ان اپینڈ فنکشن کا استعمال کرتے ہوئے اور عناصر کو سامنے سے ہٹا دیں۔ ٹکڑا سلائسنگ کا استعمال کرتے ہوئے.



یہ نقطہ نظر بنانا آسان ہے اور گو کے بلٹ ان سلائسز کی بدولت جوڑنے اور سلائس کرنے کے آپریشنز کے لیے اچھی کارکردگی پیش کرتا ہے۔ تاہم، سلائسنگ کا طریقہ، جس میں عناصر کو ایک نئی بنیادی صف میں کاپی کرنا شامل ہے، ناکارہ ہو سکتا ہے اگر قطار توسیع کرتا ہے اور بار بار dequeuing آپریشن کی ضرورت ہے.



درج ذیل کوڈ کی وضاحت کرتا ہے۔ قطار گو میں ایک سلائس کا استعمال کرتے ہوئے عمل درآمد۔





اہم پیکیج

درآمد 'fmt'

فنک مین ( ) {

قطار := بنانا ( [ ] انٹرفیس { } ، 0 )

قطار = شامل کریں ( قطار ، 'انگریزی' )

قطار = شامل کریں ( قطار ، 'اردو' )

قطار = شامل کریں ( قطار ، 'ریاضی' )

اگر صرف ( قطار ) > 0 {

آئٹم := قطار [ 0 ]

قطار = قطار [ 1 : ]

ایف ایم ٹی پرنٹ ایل این ( آئٹم )

}

اگر صرف ( قطار ) == 0 {

ایف ایم ٹی پرنٹ ایل این ( 'قطار خالی ہے' )

} اور {

ایف ایم ٹی پرنٹ ایل این ( قطار )

}

}

اوپر والا گو کوڈ سیدھا سادہ بنانے کے لیے ایک سلائس کا استعمال کرتا ہے۔ قطار ڈیٹا کی ساخت. دی شامل کریں() فنکشن کا استعمال عناصر میں صف بندی کرنے کے لیے کیا جاتا ہے۔ قطار slice، اور ایک سلائس آپریشن جو ابتدائی عنصر کو ہٹاتا ہے ان کو dequeue کرنے کے لیے استعمال کیا جاتا ہے۔ کے ساتھ fmt.Println() , dequeued عنصر پرنٹ کیا جاتا ہے. کوڈ پھر استعمال کرتا ہے۔ صرف() اس بات کا تعین کرنے کے لیے فنکشن کہ آیا قطار خالی ہے، اور اگر یہ ہے، تو یہ لکھتا ہے ' قطار fmt.Println() فنکشن کا استعمال کرتے ہوئے خالی ہے۔

آؤٹ پٹ



2: منسلک فہرستیں۔

فہرست میں درج ذیل نوڈ پر ایک قدر اور ایک پوائنٹر رکھنے والے نوڈس ایک منسلک فہرست بناتے ہیں۔ دو پوائنٹرز کے ساتھ، ایک فہرست کے سامنے (سر) کی طرف اشارہ کرتا ہے اور دوسرا پیچھے (دم) کی طرف اشارہ کرتا ہے، ہم ایک کو نافذ کر سکتے ہیں۔ قطار ایک منسلک فہرست کا استعمال کرتے ہوئے. قطار سے کسی آئٹم کو ہٹانے (ڈیکیونگ) میں فہرست کے سامنے والے نوڈ کو ہٹانا شامل ہے جب کہ قطار میں کسی آئٹم کو شامل کرنے (انقطاع) میں فہرست کے پچھلے حصے میں ایک نیا نوڈ شامل کرنا شامل ہے۔

یہ طریقہ کارآمد قطار بندی اور ڈیکیونگ آپریشنز کی اجازت دیتا ہے کیونکہ صرف سر اور ٹیل پوائنٹرز کو تبدیل کرنے کی ضرورت ہوتی ہے، جیسا کہ سلائس پر مبنی حل کے برعکس جہاں عناصر کو کاپی کرنے کی ضرورت ہوگی۔

ایک کو لاگو کرنے کے لیے ایک منسلک فہرست استعمال کریں۔ قطار ذیل میں فراہم کردہ کوڈ کا استعمال کرتے ہوئے:

اہم پیکیج

درآمد 'fmt'

نوڈ ٹائپ کریں۔ ساخت {

قدر انٹرفیس { }

اگلے * نوڈ

}

قطار ٹائپ کریں۔ ساخت {

سر * نوڈ

دم * نوڈ

}

فنک مین ( ) {

قطار := اور قطار { سر : صفر ، دم : صفر }

نیا نوڈ := اور نوڈ { قدر : 'انگریزی' ، اگلے : صفر }

قطار. دم = نیا نوڈ

قطار. سر = نیا نوڈ

نیا نوڈ = اور نوڈ { قدر : 'اردو' ، اگلے : صفر }

قطار. دم . اگلے = نیا نوڈ

قطار. دم = نیا نوڈ

نیا نوڈ = اور نوڈ { قدر : 'ریاضی' ، اگلے : صفر }

قطار. دم . اگلے = نیا نوڈ

قطار. دم = نیا نوڈ

اگر قطار. سر != صفر {

آئٹم := قطار. سر . قدر

قطار. سر = قطار. سر . اگلے

ایف ایم ٹی پرنٹ ایل این ( آئٹم )

}

اگر قطار. سر == صفر {

ایف ایم ٹی پرنٹ ایل این ( 'قطار خالی ہے' )

}

}

نوڈ کا ڈھانچہ قطار میں موجود ہر آئٹم کی نمائندگی کرتا ہے اور اس میں دو فیلڈز ہوتے ہیں: آئٹم کی قدر کو ذخیرہ کرنے کے لیے ایک ویلیو فیلڈ، اور اگلی فیلڈ قطار میں اگلی آئٹم کی طرف اشارہ کرنے کے لیے۔ قطار کا ڈھانچہ بالترتیب قطار کے اگلے اور پچھلے حصے پر نظر رکھنے کے لیے سر اور دم کی خصوصیات کا استعمال کرتا ہے۔ دی دم کی پہلی شے ہیڈ پراپرٹی سے ظاہر ہوتی ہے، جبکہ اس کی آخری آئٹم ٹیل پراپرٹی سے ظاہر ہوتی ہے۔

سر اور دم کے پیرامیٹرز ابتدائی طور پر سیٹ کیے گئے ہیں۔ صفر جب ایک نیا قطار مین () فنکشن میں قائم ہے۔ تین نوڈس کو شامل کرنے کے لیے ہیڈ اور ٹیل پوائنٹرز کو اپ ڈیٹ کیا جاتا ہے۔ قطار اقدار کے ساتھ 'انگریزی'، 'اردو'، اور 'ریاضی'. دی 'انگریزی' آئٹم پھر ہے 'قطعی' (ہٹا دیا گیا) کے سامنے سے قطار اس کی قدر ظاہر کرکے اور ہیڈ پوائنٹر کو درج ذیل نوڈ میں آگے بڑھا کر قطار . dequeuing کے بعد، اگر سر خالی ہو جاتا ہے، تو اس کا مطلب ہے کہ قطار خالی ہے، اور پیغام ' قطار خالی ہے' چھپی ہوئی ہے۔

آؤٹ پٹ

3: ڈھانچے

گو میں، آپ ایک حسب ضرورت ڈیٹا ڈھانچہ بنا سکتے ہیں جسے a ساخت نمائندگی کرنا قطار . یہ ساخت ذخیرہ کرنے کے لیے فیلڈز ہو سکتے ہیں۔ قطار اشیاء کو شامل کرنے اور ہٹانے کے عناصر اور طریقے، چیک کریں کہ آیا قطار خالی ہے، اور موجودہ قطار کا سائز حاصل کریں۔

بنانے کا یہ طریقہ قطار ان گو استعمال میں آسان طریقوں کے ساتھ ایک آسان اور انکیپسلیٹڈ نفاذ پیش کرتا ہے جسے مزید خصوصیات کے ساتھ بڑھایا اور اپنی مرضی کے مطابق بنایا جا سکتا ہے۔ یہ ایک لچکدار نقطہ نظر ہے جو نفاذ میں تبدیلیاں کرنے یا جب بھی ضرورت ہو نئی صلاحیتوں کو شامل کرنے کی اجازت دیتا ہے۔

ایک رواج بنانا ساخت طریقوں کے ساتھ دیگر دو طریقوں کے مقابلے میں اضافی کوڈ لکھنا شامل ہے، جس سے پیچیدگی بڑھ سکتی ہے۔ تاہم، یہ اس کے نفاذ پر زیادہ لچک اور کنٹرول بھی فراہم کرتا ہے۔ قطار .

مندرجہ ذیل مثال a کی نمائندگی کرنے کے لیے ڈیٹا کا ڈھانچہ بنانا دکھاتی ہے۔ قطار جاؤ میں

اہم پیکیج

درآمد 'fmt'

قطار ٹائپ کریں۔ ساخت {
اشیاء [ ] انٹرفیس { }
}

func ( q * قطار ) قطار ( آئٹم انٹرفیس { } ) {
q اشیاء = شامل کریں ( q اشیاء ، آئٹم )
}

func ( q * قطار ) ڈیکیو ( ) انٹرفیس { } {
اگر صرف ( q اشیاء ) == 0 {
واپسی صفر
}
آئٹم := q اشیاء [ 0 ]
q اشیاء = q اشیاء [ 1 : ]
واپسی آئٹم
}

func ( q * قطار ) خالی ہے ( ) bool {
واپسی صرف ( q اشیاء ) == 0
}

func ( q * قطار ) سائز ( ) int {
واپسی صرف ( q اشیاء )
}


فنک مین ( ) {

قطار := اور قطار { اشیاء : بنانا ( [ ] انٹرفیس { } ، 0 ) }

قطار. قطار ( 'انگریزی' )
قطار. قطار ( 'اردو' )
قطار. قطار ( 'ریاضی' )

آئٹم := قطار. ڈیکیو ( )
ایف ایم ٹی پرنٹ ایل این ( آئٹم )
اگر قطار. خالی ہے ( ) {
ایف ایم ٹی پرنٹ ایل این ( 'قطار خالی ہے' )
}

سائز := قطار. سائز ( )
ایف ایم ٹی پرنٹ ایل این ( 'قطار کا سائز:' ، سائز )
}

مندرجہ بالا کوڈ میں، ایک آئٹم کے ذریعے شے کے ٹکڑے میں شامل کیا جاتا ہے۔ قطار() طریقہ، جو اسے آخر تک لے جاتا ہے۔ قطار . مندرجہ ذیل فرسٹ ان، فرسٹ آؤٹ (FIFO) اصول، Dequeue() طریقہ ایک آئٹم کو سامنے سے باہر لے جاتا ہے۔ قطار اور اسے واپس کرتا ہے. آئٹم کے ٹکڑے کی لمبائی کے حصے کے طور پر چیک کی جاتی ہے۔ خالی ہے() یہ دیکھنے کے لیے طریقہ چیک کریں کہ آیا قطار خالی ہے. آئٹمز سلائس کی لمبائی واپس کر کے، سائز () طریقہ کرنٹ واپس کرتا ہے۔ دم کی سائز

main() فنکشن استعمال کرتا ہے۔ قطار کا ڈھانچہ ایک نیا بنانے کے لئے قطار ، اس میں عناصر شامل کریں، اس سے اشیاء کو ہٹا دیں، اس بات کا تعین کریں کہ آیا قطار خالی ہے، اور اس کے سائز کا حساب لگائیں۔

آؤٹ پٹ

4: چینلز

گو میں، بلٹ ان چینل کی قسم کو لاگو کرنے کے لیے استعمال کیا جا سکتا ہے۔ قطار ڈیٹا کی ساخت. کسی بھی وقت قطار میں لگے عناصر کی تعداد کو محدود کرنے کے لیے چینل کو بفر سائز کے ساتھ بنایا جا سکتا ہے۔ میں ایک عنصر شامل کرنے کے لیے قطار ، اسے استعمال کرکے چینل کو بھیجا جاسکتا ہے۔ <- آپریٹر، قطار سے کسی عنصر کو ہٹانے کے لیے، اسے اسی آپریٹر کا استعمال کرتے ہوئے چینل سے موصول کیا جا سکتا ہے۔

یہ نقطہ نظر ان حالات میں کافی کارآمد ثابت ہوسکتا ہے جہاں تک ہم آہنگی رسائی قطار کی ضرورت ہے، کیونکہ چینلز ایک ساتھ استعمال کے لیے فطری طور پر محفوظ ہیں۔

یہ یاد رکھنا ضروری ہے کہ گو چینلز ٹائپ کیے گئے ہیں۔ اس کا مطلب ہے کہ آپ چینل کے ذریعے صرف ایک مخصوص قسم کی اقدار بھیج سکتے ہیں، اور آپ چینل سے صرف اسی قسم کی قدریں وصول کر سکتے ہیں۔

یہ ایک مثال ہے کہ ایک چینل کو بنانے کے لیے کس طرح استعمال کیا جائے۔ قطار گو میں ڈیٹا کا ڈھانچہ۔

اہم پیکیج

درآمد (
'fmt'
'وقت'
)

قطار ٹائپ کریں۔ ساخت {
اشیاء چین انٹرفیس { }
}

funcNewQueue ( ) * قطار {


q := اور قطار {

اشیاء : بنانا ( چان انٹرفیس { } ) ،
}
جاؤ q. عمل کی اشیاء ( )
واپسی q
}

func ( q * قطار ) عمل کی اشیاء ( ) {
کے لیے آئٹم := رینج q اشیاء {
اگر آئٹم == 'انگریزی' {
ایف ایم ٹی پرنٹ ایل این ( 'ڈیکیوڈ:' ، آئٹم )
}
}
}


func ( q * قطار ) قطار ( آئٹم انٹرفیس { } ) {

q اشیاء <- آئٹم

}

funcmain ( ) {
قطار := نئی قطار ( )

قطار. قطار ( 'انگریزی' )
قطار. قطار ( 'اردو' )
قطار. قطار ( 'ریاضی' )

وقت . سونا ( 2 * وقت . دوسرا )
}

مندرجہ بالا کوڈ تخلیق کرتا ہے a قطار کا ڈھانچہ ایک ہی فیلڈ کے ساتھ اشیاء جس کا ایک چینل ہے۔ انٹرفیس{} قسم دی نئی قطار() فنکشن کی ایک نئی مثال پیدا کرتا ہے۔ قطار اور اس کی ابتدا کرتا ہے۔ 'اشیاء' ایک نئے غیر بفر شدہ چینل کے ساتھ فیلڈ۔ کا استعمال کرتے ہوئے قطار میں شامل آئٹمز پر کارروائی کرنے کے لیے یہ ایک نیا گوروٹین بھی شروع کرتا ہے۔ پراسیس آئٹمز() فنکشن دی پراسیس آئٹمز() فنکشن چیک کرتا ہے کہ آیا موصولہ آئٹم کے برابر ہے۔ 'انگریزی' اور صرف اس آئٹم کے لیے کنسول پر ایک پیغام پرنٹ کرتا ہے۔ دی قطار() فنکشن کو قطار میں نئی ​​اشیاء شامل کرنے کے لیے استعمال کیا جاتا ہے۔

آؤٹ پٹ

نتیجہ

گو میں قطار ایک ضروری ڈیٹا ڈھانچہ ہے جو عناصر کو ایک مخصوص ترتیب میں ذخیرہ کرنے اور بازیافت کرنے کے لیے استعمال ہوتا ہے۔ ایک کا نفاذ قطار ان گو تھریڈ سے محفوظ ہے، جو انہیں پروگراموں میں ہم آہنگی کو لاگو کرنے کے لیے ایک مثالی انتخاب بناتا ہے۔ اسے سلائسس، منسلک فہرستوں، ڈھانچے اور چینلز کا استعمال کرتے ہوئے لاگو کیا جا سکتا ہے۔ اوپر دی گئی ہدایات میں مکمل تفصیلات پہلے ہی فراہم کی گئی ہیں۔