19-laboratoriya ishi. Mavzu: Navbat tuzilmasi. Ro’yxatlar yordamida navbatni amalga oshirish. Ishdan maqsad
Download 19.8 Kb.
|
19-laboratoriya ishi
- Bu sahifa navigatsiya:
- Navbat bog’langan ro’yxatlar
19-LABORATORIYA ISHI. Mavzu:Navbat tuzilmasi. Ro’yxatlar yordamida navbatni amalga oshirish. Ishdan maqsad. Ushbu laboratoriya ishida talabalar ro’yxatlaryordamida navbatni amalga oshirishni o’rganishlari kerak. Qo’yilgan masala. Talabalar topshiriq variantiga mos ravishda ro’xatlar ustida berilgan funksiyalar bilan ishlash ko’nikmasiga ega bo’lishlari kerak. Ish tartibi: Tajriba ishi nazariy ma’lumotlarini o‘rganish; Berilgan topshiriqning algoritmini ishlab chiqish; C++ dasturlash muhitida dasturni yaratish; Natijalarni tekshirish; Hisobotni tayyorlash va topshirish. Bog’langan ro’yhatlada navbatni amalga oshirishda quyidagi funksiyalardan foydalanishimiz mumkin bo’ladi: enQueue () Ushbu operatsiya orqadan keyin yangi tugunni qo'shadi va orqaga keyingi tugunga o'tadi. deQueue () Ushbu operatsiya oldingi tugunni olib tashlaydi va oldinga keyingi tugunga o'tadi. Bog’langan ro’yxatda navbatni amalga oshirishni quyidagi kodlar orqali ko’rib chiqamiz. #include using namespace std; struct QNode { // QNode nomli strukturaning e’lon qilinishi int data; // ro’yxat ma’lumotlari e’lon qilinmoqda QNode* next; //ro’yxat ko’rsatgichi e’lom qilingan QNode(int d) { data = d; next = NULL; // oxirgi ko’rsatgich qiymati 0 ga tengalashtirilyapti }
};
struct Queue { //Navbat nomli struktura e’loni QNode *front, *rear; //oldinga va orqaga ko’rsatgichlar ko’rsatilmoqda. Queue() { front = rear = NULL; }
void enQueue(int x) {
// Yangi LL tugunini yaratinsh QNode* temp = new QNode(x);
/*Agar navbat bo'sh bo'lsa, unda yangi tugun ikkala old va orqa tomonda bo'ladi*/ if (rear == NULL) { front = rear = temp; return; }
// Navbat oxirida yangi tugunni qo'shish va orqa tomonni o'zgartirish rear->next = temp; rear = temp; }
{ // If queue is empty, return NULL. if (front == NULL) return; // Oldingi old qismini saqlash va boshning bitta tugunini oldinga siljitish QNode* temp = front; front = front->next;
// Agar old NULL bo'lsa, u holda orqani NULL deb o'zgartirish if (front == NULL) rear = NULL;
delete (temp); } };
// Asosiy funksiya ishga tushirilmoqda int main() {
Queue q; q.enQueue(10); q.enQueue(20); q.deQueue(); q.deQueue(); q.enQueue(30); q.enQueue(40); q.enQueue(50); q.deQueue(); cout << " Old navbat: " << (q.front)->data << endl; cout << "Orqa navbat : " << (q.rear)->data; }
Vaqt murakkabligi: ikkala operatsiyaning vaqt murakkabligi enqueue () va dequeue () O (1) dir, chunki biz ikkala amalda ham bir nechta ko'rsatkichlarni o'zgartiramiz. Amaliyotlarning hech birida tsikl mavjud emas. Topshiriqlar: Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 3,7,9,10,15,18 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 3 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 8,7,16,18,5,28 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 2 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 15,17,3,5,15,18 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 2 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 17,27,10,11,15,18 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 1 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 3,7,9,10,22,19 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 2 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 1,4,9,10,25,17 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 1 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 33,45,54,81,77,18 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 2 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 14,16,9,10,15,13 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 3 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 19,20,25,10,37,18 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 1 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Navbat bog’langan ro’yxatlar asosida enqueue() funksiyasidan foydalanib 13,18,15,1,8,28 qiymatlar kiritilsin. Eng birinchi qiymat ekranga chiqarilsin, dequeue() funksiyasidan foydalanib 2 ta qiymat o’chirilsin. O’zgartirilgandagi qolgan qiymatlar peek() va display() dan foydalangan xolda qayta ekranga chiqarilsin. Download 19.8 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling