كيف أقوم بإنشاء بنية بيانات القائمة المرتبطة في Java؟[مغلق]

StackOverflow https://stackoverflow.com/questions/10042

سؤال

ما هي أفضل طريقة لإنشاء قائمة مرتبطة في Java؟

هل كانت مفيدة؟

المحلول

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

ملحوظة:في المثال، لا يحتوي كائن الارتباط فعليًا على كائن ارتباط آخر - com.nextLink هو في الواقع مجرد إشارة إلى رابط آخر.

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

    //Link constructor
    public Link(int d1, double d2) {
        data1 = d1;
        data2 = d2;
    }

    //Print Link data
    public void printLink() {
        System.out.print("{" + data1 + ", " + data2 + "} ");
    }
}

class LinkList {
    private Link first;

    //LinkList constructor
    public LinkList() {
        first = null;
    }

    //Returns true if list is empty
    public boolean isEmpty() {
        return first == null;
    }

    //Inserts a new Link at the first of the list
    public void insert(int d1, double d2) {
        Link link = new Link(d1, d2);
        link.nextLink = first;
        first = link;
    }

    //Deletes the link at the first of the list
    public Link delete() {
        Link temp = first;
        if(first == null){
         return null;
         //throw new NoSuchElementException(); // this is the better way. 
        }
        first = first.nextLink;
        return temp;
    }

    //Prints list data
    public void printList() {
        Link currentLink = first;
        System.out.print("List: ");
        while(currentLink != null) {
            currentLink.printLink();
            currentLink = currentLink.nextLink;
        }
        System.out.println("");
    }
}  

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("deleted: ");
            deletedLink.printLink();
            System.out.println("");
        }
        list.printList();
    }
}

نصائح أخرى

جافا لديها قائمة مرتبطة التنفيذ، الذي قد ترغب في التحقق منه.يمكنك تنزيل JDK ومصادره على java.sun.com.

يستخدم java.util.LinkedList.مثله:

list = new java.util.LinkedList()

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

public void insert(int d1, double d2) { 
    Link link = new Link(d1, d2); 

    if(first==null){
        link.nextLink = null;
        first = link; 
        last=link;
    }
    else{
        last.nextLink=link;
        link.nextLink=null;
        last=link;
    }
} 

من الأفضل استخدام java.util.LinkedList، لأنه ربما يكون أكثر تحسينًا بكثير من الذي ستكتبه.

//slightly improved code without using collection framework

package com.test;

public class TestClass {

    private static Link last;
    private static Link first;

    public static void main(String[] args) {

        //Inserting
        for(int i=0;i<5;i++){
            Link.insert(i+5);
        }
        Link.printList();

        //Deleting
        Link.deletefromFirst();
        Link.printList();
    }


    protected  static class Link {
        private int data;
        private Link nextlink;

        public Link(int d1) {
            this.data = d1;
        }

        public static void insert(int d1) {
            Link a = new Link(d1);
            a.nextlink = null;
            if (first != null) {
                last.nextlink = a;
                last = a;
            } else {
                first = a;
                last = a;
            }
            System.out.println("Inserted -:"+d1);
        }

        public static void deletefromFirst() {
            if(null!=first)
            {
                System.out.println("Deleting -:"+first.data);
                first = first.nextlink;
            }
            else{
                System.out.println("No elements in Linked List");
            }
        }

        public static void printList() {
            System.out.println("Elements in the list are");
            System.out.println("-------------------------");
            Link temp = first;
            while (temp != null) {
                System.out.println(temp.data);
                temp = temp.nextlink;
            }
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top