‫في هذا الفيديو ، سنغطي الإشارات وسنرى كيفية استخدام قوائم الانتظار في تطبيقاتنا.
‫قوائم الانتظار مهمة ويستخدمها نظام التشغيل لدينا كثيرًا ، على سبيل المثال ، للتعامل مع المهام والجدولة والعديد
‫من العمليات الأخرى.
‫يجب استخدام قوائم الانتظار عندما يكون ترتيب البيانات مهمًا ، كما سنرى في مثالنا.
‫لذلك دعونا نمضي قدمًا وقبل كل شيء ، حدد قائمة انتظار.
‫من أجل تحديد قائمة الانتظار ، يمكنك استخدام قائمة الانتظار.
‫تعد قوائم انتظار الكلمات الرئيسية أيضًا جزءًا من المجموعات العامة ، مما يعني أننا بحاجة إلى تحديد
‫نوع قائمة الانتظار التي ستدرجها.
‫لذلك في هذه الحالة ، ستحتوي على مجموعة من الأعداد الصحيحة ، ولكنها قد تحتوي أيضًا على أي نوع آخر.
‫يمكن أن تحمل خيوطًا ، ويمكن أن تحمل حتى أشياء كاملة.
‫لذلك أنت حر تمامًا في تحديد ما تريد أن يحتفظ به هذا العنصر.
‫لذا اصطف في قائمة الانتظار أقل ، ثم قم بالتسجيل في علامة أكبر ثم اسم قائمة الانتظار يساوي.
‫وبعد ذلك يمكنك تهيئته على الفور كما نفعل هنا ، حيث نقوم فقط بإنشاء قائمة انتظار فارغة تحتوي على
‫أعداد صحيحة.
‫لذا يمكننا الآن المضي قدمًا وإضافة عناصر إلى قائمة الانتظار هذه.
‫لإضافة عناصر إلى قائمة انتظار ، يمكنك استخدام طريقة قائمة انتظار النهاية.
‫يضيف أسلوب قائمة الانتظار كائنًا إلى نهاية قائمة الانتظار.
‫لذلك إذا أضفت عنصرًا مثل عنصر ، على سبيل المثال ، فسيكون هذا العنصر هو العنصر الأول لأنه حسنًا ، إنه أول عنصر
‫نقوم بتضمينه ، ولكنه سيكون أيضًا العنصر الأخير.
‫لذلك بمجرد أن نضيف عنصرًا آخر ، سيكون العنصر الجديد هو العنصر الأخير في قائمة الانتظار.
‫هذه هي الطريقة التي يتم بها الطلب.
‫إنه مشابه للمكدس ، لكن الاختلاف هو أن قائمة الانتظار عندما تتخلص من شيء ما ، لذلك
‫عندما تنبثق عنصرًا ، فإنه سيأخذها من بداية قائمة الانتظار.
‫لذلك سيتم سحب العنصر الذي تم إنشاؤه أولاً أو سيتم إخراجه من قائمة الانتظار ، إذا جاز التعبير.
‫لذلك من أجل إلقاء نظرة على عناصر قوائم الانتظار ، يمكننا استخدام طريقة الذروة وستعرض طريقة الذروة هذه العنصر الأول في قائمة الانتظار
‫، وبالتالي فإن مقدمة قائمة الانتظار ، إذا جاز التعبير.
‫لذا فهي مثل قائمة انتظار من الأشخاص حيث تكون على المنضدة وتريد طلب شيء ما ، على سبيل المثال
‫، فإن طريقة الذروة ستمنحك أول شخص في قائمة الانتظار على وشك الطلب.
‫لذلك دعونا نجري هذا بسرعة كبيرة ونرى كيف سيبدو هذا.
‫ونرى أن القيمة في مقدمة قائمة الانتظار تساوي واحدًا.
‫الآن دعنا نضيف بضع قيم أخرى لنرى كيف سيؤثر ذلك على تطبيقنا.
‫لذا سأضيف هنا عناصر Q المختلفة مثل لذلك سأقوم بإنهاء Q واحد ثم في Q2 و Q3 ، وأنا فقط استخدم هذه الأرقام
‫واحد ، اثنان ، ثلاثة.
‫يمكن أن يكون هناك أي أرقام أخرى كذلك.
‫ليس بالضرورة أن تكون واحدًا ، اثنان ، ثلاثة.
‫لذلك مع بلوغ الذروة ، نحصل على العنصر الموجود في بداية قائمة الانتظار.
‫يمكنك أن ترى في كل مرة ، بغض النظر عما نضيفه إلى Q ، فإن العنصر سيكون العنصر الأول لدينا في Q ، لذلك سيكون
‫هو العنصر الذي يتم عرضه عندما نستخدم طريقة الذروة.
‫الآن للتخلص من عنصر من قائمة الانتظار ، يمكنك استخدام طريقة قائمة الانتظار.
‫حتى هنا.
‫Q dot rd q ، لذا فإن D q سيتخلص الآن من العدد الصحيح الأول من Q الخاص بنا وسيخزنه أيضًا على الفور
‫حتى نتمكن من تخزين هذا ، لنسمي هذا العنصر Q ، على سبيل المثال ، ثم يخزن نتيجة
‫هذا البند ديكت.
‫لذلك في الأساس سوف يخزن واحدًا هناك لأن هذا هو العنصر الأول الذي لدينا في القائمة.
‫وبعد ذلك ستعرض بكين اثنين لأن أحدهما لم يعد موجودًا الآن.
‫ذهب العنصر الأول.
‫إذن الآن ستكون القيمة في Q تساوي اثنين لأننا حسنًا ، قمنا فقط بفك تشفير العنصر الأول.
‫لذا فهو مشابه لإدخال مكدس ، لكنه يأخذ العنصر الموجود في بداية Q بدلاً من نهاية
‫Q أو نهاية المكدس ، ولكنك تريد إلقاء نظرة عليه.
‫يمكنك بالطبع أيضًا محاولة وضع عنصر في قائمة انتظار في البداية.
‫إذا لم تكن هناك عناصر داخل قائمة الانتظار ، ولكنك ستواجه استثناء عملية غير صالح.
‫قائمة الانتظار فارغة لذا ستحتاج إلى التحقق مما إذا كانت قائمة الانتظار فارغة أم لا قبل تشغيلها.
‫يمكننا هنا تشغيل طريقة الطابور لأننا نعلم أننا نشفر شيئًا ما.
‫ولكن بخلاف ذلك ، يمكنك استخدام خاصية الجرد لقائمة الانتظار الخاصة بك لمعرفة عدد العناصر الموجودة لديك
‫هناك.
‫إذن هذه هي الخاصية التي يمكنك استخدامها ، وتحصل على عدد العناصر الموجودة في قائمة الانتظار ويمكنك
‫بعد ذلك التحقق مما إذا كان هذا العنصر أكبر من الصفر ، على سبيل المثال ، للتحقق مما إذا كان هناك أي شيء
‫في قائمة الانتظار يمكنك ، على سبيل المثال ، قائمة الانتظار.
‫لذا في هذا المثال بالذات ، سأستمر في استخدام.
‫هل تعول على التحقق مرتين في حلقة while؟
‫وبالنسبة لكل عنصر ، سأضعه في قائمة الانتظار وأكتب أيضًا كمية العناصر التي لا تزال في قائمة الانتظار
‫وأيضًا العنصر الذي تمت إزالته.
‫لذلك ، سيؤدي هذا السطر هنا إلى إزالة العنصر عن طريق استدعاء طريقة قائمة الانتظار وفي نفس
‫الوقت سيعرض العنصر هنا لأن هذا هو ما نستخدمه هنا.
‫نحن نستخدم الخيط ، أليس كذلك؟
‫وبهذا الموضع صفر ، سيعرض أيًا كان نتيجة استدعاء قائمة الانتظار.
‫وكما ترى هنا ، فإن عملية الطابور ستعيد عددًا صحيحًا.
‫لذلك سنقوم بعرض رقم هنا.
‫تمام.
‫لذا اسمحوا لي أن أتخلص من هذه الإشارة التي استخدمتها هنا لتوضيح كيفية استرداد أحد العناصر.
‫ودعنا نديرها مرة أخرى.
‫ويمكنك أن ترى القيمة في المقدمة ، هذه.
‫ثم نبدأ هنا بشكل أساسي الحلقة Y.
‫هذا هو الجزء المثير للاهتمام.
‫لذلك يتم إزالة كلمة واحدة من قائمة الانتظار.
‫الآن لدينا عنصرين فقط تم حذفهما من قائمة الانتظار.
‫الآن لدينا عنصر واحد فقط ولم تتم إزالة ثلاثة من قائمة الانتظار.
‫الآن لدينا فقط صفر من العناصر المتبقية.
‫لذلك فإن قائمة الانتظار فارغة في هذه المرحلة.
‫حسنا.
‫لذلك دعونا نلقي نظرة على مثال من العالم الواقعي إلى حد ما.
‫بالطبع ، نحن لا نعمل مع قواعد البيانات في هذا المثال البسيط هنا ، ولكن لنفترض أن لدينا منصة للتجارة
‫الإلكترونية ونحن البائعون ونتلقى مجموعة من الطلبات.
‫يجب معالجة هذه الطلبات بحيث يكون وقت الخادم.
‫لذلك يجب تقليل وقت انتظار العميل إلى الحد الأدنى.
‫هذا هو السبب في أننا سنستخدم قوائم الانتظار لأنها عملية للغاية لأننا
‫نهتم بترتيب الطلبات الواردة.
‫إذن ، ترتيب الطلبات ، هو عبارة عن ملف لسان صغير هنا ، لكن الترتيب الذي تم استلام البيانات
‫به وبالبيانات أعني الطلبات نفسها.
‫لذلك دعونا نلقي نظرة على هذا الفصل البسيط للغاية الذي سنقوم ببنائه هنا ، وسأضعه
‫داخل نفس الملف هنا.
‫ترتيب الفصل هذا مع خاصية معرف الطلب ، وخاصية كمية الطلب ، ثم المُنشئ ، الذي يقوم بشكل أساسي
‫بتعيين هاتين القيمتين فقط عندما نقوم بإنشاء كائن أمر ثم لدينا رسالة
‫الطباعة هذه أو طريقة أمر العملية هذه والتي ستطبع معرف الطلب من العنصر الذي نبحث عنه حاليًا ، لذلك بالترتيب
‫الذي نبحث عنه حاليًا.
‫والآن ما أود فعله هو أنني أرغب في إنشاء طرق داخل فصل البرنامج الخاص بي.
‫لذلك سأقوم بوضعه هنا داخل هذه الفئة والطرق التي سوف يعتنون بها بالطلبات
‫من الفروع المختلفة.
‫لنفترض أن لدينا فرعين مختلفين حيث يمكننا الحصول على الطلبات منه.
‫لنفترض أننا نبيع على Amazon وفي نفس الوقت في Best Buy ، على سبيل المثال.
‫وبعد ذلك سنحصل الآن على هذه الأوامر.
‫الآن لن نجعل الأمر معقدًا للغاية حيث سنقوم بفحص الفرع الذي ، حسنًا ، ترتيب
‫الفروع المختلفة.
‫هذا شيء يمكنك بالطبع رؤيته على أنه تحدٍ صغير لنفسك إذا كنت ترغب في تطوير
‫ذلك.
‫لكننا سنقول فقط ، حسنًا ، أعطني الطلبات من الفرع الأول بالترتيب الصحيح وأعطيني
‫الطلبات من الفرع الثاني بالترتيب الصحيح أيضًا.
‫تمام.
‫سيكون هذا هو الفرع الأول الذي يحتوي على مجموعة من الطلبات ومن ثم لدينا الفرع الثاني مع مجموعة من الطلبات.
‫لذلك نحن نحصل على البيانات.
‫لنفترض أننا حصلنا على هذه البيانات من قاعدة بيانات حيث نتحقق ، حسنًا ، ما هي الطلبات؟
‫وربما نتحقق منها حسب التاريخ.
‫لذلك سيحصل كل طلب على تاريخ أيضًا.
‫لدينا هنا معرّف الطلب ، ولكن عادةً ما نحاول أيضًا تخزينه عند الطلب وما إلى ذلك.
‫لكننا سنبقي الأمر بسيطًا في هذا المثال.
‫إذن لدينا الآن مجموعة من الأوامر في كلا المثالين.
‫وعندما نسمي الطريقة ، نتلقى الطلبات من الفرعين الأول والثاني ، فسيقومون في الأساس بإعادة تشغيل النظام
‫وطلب المصفوفة.
‫حتى هنا مجموعة من الأوامر.
‫هذا ما يفعله هذا البيان هنا ، أوامر الإرجاع.
‫الآن في مثالنا الخاص ، سيكون معرف الطلب في الواقع فريدًا للطلبين المختلفين.
‫لذلك سيكونون بالفعل بالترتيب الصحيح ، إذا جاز التعبير.
‫هذا هو الترتيب الأول ، هذا هو الترتيب الثاني.
‫ثم نطلب ثلاثة ونرتب أربعة وخمسة من الفرع الثاني.
‫ثم في المساء ، في الفرع الأول ، جاء طلب آخر وقام شخص ما بشراء عشرة من منتجاتنا.
‫الآن في طريقتنا الرئيسية يمكننا إنشاء قائمة انتظار ودعوني أتخلص بالفعل من كل هذه الأشياء هنا.
‫في طريقتنا الرئيسية ، يمكننا الآن المضي قدمًا وإنشاء قائمة انتظار للأوامر.
‫حتى هنا ترتيب قائمة الانتظار.
‫يمكنك أن ترى أن هذا لن يكون نوعًا بسيطًا مثل عدد صحيح الآن ، ولكنه في الواقع سيحتوي
‫على مجموعة من الأوامر.
‫هذا هو الشيء الرائع في قائمة الانتظار.
‫لذا فهي ليست مجرد أنواع بسيطة وسأطلق عليها قائمة انتظار الطلب هذه وسأقوم بتهيئتها
‫على الفور هنا.
‫وبعد ذلك في هذه المرحلة ، يمكننا المضي قدمًا وترتيب جميع الطلبات التي نحصل عليها من الفرع الأول في قائمة الانتظار باستخدام
‫حلقة for هنا ، وهذا لكل حلقة.
‫لذلك نحن نمر بكل طلب سأسميه.
‫أوه ، في هذا لكل حلقة وهذا التكرار في طلبات الاستلام من الفرع الأول.
‫الآن سيكون هذا هنا من نوع ترتيب الصفيف.
‫لذلك عندما نسمي هذه الطريقة ، فإنها ستعيد مجموعة من الأوامر كما ترى هنا.
‫لذلك ، في الأساس ، سوف يمر هذا لكل حلقة من خلال الطلبات التي لدينا داخل مصفوفة الترتيب هذه
‫وسوف تبحث في كل واحدة منها.
‫لذلك سيكون كل شيء بهذا الترتيب أولاً ، ثم سيكون هذا الترتيب ، ثم سيكون هذا الترتيب.
‫ولكل منهم سينتهي بهذه الأوامر.
‫هذا ما يفعله هذا لكل حلقة.
‫ثم نقوم بإنشاء حلقة أخرى لكل حلقة للفرع الآخر أيضًا.
‫لذا.
‫ينطبق الشيء نفسه هنا على كل حلقة أو في الطلبات الواردة من الفرع الثاني.
‫هذا هو الفرع الثاني.
‫هذا هو الفرع الأول.
‫ونفس الشيء ينطبق.
‫لذلك نفس المفهوم ينطبق.
‫لذا لمعالجة الطلبات ، سنمر عبر قائمة الانتظار واحدة تلو الأخرى ، ثم سنزيل العناصر من قائمة الانتظار الخاصة
‫بنا ونعالجها حتى تصبح قائمة الانتظار فارغة وتتم معالجة جميع الطلبات في النهاية.
‫لهذا السبب لدينا طريقة ترتيب العملية هذه هنا ، والتي ستعالج الطلبات.
‫لذا يمكننا الآن المضي قدمًا وبدلاً من طريقتنا الرئيسية هنا ، بمجرد أن يكون لدينا قائمة انتظار الطلبات مع
‫جميع العناصر الموجودة فيها ، يمكننا المرور بها ويمكننا التحقق مما إذا كانت قائمة انتظار الطلبات ليست فارغة وطالما أنها
‫ليس فارغًا.
‫طالما أن عدد قائمة انتظار الطلبات أكبر من الصفر ، فسنقوم بتنفيذ هذا التكرار
‫أثناء التكرار وسنقوم بإزالة الترتيب في مقدمة قائمة الانتظار.
‫لذا فالترتيب الذي جاء أولاً ، إذا جاز التعبير ، وقم بتخزينه في متغير يسمى الترتيب الحالي.
‫لذلك لدينا كائن الطلب هذا والذي سيطلق عليه الأمر الحالي ، والذي سيكون في الأساس نتيجة
‫قائمة الانتظار في العنصر الأول من قائمة انتظار الطلبات.
‫إذن ، أخذ هذا العنصر أولاً ، ثم هذا العنصر ، ثم هذا العنصر ، ثم هذا العنصر ، ثم هذا
‫العنصر.
‫وبعد ذلك سيعالج كل واحد منهم خطوة بخطوة.
‫لذا فإن المعالجة وحالتنا ستكون شيئًا بسيطًا للغاية.
‫سوف يقوم فقط بطباعته على وحدة التحكم.
‫لكن بالطبع ، يمكنك تشغيل شيء أكثر تعقيدًا في الخلفية هنا.
‫قد يؤدي هذا إلى إرسال بعض الأحداث إلى إرسال بريد إلكتروني ، على سبيل المثال
‫، إلى موظف لديه وقت للعناية به أو أي نظام معالجة استخدمته في شركتك.
‫حسنا.
‫ونعم ، هذا هو الأساس.
‫لنقم الآن بتشغيل هذا التطبيق لرؤية النتائج.
‫ويمكننا أن نرى أنه تمت معالجة الطلب الأول.
‫تمت معالجة الطلب الثاني ، ثم الطلب ستة ، ثم ثلاثة ، ثم أربعة ، وخمسة.
‫لذلك نحن نقوم بمعالجة الطلبات.
‫بالطبع ، بالترتيب الذي وضعناه في قائمة الانتظار حتى ننتهي في قائمة الانتظار.
‫يمكنك أن ترى هنا أننا في قائمة الانتظار من الفرع 1/1 ثم من الفرع الثاني.
‫لذا تخيل فقط للسيناريو التالي حيث الأوامر التي تم إنشاؤها في النظام
‫داخليًا ، ولكن يجب أولاً قبولها ودفعها بالكامل إلى كيان المعالجة ، مهما كان هذا الكيان ، مثل
‫مكتب آخر أو نحو ذلك ، على سبيل المثال.
‫وهم يفعلون ذلك في نهاية اليوم ، على سبيل المثال.
‫لذا ، ينهي الفرع الأول أغراضه ويقولون ، حسنًا ، حسنًا ، نحن نقبل هذه الأوامر.
‫ثم لاحقًا في ذلك اليوم ، لنفترض أنهم في منطقة زمنية مختلفة.
‫على سبيل المثال ، يقول الفرع الثاني ، نعم ، نحن متفقون.
‫حسنًا ، نرسل طلباتنا كما تمت الموافقة عليها في تلك المرحلة أيضًا ، وبعد ذلك يتم البدء في
‫معالجتها.
‫هكذا يمكن اعتبار هذا المثال ، على سبيل المثال ، أليس كذلك؟
‫خلاف ذلك ، بالطبع ، يمكنك طلبها على الفور بناءً على هويتهم أو بناءً على الوقت الذي
‫تم إنشاؤه فيه.
‫حسنا.
‫حتى الآن لديك فكرة معينة عن كيفية عمل هذه الأوامر وكيف تعمل قوائم الانتظار.
‫هذا هو الجزء الأكثر أهمية.
‫لذا يمكنك الآن إنشاء قوائم الانتظار الخاصة بك واستخدامها في تطبيقاتك.
‫حسنا.
‫لذلك أتمنى أن تكون قد استمتعت بهذا الفيديو.
‫نراكم في القادم.