"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ قائمة مرتبطة منفردة في جافا سكريبت

كيفية تنفيذ قائمة مرتبطة منفردة في جافا سكريبت

تم النشر بتاريخ 2024-11-09
تصفح:141

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

How to Implement Singly Linked List in JavaScript

مخطط الدورة

  1. مقدمة
  2. تنفيذ القوائم المرتبطة منفردة
    • إنشاء عقدة جديدة
    • أدخل في البداية
    • أدخل في النهاية
    • حذف عقدة
    • البحث عن عقدة
    • اجتياز القائمة
  3. خاتمة


مقدمة

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

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

تنفيذ القوائم المرتبطة منفردة

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

How to Implement Singly Linked List in JavaScript

الآن، حان الوقت لبدء تنفيذ عمليات أساسيات القائمة المرتبطة بشكل فردي. هلا فعلنا؟

إنشاء عقدة جديدة

لنبدأ بإنشاء فئة عقدة جديدة. ستحتوي فئة العقدة على مُنشئ يأخذ بيانات العقدة والمؤشر التالي الذي تم تعيينه في البداية على قيمة خالية.


// Node class for Singly Linked List
class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}


يمكن تصور فئة العقدة التي تم إنشاؤها حديثًا (والتي تمثل عقدة في القائمة المرتبطة) على النحو التالي.

How to Implement Singly Linked List in JavaScript

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


// Singly Linked List class
class SinglyLinkedList {
  constructor() {
    this.head = null;
  }

  // Operations come here ?
}


إدراج في البداية


class SinglyLinkedList {
  constructor() {
    this.head = null;
  }
  // Previous `SinglyLinkedList` class codes here ?
  // .
  // .
  // .
  // Insert at the beginning
  insertAtBeginning(data) {
    const newNode = new Node(data); // Create a new node with the given data
    newNode.next = this.head; // Set the new node's next pointer to the current head
    this.head = newNode; // Update the head to be the new node
  }

  // Other operations come here ?
  // .
  // .
  // .
}


شرح: الإدراج في البداية يشبه انضمام شخص جديد إلى السطر في المقدمة. يصبحون الشخص الأول الجديد، ويرتبطون بالشخص الأول السابق.

أدخل في النهاية


class SinglyLinkedList {
  constructor() {
    this.head = null;
  }
  // Previous `SinglyLinkedList` class codes here ?
  // .
  // .
  // .
  // Insert at the end
  insertAtEnd(data) {
    const newNode = new Node(data); // Create a new node with the given data

    // check if the list does not have a head i.e the list is empty
    // NOTE: Every non-empty linked list will have a head
    if (!this.head) {
      this.head = newNode; // If the list is empty, set the new node as the head
      return;
    }
    let current = this.head; // Start at the head of the list
    while (current.next) {
      current = current.next; // Move to the next node in the list by updating the current node
    }
    current.next = newNode; // Set the next pointer of the last node to the new node
  }

  // Other operations come here ?
  // .
  // .
  // .
}


شرح: الإدراج في النهاية يشبه انضمام شخص إلى السطر في النهاية. نحتاج إلى السير حتى النهاية للعثور على آخر شخص، ثم ربطه بالشخص الجديد.

حذف عقدة


class SinglyLinkedList {
  constructor() {
    this.head = null;
  }

  // Previous `SinglyLinkedList` class codes here ?
  // .
  // .
  // .

  // Delete a node
  deleteNode(data) {
    if (!this.head) return; // If the list is empty, do nothing
    if (this.head.data === data) {
      this.head = this.head.next; // If the node to delete is the head, update the head to the next node
      return;
    }
    let current = this.head;
    while (current.next) {
      if (current.next.data === data) {
        current.next = current.next.next; // If the node to delete is found, update the next pointer to skip it
        return;
      }
      current = current.next;
    }
  }

  // Other operations come here ?
  // .
  // .
  // .
}


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

البحث عن عقدة


class SinglyLinkedList {
  constructor() {
    this.head = null;
  }

  // Previous `SinglyLinkedList` class codes here ?
  // .
  // .
  // .

  // Search note
  search(data) {
    let current = this.head; // Start at the head of the list
    while (current) {
      if (current.data === data) {
        // If the data is found, return true
        return true;
      }
      current = current.next; // Move to the next node
    }
    return false;
  }

  // Other operations come here ?
  // .
  // .
  // .
}


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

اجتياز القائمة


class SinglyLinkedList {
  constructor() {
    this.head = null;
  }
  // Previous `SinglyLinkedList` class codes here ?
  // .
  // .
  // .
  traverse() {
    let current = this.head; // Start at the head of the list
    while (current) {
      console.log(current.data); // Print the data of the current node
      current = current.next; // Move to the next node
    }
  }
}

// End of class


شرح: العبور يشبه السير في الصف وتحية كل شخص. نبدأ من الأمام ونواصل التحرك حتى نصل إلى النهاية.

خاتمة

في هذه المقالة، تعرفنا على العمليات الأساسية للقوائم المرتبطة وكيفية تنفيذها في JavaScript. في المقالة القادمة، سنتعرف على القوائم المرتبطة بشكل مزدوج.

تذكر أن إتقان القوائم المرتبطة يتطلب الممارسة. استمر في حل المشكلات وتنفيذ هياكل البيانات هذه في سيناريوهات مختلفة.



ابق على اطلاع دائم ومتصل

لضمان عدم تفويت أي جزء من هذه السلسلة وللتواصل معي لإجراء المزيد من المناقشات المتعمقة حول تطوير البرامج (الويب أو الخادم أو الهاتف المحمول أو الكشط / الأتمتة)، وهياكل البيانات والخوارزميات، وغيرها من التقنيات المثيرة المواضيع تابعوني على:

  • جيت هاب
  • لينكد إن
  • X (تويتر)

ترقبوا البرمجة وسعيدة ‍؟؟

بيان الافراج هذه المقالة مستنسخة على: https://dev.to/emmanuelayinde/how-to-implement-singly-linked-list-in-javascript-2365?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3