قائمة انتظار الأولوية
إذا قمنا بتعيين كل عنصر رقمًا لتحديد أولويته ، فقد نجعل أعدادًا أصغر ذات أولوية أعلى حتى نتمكن من الوصول إلى عنصر أولوية أعلى في المجموعة والبحث عنه وحذفه. وبهذه الطريقة ، نقدم بنية بيانات مثل قائمة انتظار الأولوية. قائمة انتظار الأولوية هي مجموعة من 0 عنصر أو أكثر ، كل عنصر له أولوية. تتضمن العمليات التي تم تنفيذها على قائمة انتظار الأولوية (1) البحث (2) إدراج حذف عنصر جديد (3). بشكل عام ، يتم استخدام عملية البحث للبحث عن العنصر بأعلى أولوية ، ويتم استخدام عملية الحذف لحذف العنصر. بالنسبة للعناصر ذات نفس الأولوية ، يمكن معالجتها في أمر في الأولوية الأولى أو في أي أولوية.
طابور محاكاة صفيف جافا
قائمة الانتظار عبارة عن جدول خطي خاص يسمح فقط بعمليات الحذف في الطرف الأمامي من الجدول وإدراج عمليات في الطرف الخلفي من الجدول. تسمى النهاية التي تؤدي عملية الإدراج ذيل الفريق ، وتسمى النهاية التي تؤدي عملية الحذف رئيس الفريق. هذا هو مبدأ الأول في الأول (FIFO) الذي نستخدمه غالبًا. يمكن استخدام قائمة في Java كقائمة انتظار. إذا قمت بإضافة عناصر في نهاية قائمة الانتظار ، فاستخدم طريقة list.add ، وإذا قمت بحذف عناصر من رأس قائمة الانتظار ، فاستخدم طريقة list.remove.
مثال على هيكل قائمة انتظار محاكاة جافا: مثال:
حزمة داتنة. استيراد java.util.arrays ؛ استيراد java.util.comparator ؛ / *** استخدم المصفوفات لمحاكاة بنية الجدول الخطي الأول والخطي الأول بأولوية عالية.* على غرار TreeTeSet و Treemap باستخدام المقارنة*/ الفئة العامة محاكاة {public static void main (string [] args) {simulateprioritequeue queue = new SimulatePrioritye (4) ؛ // simulatequeue queue = new SimulateQueue () ؛ // system.out.println ("جلب العنصر:" + queue.remove ()) ؛ queue.insert (1) ؛ Queue.insert (3) ؛ queue.insert (2) ؛ queue.insert (5) ؛ Queue.insert (4) ؛ system.out.println ("size:" + queue.size ()) ؛ System.out.println ("PEEK:" + Queue.Peek ()) ؛ System.out.println ("Take Out Element:" + queue.peek ()) ؛ System.out.println ("Take Out Element:" + queue.remove ()) ؛ System.out.println ("Take Out Element:" + queue.remove ()) ؛ system.out.println ("extract element:" + queue.remove ()) ؛ // system.out.println ("extract element:" + queue.remove ()) ؛ system.out.println ("size:" + queue.size ()) ؛ system.out.println () ؛ } private int msize = 3 ؛ // size private int [] Marray ؛ // Array Private Int MnextItem ؛ // الموضع التالي ، يمكن أيضًا اعتباره العدد الحالي للعناصر العامة SimulatePriorityQueue () {marray = new int [msize] ؛ mnextItem = 0 ؛ } simulatePriorityQueue (int size) {this.msize = size ؛ Marray = new int [msize] ؛ mnextItem = 0 ؛ } / *** insert element* param item* / public void insert (int item) {if (! isfull ()) {marray [mnextItem ++] = item ؛ لـ (int i = 0 ؛ i <mnextItem ؛ i ++) {// bubblestone for (int j = 0 ؛ j <mnextItem - 1 ؛ j ++) {if (marray [j]> marray [j + 1]) {marray [j] = marray [j + 1] + 0 * (marray [j + 1] = marray [j]) ؛ System.out.println (Arrays.ToString (Marray)) ؛ }} system.out.println (Arrays.ToString (Marray)) ؛ } آخر {system.out.println ("-----------------") ؛ }} / *** قم بإزالة العنصر أولاً في أولى* @return* / public int remove () {if (! isempty ()) {return marray [-mnextItem] ؛ } آخر {رمي جديد alfictalargumentException ("لا يمكن إخراج أي عنصر") ؛ }} / *** تحقق من العنصر السابق* @return* / public int peek () {return marray [mnextItem - 1] ؛ } / *** هل هو فارغ* return* / public boolean isempty () {return mnextItem == 0 ؛ } / *** هل هو كامل* return* / public boolean isfull () {return mnextItem == msize ؛ } / ** * size * return * / public int size () {return mnextItem ؛ }} نتيجة الإخراج:
[1 ، 0 ، 0 ، 0] [1 ، 3 ، 0 ، 0] [1 ، 2 ، 3 ، 0] [1 ، 2 ، 3 ، 0]