Stek, navbat va deklarni bog’langan ro’yhat ko’rinishida ifodalash
Halqasimon bog’langan ro’yhatlar.
Kalit so’zlar: ikki bog’lamli ro’yhatlar, ko’rsatkichli maydon, ro’hat boshi, ro’yhat oxiri, dinamik ko’rinihda ifodalash, halqasimon ro’yhatlar. Ikki bog'lamli ro'yhat Ko’pgina masalalarni hal qilishda bir tomonga yo’naltirilgan ro’yhatlardan foydalanish ma'lum bir qiyinchiliklarni keltirib chiqaradi. Sababi, bir tomonga yo’naltirilgan ro’yhatda har doim bironta elementdan ro’yhatning so’ngi elementi tomoniga harakatlanish mumkin. Lekin ko’pgina masalalar hal qilinayotganda ma'lum bir elementni qayta ishlash uchun undan oldin kelgan elementga muroyaat qilish zarurati paydo bo’ladi. Ushbuholatda berilgan elementdan oldin kelgan elementga muroyaat qilish bir bog’lamli ro’yhatda noqulay va ancha sekin amalga oshiriladihamda uni amalga oshirish algoritmi murakkablashadi.
Ushba noqulayliklarni yo’qotish maqsadida ro’yhatning har bo’g’imiga yana bitta maydonqo’shiladi. Ushbu maydon qiymati o’zidan oldin kelgan bo’g’imga muroyaatdan iborat bo’ladi. Ushba ko’rinishdagi elementlardan tashkil topgan dinamik tuzilmaga ikkitomonlama yo’naltirilgan yokiikki bog’lamli ro’yhat deyiladi.
Ikki bog’lamli ro’yhatning har bir elementi ikkita ko’rsatkichga ega. Bittasi o’zidan oldingi elementga ko’rsatadi (teskari), ikkinchisi navbatdagi elementni ko’rsatadi (to’g’ri) (chizma).
Ikki bo’g’lamli ro’yhat ustidagi amallar:
- Ro’yhat elementini yaratish;
- ro’yhatda elementniqidirish;
- Ro’yhatning ko’rsatilgan yoyiga elemental qo’yish;
- berilgan elementni ro’yhatdan o’chirish.
Ushbu rasmda chiziqli ikki bog’lamli ro’yhat tuzilmasi keltirilgan. Unda roy’hat boshi va oxirini ko’rsatuvchi ikkita ko’rsatkich qabul qilingan, head va tail. Ushbu tuzilmani C++ tilida quyidagicha e’lon qilish mumkin:
Class Node{
int info;
Node *prev;
Node *next;
}
Ushbu yaratilgan nostandart toifada ro’yhat boshi ko’rsatkichini e’lon qilishimiz mumkin.
Node *head=new Node;