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

ولكن كيف يمكنك إنشاء قائمة مرتبطة في Java؟ لنلقي نظرة.

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

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

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

يفرض مبدأ فصل الاهتمامات أنه يجب فصل كل قسم من الكود يعالج مشكلة معينة. سيساعدك هذا المبدأ على إنشاء كود أنظف (أكثر قابلية للقراءة) وهو مثالي لإنشاء هياكل البيانات.

instagram viewer

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

متعلق ب: تعرف على كيفية إنشاء فصول في Java

سيسمح الحاصلون والمحددون للفئات الأخرى (مثل فئة القائمة المرتبطة) بالوصول إلى العقد المختلفة داخل القائمة المرتبطة.

مثال فئة العقدة

يوجد أدناه مثال لفئة العقدة للحصول على فكرة عما نعنيه:


عقدة الطبقة العامة {
بيانات int الخاصة ؛
العقدة الخاصة NextNode ؛
//constructor
عقدة عامة () {
البيانات = 0 ؛
NextNode = خالية ؛
}
// حاصل على وضعية
getData int العامة () {
عودة البيانات
}
setData العامة الباطلة (بيانات int) {
البيانات = البيانات ؛
}
العقدة العامة getNextNode () {
إرجاع NextNode ؛
}
مجموعة عامة باطلة NextNode (Node nextNode) {
NextNode = nextNode ؛
}
}

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

يوجد أدناه مثال على قائمة مرتبطة في Java.

فئة عامة LinkedList {
رأس العقدة الخاصة ؛
//constructor
LinkedList العامة () {
الرأس = لا شيء ؛
}
}

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

  • تضاف في المقدمة.
  • تضاف في المنتصف.
  • تضاف في الخلف.

متعلق ب: كيفية بناء هياكل البيانات باستخدام فئات JavaScript ES6

تعد مجموعة القوائم المرتبطة لطرق الإدراج أحد الأسباب التي قد تجعل المطور يختار استخدام هذه البيانات بنية فوق بنية بيانات أخرى مثل المكدسات (والتي تسمح فقط بالإدراج والحذف من الأعلى).

استخدام طريقة الإدراج في المقدمة

يُدرج الإدخال في الطريقة الأمامية ، كما يوحي الاسم ، بيانات جديدة (أو عقدًا جديدة) في مقدمة القائمة المرتبطة.

أدخل في مثال الطريقة الأمامية

يوجد أدناه مثال على كيفية إدراج بيانات جديدة في مقدمة قائمتك.

 // أدخل العقدة في الطريقة الأمامية
insertAtFront العام الفراغ (مفتاح int) {
// إنشاء عقدة جديدة باستخدام فئة العقدة
Node Temp = new Node () ؛
// تحقق مما إذا تم إنشاء العقدة المؤقتة بنجاح
// تعيين البيانات التي قدمها المستخدم لها
إذا (Temp! = null) {
Temp.setData (مفتاح) ؛
Temp.setNextNode (خالية) ،
// تحقق مما إذا كان رأس القائمة المرتبطة فارغًا
// قم بتعيين العقدة التي تم إنشاؤها للتو إلى موضع الرأس
إذا (الرأس == فارغة) {
الرأس = درجة الحرارة ؛
}
// إذا كانت العقدة موجودة بالفعل في موضع الرأس
// أضف العقدة الجديدة إليها وقم بتعيينها كرأس
آخر {
Temp.setNextNode (رأس) ؛
الرأس = درجة الحرارة ؛
}
}
}

ال insertAtFront الطريقة في المثال أعلاه تسمح للمستخدم بإضافة عقد جديدة إلى قائمة مرتبطة معينة.

تطبيق الإدخال في المثال الأمامي

فيما يلي مثال على كيفية تطبيق الإدراج في المقدمة.

