LinkedList. Kirish.

Bugungi maqola LinkedListga bag'ishlanadi. LinkedList massiv kabi chiziqli ma'lumotlar strukturasi(MS) bo'lib, lekin undagi elementlarning to'liq-kesiq o'rni (indeks) mavjud emas. Elementlar o'zara ko'rsatkich(yo'llanma) yoki "link"lar bilan bo'glanadi.

So'zni Linkedlist tashkil etuvchisi sodda MS "node"dan boshlaymiz. O'zbekchasiga xalqa deb olishimiz mumkin. (Aslida, terminlarni to'g'ridan to'g'ri o'zbekchaga tarjima qilish tarafdori emasman.) Quyidagi rasmda xalqa ifodalangan.

Ushbu MS ko'plab boshqa katta MS lar uchun qurilishi materiali vazifasini bajarib beradi. Rasmda ko'rinib turganidek, xalqa o'zida qandaydur obyektni va keyingi xalqaga yo'llanmani saqlaydi. Quyidagi kod parchasida node ifodalangan.

/*LinkedList uchun node(xalqa).
   T - bu umumiiy tip. */
    public class LinkedListNode<T>
    {
        /// T tipdagi qiymat bilan node uchun yangi obyekt yaratadi.
        public LinkedListNode(T value)
        {
            Value = value;
        }
        /// nodening qiymati
        public T Value { get; set; }
        /// keyingi nodega yo'llanma.
        public LinkedListNode<T> Next { get; set; }
    }

Xalqada saqlanayotgan elementlarning tipi har doim bir bo'lishi lozim. Bir necha xalqalarni birlashtirgan holda zanjirni hosil qilamiz. Demak, zanjir bu bir dan ortiq xalqalarning to'plami bo'lib, ular o'zaro faqat birgina link bilan bog'lanadi(Keyingi maqolalarimizda bog'lanishlar soni birdan ortiq bo'lgan holatni ham e'tiborga olib o'tamiz.). Quyidagi rasmda zanjirga misol keltirilgan.


Zanjirning birinchi elementi Bosh va oxirgi elementi mos ravishda Dum deb ataladi. Zanjirning har bir xalqasi o'zidan keyingi xalqaga link yordamida bo'glangan. [A,B,C,D,E] bular xalqalarda saqlanayotgan obyektlardir. Bu zanjir LinkedList bo'lishi uchun bir necha qo'chimcha metodlarni qo'shishimiz lozim. Quyidagi kodda LinkedList uchun interface berilgan.

/*
     *  LinkedList uchun interface
     */
    public interface ILinkedList<T>
    {
          /*LinkedList ni barcha nodelardan tozalaydi*/
        void Clear();
        /*Obyektni list boshiga qo'shadi*/
        void AddFirst(T value);
        /*Obyektni list oxiriga qo'shadi*/
        void AddLast(T value);
        /*Ma'lum bir xalqadan oldin yangi xalqa qo'shadi*/
        void InsertBefore(LinkedListNode<T> node, T value);
        /*Ma'lum bir xalqaga yangi xalqa qo'shadi*/
        void InsertAfter(LinkedListNode<T> node, T value);
        /*List boshidagi xalqani o'chiradi va qiymatini qaytaradi*/
        T RemoveFirst();
        /*List oxiridagi xalqani o'chiradi va qiymatini qaytaradi*/
        T RemoveLast();
        /*Berilgan nodeni LinkedListdan o'chiradi.*/
        T Remove(LinkedListNode<T> node);
        /*Qiymat bo'yicha nodeni topadi.*/
        LinkedListNode<T> Find(T value);
    }

Yuqorida berilgan interfacedagi metodlarga qisqacha to'xtalib o'tamiz. T bu .Net tillar oilasining qulayliklaridan biri.
Ushbu ushbu link orqali yaqindan tanishingiz mumkin. Qisqacha ma'nosi, class ichidagi metodlarni parameterning tipiga bo'gliq bo'lmagan vaziyatda, tipni umumiy ko'rinishda e'lon qilish.

Metod Tavsifi
Clear()

LinkedListni barcha nodelardan tozalaydi. Bu metod chaqirilgandan keyin LinkedListimiz yana bo'sh bo'ladi.

AddFirst(T value)

LinkedListning Boshini boshqa node bilan almashtiradi. Masalan, aytaylik F obyektni shu metodni yordami LinkedListga qo'shaylik, natijada bosh Fga teng bo'ladi.

InsertBefore(LinkedListNode<T> node, T value)

LinkedListdagi "node"dan oldingi o'ringa yangi "value" qiymatli node qo'shadi. Masalan: [A,B,C,D] ga B dan oldin "F" ni qo'shsak, natija [A,F,B,C,D] bo'ladi.

InsertAfter(LinkedListNode<T> node, T value)

LinkedListdagi "node"dan keyingi o'ringa yangi "value" qiymatli node qo'shadi. Masalan: [A,B,C,D] ga B dan keyin "F" ni qo'shsak, natija [A,B,F,C,D] bo'ladi. InsertBefore(LinkedListNode<T> node, T value) ga teskari metod.

AddLast(T value)

AddFirst(T value) ga teskari simmetrik metod. Ya'ni F qo'shilgan holatda, Dum F ga teng bo'ladi.

Remove(LinkedListNode<T> node)

LinkedListdan berilgan xalqani o'chiradi va o'chirilgan xalqa qiymatini qaytaradi.

RemoveFirst()

LinkedListning boshini o'chiradi va o'chirilgan xalqa qiymatini qaytaradi.

RemoveLast()

LinkedListning dumini o'chiradi va o'chirilgan xalqa qiymatini qaytaradi.

Find(T value)

LinkedListdan berilgan qiymat bo'yicha xalqani topadi.

Keyingi maqolamiz ushbu interfacening implementatsiya haqida bo'ladi.

Manba:


JONNY

Muallif haqida

JONNY Arduino, Java, C#, Android, Windows, Linux, Debian, Javascript. O'zbekistonni rivojlantiramiz! Dasturlash orqali vatanimizni yangi marralarga olib chiqamiz.


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!