ما هو قائمة الانتظار في جولانج؟

Ma Hw Qaymt Alantzar Fy Jwlanj



Go هي لغة برمجة شائعة تم الإشادة بها لكفاءتها وسهولة استخدامها وقدرتها على التكيف. من خلال مجموعة غنية من الأدوات والمكتبات ، يوفر Go للمطورين الموارد اللازمة لإنشاء تطبيقات برمجية قوية وفعالة. على الرغم من عدم وجود Go ذيول في مكتبتها القياسية كهيكل بيانات ، يمكن تنفيذها باستخدام طرق مختلفة. سوف نتحدث عن مفهوم ذيول وكيفية تنفيذها في هذا البرنامج التعليمي.

ما هو الطابور؟

ذيول هي هياكل بيانات تُستخدم لتخزين العناصر واستردادها بترتيب محدد مسبقًا. إنها بنية بيانات خطية تشبه المكدس وتلتزم بـ الوارد أولاً يصرف أولاً قاعدة. يمكن مقارنتها بقائمة انتظار أو خط تتم فيه خدمة أول شخص يصل أولاً. يتم إسقاط المكونات الموجودة من الجزء الأمامي من طابور ، ويتم إضافة عناصر جديدة إلى الخلف.

تنفيذ طابور في جولانج

تنفيذ أ طابور in Go بسيط وفعال ويمكن تنفيذه باستخدام الطرق الأربعة التالية.







1: شرائح

في Go ، أ شريحة هي مجموعة ديناميكية يمكن أن تتغير في الحجم. لتنفيذ أ طابور باستخدام أ شريحة ، يمكننا إضافة عناصر إلى الجزء الخلفي من شريحة باستخدام وظيفة الإلحاق المضمنة وإزالة العناصر من مقدمة ملف شريحة باستخدام التقطيع.



هذا النهج سهل البناء ويوفر أداءً جيدًا لإلحاق العمليات وتقطيعها بفضل الشرائح المضمنة في Go. ومع ذلك ، فإن طريقة التقطيع ، التي تتضمن نسخ العناصر إلى مصفوفة أساسية جديدة ، يمكن أن تصبح غير فعالة إذا كان طابور يوسع ويتطلب عمليات فصل متكررة.



يعرّف الكود التالي ملف طابور التنفيذ باستخدام شريحة في Go.





الحزمة الرئيسية

يستورد 'FMT'

func الرئيسي ( ) {

طابور : = يصنع ( [ ] واجهه المستخدم { } و 0 )

طابور = ألحق ( طابور و 'إنجليزي' )

طابور = ألحق ( طابور و 'الأردية' )

طابور = ألحق ( طابور و 'رياضيات' )

لو فقط ( طابور ) > 0 {

غرض : = طابور [ 0 ]

طابور = طابور [ 1 : ]

FMT. Println ( غرض )

}

لو فقط ( طابور ) == 0 {

FMT. Println ( 'قائمة الانتظار فارغة' )

} آخر {

FMT. Println ( طابور )

}

}

يستخدم كود Go أعلاه شريحة لإنشاء ملف طابور هيكل البيانات. ال ألحق() تُستخدم الوظيفة لإدراج العناصر في ملف طابور slice ، وعملية الشريحة التي تزيل العنصر الأولي تُستخدم لإزالتها. مع fmt.Println () ، تتم طباعة العنصر المنزوع من الصف. يستخدم الرمز بعد ذلك الامتداد فقط() وظيفة لتحديد ما إذا كانت قائمة الانتظار فارغة ، وإذا كانت فارغة ، فإنها تكتب ' طابور فارغ 'باستخدام وظيفة fmt.Println ().

انتاج |



2: القوائم المرتبطة

تشكل العقد التي تحمل قيمة ومؤشرًا للعقدة التالية في القائمة قائمة مرتبطة. باستخدام مؤشرين ، يشير أحدهما إلى مقدمة (رأس) القائمة والآخر يشير إلى الخلف (الذيل) ، يمكننا تنفيذ طابور باستخدام قائمة مرتبطة. تتضمن إزالة عنصر من قائمة الانتظار (إلغاء ترتيب الصفوف) إزالة العقدة الموجودة في مقدمة القائمة أثناء إضافة عنصر إلى قائمة الانتظار (وضع قائمة الانتظار) يتضمن إضافة عقدة جديدة إلى الجزء الخلفي من القائمة.

تسمح هذه الطريقة بعمليات التصفية وإزالة الصفوف الفعالة لأن مؤشرات الرأس والذيل فقط هي التي تحتاج إلى التغيير ، على عكس الحل المستند إلى الشرائح حيث يلزم نسخ العناصر.

استخدم قائمة مرتبطة لتنفيذ ملف طابور باستخدام الكود المقدم أدناه:

الحزمة الرئيسية

