برنامه نویسی

نحوه پیاده سازی لیست پیوندی منفرد در جاوا اسکریپت

سلام 👋، به این مجموعه در لیست های پیوندی خوش آمدید. در آخرین مقاله خود با اصول اولیه لیست های پیوندی از جمله تعریف آنها، اصطلاحات، تفاوت آن با آرایه ها و انواع لیست های پیوندی آشنا شدیم. من قول دادم که در پیاده سازی لیست های پیوندی عمیق تر بپردازیم، پس بیایید شروع کنیم.

بیایید شروع کنیم

طرح کلی دوره

  1. مقدمه
  2. پیاده سازی لیست های پیوندی منفرد

  3. نتیجه گیری


مقدمه

همانطور که در مقاله قبلی آموختیم، لیست های پیوندی ساختارهای داده بنیادی در دنیای برنامه نویسی هستند. آنها از گره ها تشکیل شده اند که در آن هر گره حاوی داده ها و یک مرجع (یا پیوند) به گره بعدی (در یک لیست پیوندی منفرد) یا هر دو گره بعدی و قبلی (در یک لیست پیوندی دوگانه) در دنباله است. برخلاف آرایه‌ها، لیست‌های پیوندی عناصر را در مکان‌های حافظه پیوسته ذخیره نمی‌کنند و امکان درج و حذف کارآمد را فراهم می‌کنند.

درک مفهوم لیست پیوندی برای تسلط بر ساختارهای داده و الگوریتم ها بسیار مهم است. در این مقاله، ما به طور عمیق‌تر به پیاده‌سازی لیست‌های پیوندی می‌پردازیم و با اصول اولیه یک لیست پیوندی شروع می‌کنیم.

پیاده سازی لیست های پیوندی منفرد

یک لیست پیوندی ساده ترین نوع لیست پیوندی است که در آن هر گره به گره بعدی در دنباله اشاره می کند. درست مانند تصویر زیر.

فهرست پیوندی منفرد توسط Emmnuel Ayinde

اکنون زمان آن رسیده است که عملیات‌های اساسی فهرست پیوندی خود را پیاده‌سازی کنیم. آیا ما؟

ایجاد گره جدید

بیایید با ایجاد یک جدید شروع کنیم Node کلاس را Node کلاس یک سازنده خواهد داشت که داده های گره و a را می گیرد next اشاره گر که در ابتدا روی null.



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


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کلاس Node جدید ایجاد شده (که نشان دهنده یک گره در لیست پیوند شده است) می تواند به صورت زیر تجسم شود.

گره لیست به صورت منفرد توسط Emmnuel Ayinde

قبل از ادامه، اجازه دهید یک نمونه جدید از خود ایجاد کنیم 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


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح: پیمایش مانند این است که در خط راه بروید و به هر فردی سلام کنید. از جلو شروع می کنیم و به حرکت ادامه می دهیم تا به آخر برسیم.

نتیجه گیری

در این مقاله، با عملیات اولیه لیست های پیوندی و نحوه پیاده سازی آنها در جاوا اسکریپت آشنا شدیم. در مقاله بعدی با لیست های دارای پیوند دوگانه آشنا خواهیم شد.

به یاد داشته باشید، تسلط بر لیست های پیوندی نیاز به تمرین دارد. به حل مشکلات و پیاده سازی این ساختارهای داده در سناریوهای مختلف ادامه دهید.



به روز و متصل بمانید

برای اطمینان از اینکه هیچ بخشی از این مجموعه را از دست ندهید و برای گفتگوهای عمیق تر در مورد توسعه نرم افزار (وب، سرور، موبایل یا خراش / اتوماسیون)، ساختارهای داده و الگوریتم ها و سایر موضوعات فنی هیجان انگیز با من ارتباط برقرار کنید. من در:

با ما همراه باشید و کدنویسی را شاد کنید 👨‍💻🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا