#c, ساختمان داده در سی شارپ, سی شارپ

لیست پیوندی در سی شارپ (LinkedList in Csharp)

لیست پیوندی در سی شارپ

در این آموزش تیم کدگیت را با توضیح و پیاده سازی لیست پیوندی در سی شارپ همراهی کنید. پیش نیازهای این آموزش:

  1. آشنایی با شی گرایی
  2. Generic
  3. آشنایی با Iterator
  4. آشنایی با متد
  5. آشنایی به this
  6. آشنایی با constructor
  7. آشنایی با استثناها
  8. آشنایی با for

لیست پیوندی( LinkedList)

یکی از مشکلاتی که آرایه دارد ساختار و طول ثابت آن است بنابراین براحتی نمیتوان ساختار آن را طوری تغییر داد که با داده های(اطلاعات) ما همخوانی داشته باشد. همچنین آرایه هزینه insert و delete آن بالا است.

لیست پیوندی یک داده ساختار خطی است که بر خلاف آرایه طول آن میتواند تغییر کند و فضای اضافی را اشغال نکند. در لیست پیوندی هر عنصر یک Object (شی) جداگانه است. هر عنصر (از این به بعد عنصر را نود می گوییم ) در لیست دو بخش دارد 1.داده (اطلاعات) 2. ارجاع(refrence) به شی(Object) بعدی.

لیست پیوندی در جاوا

در لیست  نود آخر همیشه ارجاع آن null است(البته در single linkedlist). نود اول را در لیست پیوندی head میگویند و ارجاع آن نگه داشته میشود.همان طور که گفته شد لیست پیوندی تعداد ثابتی نود ندارد و کاملا پویا است و به راحتی با داده های ما طول لیست اضافه و کم میشود. یکی از ایرادهای لیست پیوندی نسبت به آرایه این است که اجازه دسترسی مستقیم به نود خاصی را نمی دهد.

انواع لیست پیوندی در سی شارپ

لیست ها به دسته های مختلفی تقسیم میشوند.در این آموزش به معرفی چند نمونه از لیست ها می پردازیم.انواع لیست ها شامل :

  1. Single linked list: هر نود شامل یک داده و یک ارجاع به نود بعدی هستند.
  2. Double linked List: هر نود علاوه بر ارجاع به نود بعدی، ارجاع به نود قبل هم دارند.
  3. Circular linked list: کاملا شبیه به single linked list هست فقط نود آخر ارجاعش به نود اول است.
لیست پیوندی در جاوا

لیست پیوندی در جاوا

حال نوبت به پیاده سازی لیست پیوندی در سی شارپ رسیده است.

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

این قسمت به پیاده سازی Single linked list پرداخته میشود.پیاده سازی لیست های پیوندی به صورت های مختلفی است. ما یکی از آنها را بیان می کنیم. اول یک کلاس به نام Node نیاز داریم. در این کلاس یک data وجود دارد و یک next_node که به ترتیب به داده و نود بعدی اشاره می کنند.

 public class Node<Item> {

        private Item data;
        private Node<Item> next_node;

        public Node(Item data, Node<Item> next_node) {
            this.data = data;
            this.next_node = next_node;
        }

        public Node(Node<Item> next_node) {
            this.next_node = next_node;
        }

        public Item getData() {
            return data;
        }

        public Node<Item> getNext_node() {
            return next_node;
        }



    }

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

  1. First: اولین عنصر لیست
  2. Size: سایز لیست ما
  3. Size: متدی که سایز لیست به ما میدهد
  4. GetEnumerator: متدی که یک iterator برای لیست ما بر میگرداند.
  5. isEmpty: متدی که خالی بودن لیست را به ما میگوید
  6. Add: متدی که یک نود به خانه های لیست ما اضافه می کند.
 public class SingleLinkedList<Item> {

        private Node<Item> first;
        private int size;

        public SingleLinkedList() {
            size = 0;
            first = null;
        }

        public bool isEmpty() {
            return first == null;
        }

        public int getsize() {
            return size;
        }

        public void add(Item item) {
            Node<Item> oldfirst = first;
            first = new Node<Item>(item, oldfirst);
            size++;
        }

        public IEnumerator<Item> GetEnumerator(){
            return new myEnumrator<Item> (first);
        }
            

    }

کلاس ListIterator هم یک Iterator است برای SingleLinkedList

class myEnumrator<Item>: System.Collections.Generic.IEnumerator<Item>
    {
        private Node<Item> current;

        public myEnumrator(Node<Item> First){
            Node<Item> temp = new Node<Item>(First);
            current = temp;
        }
        #region IEnumerator implementation
        public bool MoveNext ()
        {
            if (!hasNext()) {
                return false;
            }
            //Item item = current.getData();
            current = current.getNext_node ();
            return true;
        }
        public void Reset ()
        {
            throw new NotSupportedException ();
        }
        object System.Collections.IEnumerator.Current {
            get {
                throw new NotSupportedException ();
            }
        }
        #endregion
        #region IDisposable implementation
        public void Dispose ()
        {

        }
        public Item Current {
            get {
                if (current != null) {
                    return current.getData();
                }
                return default(Item);
            }
        }
        public bool hasNext(){
            if (current.getNext_node() != null)
                return true ;
            return false;
        }

    }

در آخر هم یک Main برای لیست پیوندی در سی شارپ مینویسیم.

  public static void Main (string[] args)
        {
            SingleLinkedList<String> list = new SingleLinkedList<String>();

            list.add("apple");
            list.add("orange");
            list.add("banana");

            foreach (String s in list) {
                Console.WriteLine (s);
            }

            Console.ReadKey ();
        }

پسورد: www.codegate.ir

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

1 دیدگاه در “لیست پیوندی در سی شارپ (LinkedList in Csharp)

  1. amir گفت:

    بسیار عالی . ممنون.

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

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