مقدمة حول استخدام القوائم المرتبطة في Java

مقدمة حول استخدام القوائم المرتبطة في Java

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





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





كيف تعمل القائمة المرتبطة؟

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





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

إنشاء قائمة مرتبطة في جافا

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



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

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





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

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





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

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


public class Node {
private int Data;
private Node NextNode;
//constructor
public Node() {
Data = 0;
NextNode = null;
}
//getters and setters
public int getData() {
return Data;
}
public void setData(int data) {
Data = data;
}
public Node getNextNode() {
return NextNode;
}
public void setNextNode(Node nextNode) {
NextNode = nextNode;
}
}

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

مثال القائمة المرتبطة

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

public class LinkedList {
private Node Head;
//constructor
public LinkedList() {
Head = null;
}
}

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

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

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

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

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

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

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

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

//insert node at front method
public void insertAtFront(int key) {
//create a new node using the node class
Node Temp = new Node();
//check if the Temp node was successfully created
//assign the data that was provides by the user to it
if(Temp != null) {
Temp.setData(key);
Temp.setNextNode(null);

//check if the head of the linked list is empty
//assign the node that was just created to the head position
if(Head == null) {
Head = Temp;
}
//if a node is already at the head position
//add the new node to it and set it as the head
else {
Temp.setNextNode(Head);
Head = Temp;
}
}
}

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

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

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

public class Driver {
//executes the program
public static void main(String[] args) {
//create a new linked list called List
LinkedList List = new LinkedList();
//add each value to the front of the linked list as a new node
List.insertAtFront(10);
List.insertAtFront(8);
List.insertAtFront(6);
List.insertAtFront(4);
List.insertAtFront(2);
}
}

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

ما مدى أهمية ذاكرة الوصول العشوائي للألعاب

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

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

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

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

//display all nodes method
public void displayAllNodes() {
//create a new node call Temp and assign it to the head of the linked list
//if the head has a null value then the linked list is empty
Node Temp = Head;
if (Head == null){
System.out.println('The list is empty.');
return;
}
System.out.println('The List:');

while(Temp != null) {
//print the data in each node to the console(starting from the head)
System.out.print(Temp.getData() + ' ');
Temp = Temp.getNextNode();
}
}

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

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

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

//print the nodes in a linked list
List.displayAllNodes();

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

القائمة:

2 4 6 8 10

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

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

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

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

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

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

//search for a single node using a key
public boolean findNode(int key) {
//create a new node and place it at the head of the linked list
Node Temp = Head;
//while the current node is not empty
//check if its data matches the key provided by the user
while (Temp != null) {
if (Temp.getData() == key) {
System.out.println('The node is in the list');
return true;
}
//move to the next node
Temp = Temp.getNextNode();
}
//if the key was not found in the linked list
System.out.println('The node is not in the list');
return false;
}

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

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

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

//check if a node is in the linked list
List.findNode(4);

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

The node is in the list

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

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

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

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

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

public void findAndDelete(int key) {
Node Temp = Head;
Node prev = null;
//check if the head node holds the data
//and delete it
if (Temp != null && Temp.getData() == key) {
Head = Temp.getNextNode();
return;
}
//search the other nodes in the list
//and delete it
while (Temp != null) {
if (Temp.getNextNode().getData() == key ) {
prev = Temp.getNextNode().getNextNode();
Temp.setNextNode(prev);
return;
}
Temp = Temp.getNextNode();
}
}

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

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

لماذا لا يتعرف iTunes على جهاز iPhone الخاص بي
//delete the node that holds the data 4
List.findAndDelete(4);
//print all nodes in the linked list
List.displayAllNodes();

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

The List:
2 6 8 10

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

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

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

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

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

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

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

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

المزيد من Kadeisha Kean

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

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

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