5-ma’ruza.
Ikki bog'lamli ro'yhatlar
Reja:
1. Ikki bog’lamli ro’yhatlar va ular ustida amal bayarish algoritmlari
2. Stek, navbat va deklarni bog’langan ro’yhat ko’rinishida ifodalash
3. 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;