سائق فئة عامة {
// ينفذ البرنامج
العامة الثابتة الفراغ الرئيسي (سلسلة [] args) {
// إنشاء قائمة مرتبطة جديدة تسمى قائمة
LinkedList List = new LinkedList () ؛
// إضافة كل قيمة إلى مقدمة القائمة المرتبطة كعقدة جديدة
List.insertAtFront (10) ؛
List.insertAtFront (8) ؛
List.insertAtFront (6) ؛
List.insertAtFront (4) ؛
List.insertAtFront (2) ؛
}
}

ال سائق class (وهو الاسم الذي غالبًا ما يتم تعيينه للفئة القابلة للتنفيذ في Java) ، يستخدم فئة LinkedList لإنشاء قائمة مرتبطة بخمسة أرقام زوجية. بالنظر إلى الكود أعلاه ، يجب أن يكون من السهل رؤية الرقم "2" في موضع الرأس في القائمة المرتبطة. لكن كيف يمكنك تأكيد ذلك؟

استخدام طريقة عرض جميع العقد

طريقة عرض جميع العقد هي طريقة قائمة مرتبطة أساسية. بدونها ، لن يتمكن المطور من رؤية العقد في قائمة مرتبطة. ينتقل عبر القائمة المرتبطة (بدءًا من الرأس) لطباعة البيانات المخزنة في كل عقدة تشكل القائمة.

عرض مثال طريقة جميع العقد

فيما يلي مثال على استخدام طريقة عرض جميع الملاحظات في Java.

// عرض كل طريقة العقد
عرض الفراغ العام
// إنشاء استدعاء عقدة جديدة Temp وتعيينها إلى رأس القائمة المرتبطة
// إذا كان الرأس يحتوي على قيمة فارغة ، فستكون القائمة المرتبطة فارغة
عقدة الحرارة = الرأس ؛
إذا (الرأس == فارغة) {
System.out.println ("القائمة فارغة.")؛
إرجاع؛
}
System.out.println ("القائمة:")؛
بينما (Temp! = null) {
// طباعة البيانات في كل عقدة إلى وحدة التحكم (بدءًا من الرأس)
System.out.print (Temp.getData () + "") ؛
Temp = Temp.getNextNode () ،
}
}

الآن بعد أن أصبح ملف عرض الكل العقد تمت إضافة الطريقة إلى لينكدليست يمكنك عرض القائمة المرتبطة عن طريق إضافة سطر واحد من التعليمات البرمجية إلى فئة السائق.

استخدام مثال طريقة عرض جميع العقد

أدناه ، سترى كيف ستستخدم طريقة عرض جميع العقد.

// طباعة العقد في قائمة مرتبطة
List.displayAllNodes () ،

سيؤدي تنفيذ سطر التعليمات البرمجية أعلاه إلى الإخراج التالي في وحدة التحكم:

القائمة:

2 4 6 8 10

باستخدام طريقة البحث عن العقدة

ستكون هناك حالات يرغب فيها المستخدم في العثور على عقدة معينة في قائمة مرتبطة.

على سبيل المثال ، لن يكون عمليًا بالنسبة للبنك الذي لديه ملايين العملاء أن يطبع جميع العملاء في قاعدة بياناتهم عندما يحتاجون فقط إلى الاطلاع على تفاصيل عميل معين.

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

ابحث عن مثال طريقة العقدة

فيما يلي مثال على استخدام طريقة البحث عن العقدة.

// ابحث عن عقدة واحدة باستخدام مفتاح
findNode العامة المنطقية (مفتاح int) {
// أنشئ عقدة جديدة وضعها في رأس القائمة المرتبطة
عقدة الحرارة = الرأس ؛
// بينما العقدة الحالية ليست فارغة
// تحقق مما إذا كانت بياناته تتطابق مع المفتاح الذي قدمه المستخدم
بينما (Temp! = null) {
إذا (Temp.getData () == مفتاح) {
System.out.println ("العقدة موجودة في القائمة") ؛
العودة صحيح
}
// الانتقال إلى العقدة التالية
Temp = Temp.getNextNode () ،
}
// إذا لم يتم العثور على المفتاح في القائمة المرتبطة
System.out.println ("العقدة ليست في القائمة") ؛
عودة كاذبة؛
}

