طرق لتنفيذ قوائم انتظار الحلقة باستخدام Java:
1. أضف حجم السمة لتسجيل عدد العناصر حاليًا.
والغرض هو عندما الرأس = الخلفية. حسب الحجم = 0 أو الحجم = طول الصفيف. لتمييز قائمة الانتظار على أنها فارغة ، أو أن قائمة الانتظار ممتلئة.
2. يتم تخزين عنصر حجم الصفيف فقط في المصفوفة فقط ، مما يضمن أن الخلفية لن تكون مساوية للرأس بعد قلبها. هذا هو عندما تكون قائمة الانتظار ممتلئة. الخلفية+1 = الرأس ، هناك عنصر واحد فقط في الوسط.
عندما الخلفية = الرأس. يجب أن تكون قائمة الانتظار فارغة.
أنواع العمليات المتفق عليها على طرفي قائمة الانتظار مختلفة:
تسمى النهاية التي يمكن حذفها رئيس الفريق ، وتسمى هذه العملية أيضًا Dequeue ؛
تسمى النهاية التي يمكن إدراجها ذيل الفريق ، وتسمى هذه العملية أيضًا Enqueue.
رسم تخطيطي لقائمة الانتظار
عند تنفيذ قائمة انتظار ، يجب عليك الانتباه إلى ظاهرة الفائض الخاطئ. كما هو موضح في الصورة الأخيرة أعلاه.
فائض مزيف كما هو موضح في الشكل
الحل: استخدم سلسلة تخزين السلسلة ، والتي من الواضح أنها يمكن. عند تخزينها بالتتابع. حلنا المشترك هو توصيله بالنهاية وتشكيل قائمة انتظار دائرية. هذا يجعل الاستخدام الكامل لمساحة تخزين قائمة الانتظار.
مخطط قائمة انتظار الحلقة:
في الصورة أعلاه. تشير الأمامي إلى العنصر الأول في قائمة الانتظار. يشير الخلفية إلى الموضع التالي في نهاية قائمة الانتظار.
ولكن لا تزال هناك مشكلة: عندما تشير الأمامي والخلفي إلى نفس الموقف ، هل هذا يعني أن الفريق فارغ أو ممتلئ؟ يمكنك أن تتخيل مثل هذا الموقف.
الممارسات الشائعة لحل هذه المشكلة هي:
يتم استخدام علامة لتمييز مثل هذه المواقف المربكة.
التضحية بمساحة عنصرية. عندما تكون الأمام والخلفية متساوية ، فهي فارغة. عندما يكون الموضع التالي من الخلفية المقدمة. إنه ممتلئ.
على سبيل المثال ، الشكل التالي:
أدناه نعطي قائمة انتظار الحلقة ونستخدم طريقة أخرى ، أي التضحية بمساحة عنصر للتمييز بين الفرق الفارغة والكاملة.
عدة نقاط رئيسية:
1. النقاط الأمامية إلى رأس الفريق. يشير الخلفية إلى الوضع التالي في نهاية الفريق.
2. الاستدلال أن الفريق فارغ: الأمام == الخلفي ؛ الاستدلال أن الفريق ممتلئ: (الخلفية+1) ٪ maxSize == الأمامي.
استيراد java.io.*؛ الطبقة العامة QueueArray {object [] a ؛ // كائن صفيف ، يخزن قائمة الانتظار حتى A.Length-1 Object Int Front ؛ // من أول فرقة تراكمية خلفية ؛ // من end subcript public queuearray () {this (10) ؛ // استدعاء البنائين الآخرين} QueueArray (حجم int) {a = كائن جديد [size] ؛ الجبهة = 0 ؛ الخلفية = 0 ؛ } / *** إلحاق كائن إلى نهاية قائمة الانتظار* param obj كائن* RETURN FALSE عندما تكون قائمة الانتظار ممتلئة ، وإلا صحيحًا* / public boolean enqueue (Object OBJ) {if ((rear+1) ٪ A.Length == front) {return false ؛ } a [الخلفية] = obj ؛ الخلفية = (الخلفية+1) ٪ A.Length ؛ العودة صحيح. } / *** يتم إلغاء الكائن الأول في رأس قائمة الانتظار* @Return dequeed عندما تكون قائمة الانتظار فارغة* / الكائن العام dequeue () {if (reach == front) {return null ؛ } Object obj = a [Front] ؛ Front = (Front+1) ٪ A.Length ؛ إرجاع OBJ ؛ } public static void main (string [] args) {QueueArray q = new QueUearRay (4) ؛ System.out.println (Q.Enqueue ("Zhang San")) ؛ System.out.println (Q.Enqueue ("li si")) ؛ System.out.println (q.enqueue ("Zhao wu")) ؛ System.out.println (Q.Enqueue ("Wang yi")) ؛ // لا يمكن إدخال قائمة الانتظار ، فإن قائمة الانتظار ممتلئة لـ (int i = 0 ؛ i <4 ؛ i ++) {system.out.println (q.dequeue ()) ؛ }}}الملخص أعلاه لطريقتي تنفيذ قوائم الانتظار الدائرية بناءً على صفائف Java هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.