Ishdan maqsad: Ushbu laboratoriya ishining maqsadi talabalar navbatlar mavjudligini va ularning samaradorliklarini baholashni oʻrganishlari kerak. Shu asosda saralash usullarini qiyosiy tahlil qilishlari, C++ dasturlash tilida fayllar bilan islashni va ularga oid dasturlar tuzishni oʻzlashtirishlari kerak.
Qoʻyilgan masala: Talabalar topshiriq variantiga mos saralash usuli yordamida masalani yechish dasturini yaratish koʻnikmasiga ega boʻlishlari kerak.
Ish tartibi:
• Tajriba ishi nazariy maʼlumotlarini oʻrganish;
• Berilgan topshiriqning algoritmini ishlab chiqish;
Navbat bu FIFO (First In - First Out - “birinchi kelgan – birinchi ketadi”), shunday oʻzgaruvchan uzunlikdagi ketma-ketlik, roʻyhatki, unda tuzilmaga elementlar faqat bir tomondan, yaʼni navbatning oxiridan qoʻshiladi va elementlarni tuzilmadan chiqarish boshqa tomondan, yaʼni navbat boshidan amalga oshiriladi. Navbat ustida bajariladigan asosiy amallar
Navbatga yangi element kiritilayotganda navbat oxiri koʻrsatkichi koʻrsatayotgan adresga yoziladi va shundan keyin navbat oxiri koʻrsatkichi bittaga oshiriladi. Navbatdan elementni oʻchirishda navbat boshi koʻrsatkichi koʻrsatayotgan adresdagi element oʻchiriladi va shundan keyin bu koʻrsatkichning qiymati bittaga oshiriladi. Navbatga elementlar kiritilganda navbat oxiri koʻrsatkichi shu navbat uchun ajratilgan xotira sohasining oxiriga yetib qoladi. Bunda navbat toʻlgan hisoblanadi.
Agar navbatdan elementlar oʻchiriladigan boʻlsa, navbat boshida boʻsh joy ajratiladi. Vaholanki, navbat oxiri koʻrsatkichi chegaraga yetib qolganligi sababli, navbatga yangi element kiritib boʻlmaydi. Shu sababli navbatda har safar element oʻchirilganda qolgan barcha elementlar bitta oldinga surilishi kerak boʻladi. Natijada navbat oxirida boʻsh joy ochiladi. Bu holatda navbat boshi koʻrsatkichiga xojat qolmaydi. Lekin shuni aytish kerakki, bu yondashuv bir muncha noqulay hisoblanadi. Shuning uchun har safar elementlarni surib oʻtirmaslik uchun navbatni halqasimon shaklda tashkil etamiz. Yaʼni bunda xotirada navbat sohasining oxiriga
yetib borilganda navbat boshiga oʻtib ketiladi. Ushbu holatda navbat boshi va oxiri koʻrsatkichlari xotiradagi navbat sohasining boshini koʻrsatadi. Bu ikkala koʻrsatkichlarning tengligi navbatning boʻshligini anglatadi. Halqasimon navbatda element qoʻshish amali oʻchirish amalidan koʻproq bajarilsa, navbat oxiri koʻrsatkichi navbat boshi koʻrsatkichiga “yetib oladi”. Bu holat navbat toʻlaligini anglatadi. Halqasimon navbatda elementni oʻchirish ikkala koʻrsatkich koʻrsatayotgan bitta adresda amalga oshiriladi. Bunday navbatning uzunligi boshi va oxiri koʻrsatkichlari farqi bilan aniqlanadi.
C++ tilida navbatni statik, yaʼni bir oʻlchamli massiv koʻrinishda amalga oshirishga misol:
Navbat uchun 10 ta joy ajratilgan boʻlsin, navbatni butun sonlardan iborat massiv shaklida ifodalaymiz. Bunda navbat dastlab boʻshligi sababli, navbat oxiri koʻrsatkichi R =0 boʻladi. Navbatga yangi element qoʻshish va navbatdan elementni chiqarib olish algoritmi, navbat boʻshligini va toʻlaligini tekshirish algoritmlari quyidagi dasturda keltirilgan.
Xulosa: Men Qo’ldoshev Ulug’bekushbu laboratoriya yozishdan maqsadim shu asosda saralash usullarini qiyosiy tahlil qilishlari, C++ dasturlash tilida fayllar bilan islashni va ularga oid dasturlar tuzishni oʻzlashtirishlarni o’randim.