مع ال عرض الكل العقد الطريقة ، لقد أكدت أن ملف لينكدليست يحتوي على 5 أعداد زوجية من 2 إلى 10. ال findNode يمكن للمثال أعلاه تأكيد ما إذا كان أحد هذه الأرقام الزوجية هو الرقم 4 ببساطة عن طريق استدعاء الطريقة في فئة السائق وتقديم الرقم كمعامل.

باستخدام مثال طريقة البحث عن العقدة

يوجد أدناه مثال على كيفية استخدام طريقة البحث عن العقدة في الممارسة العملية.

// تحقق مما إذا كانت العقدة موجودة في القائمة المرتبطة
List.findNode (4) ؛

سوف ينتج الكود أعلاه الإخراج التالي في وحدة التحكم:

العقدة موجودة في القائمة

باستخدام طريقة حذف العقدة

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

تبحث طريقة حذف عقدة عن عقدة معينة ، وتحذف تلك العقدة ، وتربط العقدة السابقة بالعقدة التي تلي العقدة التي تم حذفها.

حذف مثال طريقة العقدة

فيما يلي مثال على طريقة حذف العقدة.

findAndDelete العامة باطلة (مفتاح int) { 
عقدة الحرارة = الرأس ؛
العقدة prev = خالية ؛
// تحقق مما إذا كانت العقدة الرئيسية تحتفظ بالبيانات
// وحذفها
إذا (Temp! = null && Temp.getData () == key) {
الرأس = Temp.getNextNode () ،
إرجاع؛
}
// ابحث في العقد الأخرى في القائمة
// وحذفها
بينما (Temp! = null) {
إذا (Temp.getNextNode (). getData () == مفتاح) {
prev = Temp.getNextNode (). getNextNode () ،
Temp.setNextNode (prev) ؛
إرجاع؛
}
Temp = Temp.getNextNode () ،
}
}

باستخدام مثال حذف طريقة العقدة

فيما يلي مثال على استخدام طريقة حذف عقدة في الممارسة.

// احذف العقدة التي تحتفظ بالبيانات 4
List.findAndDelete (4) ،
// طباعة جميع العقد في القائمة المرتبطة
List.displayAllNodes () ،

سيؤدي استخدام سطري الكود أعلاه في فئة برنامج التشغيل الموجودة مسبقًا إلى إنتاج الإخراج التالي في وحدة التحكم:

القائمة:
2 6 8 10

إذا وصلت إلى نهاية هذه المقالة التعليمية ، فستتعلم:

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

القائمة المرتبطة هي مجرد واحدة من العديد من هياكل البيانات التي يمكنك استخدامها لتخزين البيانات واستردادها وحذفها. نظرًا لأن لديك كل ما تحتاجه للبدء ، فلماذا لا تجرب هذه الأمثلة بنفسك في Java؟

يشاركسقسقةبريد إلكتروني
كيفية إنشاء وتنفيذ العمليات على المصفوفات في Java

تعلم جافا؟ دع المصفوفات تتعامل مع بياناتك بسهولة.

اقرأ التالي

مواضيع ذات صلة
  • برمجة
  • جافا
  • برمجة
  • نصائح الترميز
نبذة عن الكاتب
قاديشا كين (تم نشر 19 مقالة)

قاديشا كين مطور برامج متكامل وكاتب تقني / تقني. لديها قدرة مميزة على تبسيط بعض المفاهيم التكنولوجية الأكثر تعقيدًا ؛ إنتاج مواد يمكن لأي مبتدئ في مجال التكنولوجيا فهمها بسهولة. إنها شغوفة بالكتابة وتطوير البرامج الشيقة والسفر حول العالم (من خلال الأفلام الوثائقية).

المزيد من Kadeisha Kean

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك