Muhammadiyev Umidjon 711-21 guruh



Yüklə 0,55 Mb.
tarix24.11.2023
ölçüsü0,55 Mb.
#133576
Muhammadiyev Umidjon

Muhammadiyev Umidjon

711-21 guruh

RO’YXATLAR USTIDA AMALLAR BAJARISH. BOG’LANGAN RO’YHATLAR

  • REJA:
  • Bog’langan ro’yxatlar
  • Ikki bog’lamli ro’yxat
  • Halqasimon ro’yxatlar
  • Ko’rsatgichlar bilan ishlash

Bog’langan ro’yxatlar Oddiy holda har bir tugun uchun bitta ko’rsatkich qo’llaniladi. Har bir elementda o’zidan keyingi elementni ko’rsatuvchi ko’rsatkich mavjud bo’ladi. Ro’yxat oxiridagi elementning ko’rsatkich maydoni NULL qiymatga ega. Ro’yxatni yo’qotib qo’ymaslik uchun shunday bir o’zgaruvchini ajratib olishimiz zarurki, bu o’zgaruvchi ro’yxat “boshi”ni saqlab turishi kerak
Bir bog’lamli ro’yxat. Dasturda ikkita yangi ma’lumot turini e’lon qilamiz – ro’yxat tuguni (elementi) Node va unga ko’rsatkich PNode. Tuzilma tuguni o’zida uchta maydonni – satr, butun son va boshqa tugunga ko’rsatkichni saqlaydi. Si tilida ro’yxatni e’lon qilish quyidagicha ko’rinishda bo’ladi:
struct Node { char word[40]; //ma’lumotlar maydoni int count; Node *next; //keyingi tugunga ko’rsatkich }; typedef Node *PNode; //turi: tugunga ko’rsatkich Ro’yxat boshi ko’rsatkichi Head bilan quyidagicha e’lon qilinadi: PNode Head = NULL; PNode turi nomidagi birinchi «P» harfi inglizcha pointer (ko’rsatkich) so’zidan olingan. Dasturning boshlang’ich holatida ro’yxatda hech qanday element mavjud bo’lmaydi, shuning uchun ham Head ko’rsatkichi nol adres NULL bilan belgilangan.
Ikki bog’lamli ro’yxat
Har bir tugun (chegar tugunlardan tashqari) o’zidan keyingi tugunga (next) va o’zidan oldingi tugunga (prev) ko’rsatkichlarni saqlab turadi. Oxirgi elementning next maydoni va birinchi elementning prev maydoni NULL ga ega
Bunday ro’yxatning tugunini quyidagicha e’lon qilish mumkin: struct Node { char word[40]; // ma’lumot maydoni int count; Node *next, *prev; // qo’shni tugunlarga ko’rsatkichlar }; typedef Node *PNode; //«ko’rsatkich» turidagi ma’lumot Keyingi o’rinlarda Head ro’yxat boshi tugunigaTail ro’yxatning oxiri tuguniga ko’rsatkich deb qaraymiz: PNode Head = NULL, Tail = NULL; Bo’sh ro’yxatning ikkala ko’rsatkichi ham NULL ga teng bo’ladi.
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
Ikki bog’lamli halqasimon ro’yxat Ikki bog’lamli halqasimon ro’yxat elementini quyidagicha tuzilma ko’rinishida tavsiflanadi: struct list { int field; //ma’lumot maydoni struct list *next; //keyingi elementga ko’rsatkich struct list *prev; //oldingi elementga ko’rsatkich }; Ikki bog’lamli halqasimon ro’yxat elementi ustida bajariladigan amallar: – Ro’yxatni yaratish; – Ro’yxatga yangi tugun qo’shish; – Ro’yxatdan tugunni o’chirish; – Ro’yxatga element qo’shish; – Ro’yxat elementlarini teskari tartibda chiqarish; – Ro’yxatning ikkita tugunini o’zaro almashtirish.
Ko’rsagichlar bilan ishlash
Ro’yxatni yaratish bosh (birinchi) tugunni yaratishdan boshlanadi, har bir tugun uchun oldingi va keyingi ko’rsatkichlar maydoni hosil qilinadi Ikki bog’lamli ro’yxatning bosh elementi struct list * init(int a) { //a –tugun qiymati struct list *lst;  //birinchi tugun uchun xotira ajratish lst = (struct list*)malloc(sizeof(struct list)); lst->field = a; lst->next = lst;// key ingi elementga ko’rsatkich lst->prev = lst; // oldingi elementga ko’rsatkich return(lst); }
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; p = lst; do { printf("%d",p->field); //p elementni chiqarish p = p->next; //keyingi tugunga o’tish } while (p != lst); //ro’yxatning tugallanish sharti }
Yüklə 0,55 Mb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin