Ikki bog’lamli ro’yxatlar ustida bajariladigan amallar. Ro’yxat boshidan tugun qo’shish. Ro’yxat boshidan yangi NewNode tugunini qo’shish uchun:
1) NewNode tugunining next ko’rsatkichini mavjud ro’yxatning boshiga o’rnatish va uning prev ko’rsatkichini NULL bilan ta’minlash;
2) Oldingi birinchi tugunning prev ko’rsatkichini (agar u mavjud bo’lsa), NewNode tuguniga o’rnatish;
3) Ro’yxat boshini yangi tugunga o’rnatish;
4) Agar ro’yxatda birorta ham element mavjud bo’lmasa, ro’yxatning oxirgi ko’rsatkichini ham yangi tugunga o’rnatish
Ikki bog’lamli ro’yxatga yangi tugun qo’shish
Ushbu sxema asosida quyidagi protsedura ishlaydi:
void AddFirst(PNode &Head, PNode &Tail, PNode NewNode) { NewNode->next = Head; NewNode->prev = NULL; if ( Head ) Head->prev = NewNode; Head = NewNode; if (! Tail ) Tail = Head; // bu birinchi element
} Ro’yxat oxiridan tugun qo’shish. Ro’yxat oxiridan yangi NewNode tugunini qo’shish aynan ro’yxat boshidan yangi tugun qo’shish protsedurasi bilan o’xshash bo’lib, faqat bunda protseduraning barcha satrida Head ni Tail bilan, prev ni next bilan mos ravishda o’zaro o’rnini almashtirib chiqish kifoya bo’ladi.
Berilgan tugundan keyin yangi tugun qo’shish. Yangi tugun NewNode ning adresi va ro’yxatda mavjud bo’lgan tugunlardan birining p adresi berilgan. Yangi tugunni ro’yxatning p adresidan keyin qo’shish talab qilingan bo’lsin. Agar p tugun oxirgi bo’lsa, u holda qo’shish amali ro’yxat oxiridan tugun qo’shish kabi bajariladi (yuqoridagi misollarga qarang). Agar r tugun – oxirgi bo’lmasa, u holda qo’shish amali quyidagicha ikki bosqichda amalga oshiriladi:
1) yangi tugun ko’rsatkichlarini berilgan tugunning (next) ko’rsatkichiga va keyingi tugunning (prev) ko’rsatkichlariga o’rnating; 2) qo’shni tugunning ko’rsatkichlarini ham xuddi shunday NewNode tugun ko’rsatkichlariga o’rnating.
Ikki bog’lamli ro’yxatda berilgan tugundan keyin yangi tugun qo’shish
Xuddi shunday usul bilan quyidagi protsedura ishlaydi: