void AddAfter (PNode &Head, PNode &Tail, PNode p, PNode NewNode) { if (! p->next) AddLast (Head, Tail, NewNode); //ro’yxat oxiridan
else { // qo’shish
NewNode->next = p->next; NewNode->prev = p; //yangi tugun ko’rsatkichlarini almashtirish
p->next->prev = NewNode; p->next = NewNode; //qo’shni tugunlar ko’rsatkichlarini almashtirish
} } Berilgan tugundan oldin yangi tugun qo’shish ham aynan shunga o’xshash bajariladi.
Ro’yxatdan tugunni qidirish. Ikki bog’lamli ro’yxatlarda o’tish amalini ikki yo’nalish bo’yicha bajarish mumkin – boshidan oxiriga (bir bog’lamli ro’yxatdagi kabi) yoki oxiridan boshiga.
Tugunni o’chirish. Bu protsedura uchun ham ro’yxat boshi va oxiriga ko’rsatkichlar talab etiladi, chunki ular chegara (boshi va oxirgi) elementlarini o’chirishda o’zgarishi mumkin. Birinchi qadamda qo’shni tugunlarga (agar ular mavjud bo’lsa) ko’rsatkichlar o’rnatiladi. Keyin tugun o’chiriladi va u egallab turgan xotira tozalanadi. Bu yerda o’chirilayotgan tugun ro’yxat boshi yoki oxirgi tugun ekanligi alohida tekshirib ko’riladi.
Ro’yxatda tugunni o’chirish
void Delete (PNode &Head, PNode &Tail, PNode OldNode) { if (Head == OldNode) { Head=OldNode->next; //birinchi elementni o’chirish
if (Head) Head -> prev = NULL; else Tail = NULL; //yagona elementni o’chirish
} else { OldNode -> prev -> next = OldNode -> next; if (OldNode -> next) OldNode -> next -> prev = OldNode – prev; else Tail = NULL; //oxirgi elementni o’chirish
} delete OldNode; } 3. Halqasimon ro’yxatlar Ba’zida ro’yxatlar (bir bog’lamli yoki ikki bog’lamli) halqa shaklida bog’langan bo’ladi, ya’ni oxirgi elementning next ko’rsatkichi birinchi elementga o’rnatilgan bo’ladi. Ikki bog’lamli ro’yxatlarda yuqoridagi bilan birgalikda birinchi elementning prev ko’rsatkichi oxirgi elementga o’rnatilgan bo’ladi. Bunday ro’yxatlarda ko’rsatkichi NULL bo’lgan tugun mavjud emas, ro’yxat boshi ko’rsatkichini qo’llash mumkin bo’ladi, ya’ni ro’yxat boshi ko’rsatkichini ixtiyoriy elementga o’rnatish mumkin.