كيف تنشئ بنية بيانات Linked List في Java

إن إنشاء هيكل بيانات يدير مجموعة من العناصر بفعالية يمكن أن يكون تحديًا في البرمجة. واحدة من أكثر الهياكل المستخدمة شيوعًا هي Linked List. في هذه المدونة، سنرشدك خلال عملية إنشاء Linked List في Java، حتى لو كان هناك بالفعل فئة مدمجة متاحة في مكتبة Java القياسية.

فهم المشكلة

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

الخيار المدمج

تقدم Java فئة مدمجة LinkedList في حزمة java.util، والتي تعد ملائمة ومناسبة للكثير من المواقف. ومع ذلك، فإن القدرة على إنشاء تنفيذ خاص قد يعمق فهمك ويمنحك المزيد من السيطرة على سلوك بنية البيانات.

إنشاء Linked List خاص بك

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

أولاً، نحتاج إلى إنشاء فئة Link لتمثيل كل عنصر في القائمة. إليك كيف تبدو في الشيفرة:

class Link {
    public int data1;
    public double data2;
    public Link nextLink;

    // مُنشئ Link
    public Link(int d1, double d2) {
        data1 = d1;
        data2 = d2;
    }

    // طباعة بيانات Link
    public void printLink() {
        System.out.print("{" + data1 + ", " + data2 + "} ");
    }
}

بعد ذلك، نحتاج إلى فئة تمثل القائمة بالكامل:

class LinkList {
    private Link first;

    // مُنشئ LinkList
    public LinkList() {
        first = null;
    }

    // تعيد true إذا كانت القائمة فارغة
    public boolean isEmpty() {
        return first == null;
    }

    // يُدخل Link جديد في بداية القائمة
    public void insert(int d1, double d2) {
        Link link = new Link(d1, d2);
        link.nextLink = first;
        first = link;
    }

    // يحذف الرابط في مقدمة القائمة
    public Link delete() {
        Link temp = first;
        if (first == null) {
            return null; // أو رمي استثناء
        }
        first = first.nextLink;
        return temp;
    }

    // تطبع جميع الروابط في القائمة
    public void printList() {
        Link currentLink = first;
        System.out.print("القائمة: ");
        while (currentLink != null) {
            currentLink.printLink();
            currentLink = currentLink.nextLink;
        }
        System.out.println("");
    }
}

أخيرًا، لنقم بتنفيذ دالة رئيسية لاختبار Linked List لدينا:

class LinkListTest {
    public static void main(String[] args) {
        LinkList list = new LinkList();

        // إدراج بعض العناصر
        list.insert(1, 1.01);
        list.insert(2, 2.02);
        list.insert(3, 3.03);
        list.insert(4, 4.04);
        list.insert(5, 5.05);

        // طباعة القائمة
        list.printList();

        // حذف العناصر
        while (!list.isEmpty()) {
            Link deletedLink = list.delete();
            System.out.print("تم الحذف: ");
            deletedLink.printLink();
            System.out.println("");
        }
        list.printList();
    }
}

الخاتمة

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

تحسينات إضافية

عند إتقان هذا التنفيذ الأساسي، يمكنك التفكير في إضافة:

  • قائمة مزدوجة مرتبطة: يجب أن تحتوي كل عقدة على إشارات لكل من العقد التالية والسابقة.
  • الإدراج/الحذف من الوسط أو النهاية: طرق لإضافة أو إزالة العقد من مواضع متنوعة.
  • طرق جلب وترتيب: وظائف لاسترجاع عناصر محددة أو ترتيب القائمة المرتبطة.

التمرس مع هذه التحسينات يمكن أن يرتقي بمهاراتك إلى المستوى التالي. أتمنى لك برمجة ممتعة!