Маълумотлар тузилмаси ва алгоритми (3-deadline. 5-6)
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.