يستورد 'FMT'

اكتب العقدة هيكل {

واجهة ذات قيمة { }

التالي * العقدة

}

اكتب قائمة الانتظار هيكل {

رأس * العقدة

ذيل * العقدة

}

func الرئيسي ( ) {

طابور : = & طابور { رأس : لا شيء و ذيل : لا شيء }

عقدة جديدة : = & العقدة { قيمة : 'إنجليزي' و التالي : لا شيء }

طابور. ذيل = عقدة جديدة

طابور. رأس = عقدة جديدة

عقدة جديدة = & العقدة { قيمة : 'الأردية' و التالي : لا شيء }

طابور. ذيل . التالي = عقدة جديدة

طابور. ذيل = عقدة جديدة

عقدة جديدة = & العقدة { قيمة : 'رياضيات' و التالي : لا شيء }

طابور. ذيل . التالي = عقدة جديدة

طابور. ذيل = عقدة جديدة

لو طابور. رأس ! = لا شيء {

غرض : = طابور. رأس . قيمة

طابور. رأس = طابور. رأس . التالي

FMT. Println ( غرض )

}

لو طابور. رأس == لا شيء {

FMT. Println ( 'قائمة الانتظار فارغة' )

}

}

تمثل بنية العقدة كل عنصر في قائمة الانتظار وتحتوي على حقلين: حقل قيمة لتخزين قيمة العنصر ، والحقل التالي للإشارة إلى العنصر التالي في قائمة الانتظار. يستخدم هيكل قائمة الانتظار خصائص الرأس والذيل لتتبع الجزء الأمامي والخلفي من قائمة الانتظار ، على التوالي. ال الذيل يتم الإشارة إلى العنصر الأول بواسطة خاصية head ، بينما تتم الإشارة إلى العنصر الأخير بواسطة خاصية tail.

يتم ضبط معلمات الرأس والذيل مبدئيًا على لا شيء عندما يكون ملف طابور تم تأسيسه في الوظيفة الرئيسية (). يتم تحديث مؤشرات الرأس والذيل لإضافة ثلاث عقد إلى ملف طابور مع القيم 'الإنجليزية' ، 'الأردية' ، و 'رياضيات'. ال 'إنجليزي' ثم البند 'غير مؤهل' (تمت إزالته) من الجزء الأمامي من طابور من خلال عرض قيمته وتقديم مؤشر الرأس إلى العقدة التالية في ملف طابور . بعد إلغاء الترتيب ، إذا أصبح العنوان فارغًا ، فهذا يعني أن قائمة الانتظار فارغة ، والرسالة ' طابور فارغ '.

انتاج |

3: الهياكل

في Go ، يمكنك إنشاء بنية بيانات مخصصة تسمى ملف هيكل لتمثيل أ طابور . هذا هيكل يمكن أن تحتوي على حقول لتخزين ملفات طابور عناصر وطرق لإضافة العناصر وإزالتها ، تحقق مما إذا كانت قائمة الانتظار فارغة ، واحصل على حجم قائمة الانتظار الحالية.

هذه الطريقة في إنشاء ملف طابور يقدم in Go تنفيذًا مناسبًا ومُغلفًا بأساليب سهلة الاستخدام يمكن توسيعها وتخصيصها بمزيد من الميزات. إنه نهج مرن يسمح بإجراء تغييرات على التنفيذ أو إضافة قدرات جديدة كلما لزم الأمر.

خلق العرف هيكل مع طرق تتضمن كتابة كود إضافي مقارنة بالطريقتين الأخريين ، مما قد يزيد من التعقيد. ومع ذلك ، فإنه يوفر أيضًا مزيدًا من المرونة والتحكم في تنفيذ طابور .

يوضح المثال التالي إنشاء بنية بيانات لتمثيل ملف طابور في Go.

الحزمة الرئيسية

يستورد 'FMT'

اكتب قائمة الانتظار هيكل {
أغراض [ ] واجهه المستخدم { }
}

func ( ف * طابور ) قائمة الانتظار ( واجهة العنصر { } ) {
ف. أغراض = ألحق ( ف. أغراض و غرض )
}

func ( ف * طابور ) ديكيو ( ) واجهه المستخدم { } {
لو فقط ( ف. أغراض ) == 0 {
يعود لا شيء
}
غرض : = ف. أغراض [ 0 ]
ف. أغراض = ف. أغراض [ 1 : ]
يعود غرض
}

func ( ف * طابور ) فارغ ( ) منطقي {
يعود فقط ( ف. أغراض ) == 0
}

func ( ف * طابور ) مقاس ( ) int {
يعود فقط ( ف. أغراض )
}


func الرئيسي ( ) {

طابور : = & طابور { أغراض : يصنع ( [ ] واجهه المستخدم { } و 0 ) }

طابور. قائمة الانتظار ( 'إنجليزي' )
طابور. قائمة الانتظار ( 'الأردية' )
طابور. قائمة الانتظار ( 'رياضيات' )

غرض : = طابور. ديكيو ( )
FMT. Println ( غرض )
لو طابور. فارغ ( ) {
FMT. Println ( 'قائمة الانتظار فارغة' )
}

مقاس : = طابور. مقاس ( )
FMT. Println ( 'حجم قائمة الانتظار:' و مقاس )
}

في الكود أعلاه ، يتم إلحاق عنصر بشريحة العنصر عبر Enqueue () التي تنقلها إلى نهاية ملف طابور . بعد أول ما يدخل ، يخرج أولًا (FIFO) المبدأ ديكيو () أسلوب يأخذ عنصرًا من الجزء الأمامي من طابور وإعادته. يتم فحص طول شريحة العنصر كجزء من فارغ() طريقة التحقق لمعرفة ما إذا كان طابور فارغ. عن طريق إعادة طول شريحة العناصر ، فإن ملف مقاس() طريقة إرجاع التيار الذيل مقاس.

تستخدم الدالة main () الامتداد هيكل قائمة الانتظار لإنشاء ملف طابور ، إضافة عناصر إليه ، وإزالة العناصر منه ، وتحديد ما إذا كان طابور فارغ ، واحسب حجمه.

انتاج |

4: القنوات

في Go ، يمكن استخدام نوع القناة المدمجة لتنفيذ ملف طابور هيكل البيانات. يمكن إنشاء القناة بحجم مخزن مؤقت للحد من عدد العناصر التي يمكن وضعها في قائمة الانتظار في أي وقت. لإضافة عنصر إلى ملف طابور ، يمكن إرسالها إلى القناة باستخدام ملف <- عامل ، أثناء إزالة عنصر من قائمة الانتظار ، يمكن استقباله من القناة باستخدام نفس المشغل.

يمكن أن يكون هذا الأسلوب مفيدًا جدًا في المواقف التي يكون فيها الوصول المتزامن إلى طابور مطلوب ، لأن القنوات آمنة بطبيعتها للاستخدام المتزامن.

من المهم أن تتذكر أن قنوات Go مكتوبة. هذا يعني أنه يمكنك فقط إرسال قيم من نوع معين عبر قناة ، ويمكنك فقط تلقي قيم من نفس النوع من القناة.

هذا توضيح لكيفية استخدام قناة لإنشاء ملف طابور بنية البيانات في Go.

الحزمة الرئيسية

يستورد (
'FMT'
'وقت'
)

اكتب قائمة الانتظار هيكل {
عناصر chaninterface { }
}

funcNewQueue ( ) * طابور {


ف : = & طابور {

أغراض : يصنع ( واجهة تشان { } ) و
}
اذهب ف. العملية ( )
يعود ف
}

func ( ف * طابور ) العملية ( ) {
ل غرض : = نطاق ف. أغراض {
لو غرض == 'إنجليزي' {
FMT. Println ( 'غير مؤهل:' و غرض )
}
}
}


func ( ف * طابور ) قائمة الانتظار ( واجهة العنصر { } ) {

ف. أغراض <- غرض

}

funcmain ( ) {
طابور : = NewQueue ( )

طابور. قائمة الانتظار ( 'إنجليزي' )
طابور. قائمة الانتظار ( 'الأردية' )
طابور. قائمة الانتظار ( 'رياضيات' )

وقت . ينام ( 2 * وقت . ثانية )
}

يقوم الكود أعلاه بإنشاء ملف هيكل قائمة الانتظار مع مجال واحد أغراض وهي قناة واجهه المستخدم{} يكتب. ال NewQueue () تنشئ الدالة مثيلًا جديدًا لملف طابور وتهيئة 'أغراض' مع قناة جديدة غير مخزنة. يبدأ أيضًا goroutine جديدًا لمعالجة العناصر المضافة إلى قائمة الانتظار باستخدام ملف processItems () وظيفة. ال processItems () تتحقق الوظيفة مما إذا كان العنصر المستلم يساوي 'إنجليزي' ويطبع رسالة إلى وحدة التحكم لهذا العنصر فقط. ال Enqueue () تستخدم الوظيفة لإضافة عناصر جديدة إلى قائمة الانتظار.

انتاج |

خاتمة

قائمة الانتظار هي بنية بيانات أساسية في Go تُستخدم لتخزين العناصر واستردادها بترتيب معين. تنفيذ أ طابور in Go آمن للخيط ، مما يجعله خيارًا مثاليًا لتنفيذ التزامن في البرامج. يمكن تنفيذه باستخدام الشرائح والقوائم المرتبطة والهياكل والقنوات. تم توفير التفاصيل الكاملة بالفعل في الإرشادات المذكورة أعلاه.