ro’yxatlar ustida amallar bajarish. Bog’LANGAN ro’y-fayllar.doc
struct list *addelem (list *lst, int number) { struct list *temp, *p; temp=(struct list*) malloc(sizeof(list)); p=lst->next; //keyingi tugunga ko’rsatkichni saqlash
lst->next=temp; //yangi tugunga ko’rsatkich
temp->field=number; //yangi tugun ma’lumotlar maydoni
temp->next=p; //keyingi tugunga ko’rsatkichi
temp->prev=lst; //oldingi tugunga ko’rsatkichi
p->prev = temp; return(temp); } Bu funksiya qo’shilgan yangi tugunning adresini qaytaradi.
IBHR dan tugunni o’chirish. O’chirish funksiyasining argumenti sifatida o’chiriladigan tugunning ko’rsatkichi olinadi. Ro’yxatning har qanday tugunida ko’rsatkich maydoni mavjud, shuning uchun ham ko’rsatkichni bosh tugunga olish shart emas. Bu funksiya o’chiriladigan tugunning next ko’rsatkichini qaytaradi.
Tugunni o’chirish quyidagi sxema shaklida ifodalash mumkin
Mavjud tugunni o’chirish sxemasi
Tugunni o’chirish quyidagi bosqichlarni o’z ichiga oladi:
– o’chiriladigan tugundan oldingi tugunning next ko’rsatkichini o’chiriladigan tugundan keyingi tugunga o’rnatish;
– keyingi tugunning prev ko’rsatkichini, o’chiriladigan tugundan oldingi tugunga o’rnatish;
– o’chirilgan tugunni xotiradan tozalash.
struct list *deletelem (list *lst) { struct list *prev, *next; prev=lst->prev; //lst dan oldingi tugun
next=lst->next; //lst dan keyingi tugun
prev->next=lst->next; next->prev=lst->prev; free(lst); //xotirani tozalash
return(prev); } Elementni chiqarish (o’qish). Elementlarni chiqarish funksiyasining argumenti sifatida ro’yxat boshiga ko’rsatkichi olinadi. Funksiya ro’yxatning barcha tugunlari qiymatini chiqarish uchun ketma-ket o’qiydi.
void listprint(list *lst) { struct list *p;