1. اكتبها في المقدمة
يجب أن تكون قوائم الانتظار في بنية البيانات أكثر دراية ، والتي هي الأولى في الأول. بسبب الترتيب ، يتم تسميتها كطوال قوائم. إنه مثل قائمة الانتظار. يوفر إدخال عقدة جديدة في نهاية المقدمة ، وحذف العقدة في First.JDK Collection Framework أيضًا واجهة قائمة انتظار. تمثل هذه الواجهة قائمة انتظار. قوائم الانتظار المتسلسلة: ArrayBlockingQueue ، LinkedBlockingqueue. (اثنان أعلاه هما قوائم قوائم ألوان القدم) والآخر متزامن.
يتكون التنفيذ الأساسي من نوعين من القوائم مجتمعة. سيكون لتنفيذ المصفوفات عيوب ، مما سيؤدي إلى امتلاء كاذب. في البداية ، عندما تكون قائمة الانتظار فارغة ، تكون المتغيرات المرجعية للمتغير المرجعي الأول للذيل فارغًا. عندما يتم حذف عناصر قائمة الانتظار ، ستحدث الأمامية+1 ، والخلف يساوي سعة الصفيف الأساسي. في بنية التخزين المتسلسلة ، يحفظ المقدمة دائمًا فهرس العناصر التي على وشك أن تكون خارج قائمة الانتظار في قائمة الانتظار ، ويحفظ الجزء الخلفي دائمًا فهرس العناصر التي على وشك إدخالها في قائمة الانتظار. عدد العناصر في قائمة الانتظار هو الواجهة الخلفية. في قائمة الانتظار المتسلسلة ، تكون الطبقة الأساسية عبارة عن صفيف ، وبالتالي فإن عناصر البيانات المحفوظة لن تتغير ، ويتم تغيير فقط المتغيرين المرجعيين ، الخلفية والأمام.
ما يمكن استخدامه لاستخدام المساحة بفعالية باستخدام تخزين السلسلة هنا هو أن المتغيرات المرجعية تشغل مساحة إضافية.
العمليات الشائعة لقوائم الانتظار:
1: التهيئة
2: أعد طول قائمة الانتظار
3: إضافة عناصر
4: حذف العناصر
5: الوصول إلى عنصر الرأس
6: الوصول إلى عناصر ذيل قائمة الانتظار
7: تحديد ما إذا كانت قائمة الانتظار فارغة
8: مسح قائمة الانتظار
2. التنفيذ المخصص
عرض رمز المصدر واضح ، لذلك ليست هناك حاجة لتقديمها
الفئة العامة Linkedqueue <T> {// سلسلة قائمة انتظار سلسلة قائمة الانتظار المخصصة لاستخدام فئات داخلية غير قاسية لتمثيل عقدة البيانات لعقدة قائمة انتظار السلسلة الخاصة {// تشير إلى عقدة البيانات في قائمة انتظار السلسلة الخاصة T Data ؛ // المرجع إلى عقدة العقدة الخاصة التالية ؛ suppressWarnings ("غير مستخدم") العقدة العامة () {} العقدة العامة (T Data ، Node Next) {this.data = data ؛ this.next = التالي ؛ }} // تحديد المرجع إلى رأس وذيل قائمة انتظار السلسلة الأمامية ؛ العقدة الخاصة الخلفية. // تحديد حجم سلسلة المكدس الخاصة ؛ // إنشاء سلسلة فارغة إلى عمود عام LinkedQueue () {front = null ؛ الخلفية = NULL ؛} // قم بإنشاء عمود سلسلة سلسلة مع عنصر معين ، وعقدة واحدة فقط LinkedQueue (عنصر t) {Front = new Node (element ، null) ؛ // قم بتشير إلى نفس العنصر الخلفي = الأمامي ؛ الحجم ++ ؛ elementFront () {if (! leght ()) {return front.data ؛} else {return null ؛ }} // الوصول إلى العنصر الأخير من قائمة الانتظار العامة t elementRear () {if (! frank ()) {return re rear.data ؛ } آخر {return null ؛ }} // إرجاع ما إذا كانت قائمة انتظار زوج السلسلة الحالية فارغة Bearning () {Return Size == 0 ؛ } // مسح قائمة انتظار سلسلة public clear () {front = null ؛ الخلفية = فارغة ؛ size = 0 ؛} // أدخل عقدة في قائمة انتظار السلسلة-pair public void add (t element) {// إذا كان عمود زوج السلسلة فارغًا ، فقم بإنشاء عقدة جديدة إذا (front == null) {rear = node node (element ، null) ؛ الجبهة = الخلفية ؛ } else {// إنشاء عقدة عقدة جديدة newRear = node node (عنصر ، null) ؛ الخلفية. next = newRear ؛ الخلفية = newRear ؛ } size ++ ؛} // حذف عقدة في قائمة انتظار السلسلة وإرجاع العقدة المحذوفة العامة t remove () {node oldfront = front ؛ الجبهة = Front.next ؛ Oldfront.next = null ؛ مقاس--؛ return oldfront.data ؛} // إرجاع قائمة انتظار السلسلة العامة toString () {// إذا كانت قائمة انتظار السلسلة عبارة عن قائمة انتظار سلسلة فارغة إذا (فارغة ()) {return "[]" ؛ } else {StringBuilder sbuilder = new StringBuilder ("[[") ؛ لـ (node current = front ؛ current! = null ؛ current. return sbuilder.delete (len-1 ، len) .Append ("]"). lqueue.add ("aaa") ؛ lqueue.add ("BBB") ؛ lqueue.add ("CCC") ؛ lqueue.add ("ddd") ؛ system.out.println ("إرجاع قيمة عقدة الرأس في قائمة الانتظار:"+lqueue.elementfront ()) ؛ system.out.println ("" إرجاع قيمة عقدة الذيل من قائمة الانتظار: "+lqueue.elementrear ()) ؛ system.out.println (lqueue.length ()) ؛ system.out.println (lqueue) ؛}}نتائج التشغيل:
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.