19-laboratoriya ishi. Mavzu: Navbat tuzilmasi. Ro’yxatlar yordamida navbatni amalga oshirish. Ishdan maqsad


Download 19.8 Kb.
Sana19.11.2020
Hajmi19.8 Kb.
#147657
Bog'liq
19-laboratoriya ishi


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 /*Standart C++ kutubxonalarini kmpilyatorga chaqirib olamiz.*/

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;

    }

  

    // Kalitni berilgan navbatdan olib tashlash funktsiyasi    void deQueue()



    {

        // 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:



  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling