C++ std::queue (Navbat)
C++ tilida STL queue navbatdagi maʼlumotlar strukturasining funksionalligini taʼminlaydi.
Navbatdagi ma'lumotlar strukturasi FIFO (birinchi kiruvchi birinchi chiqadi) tamoyiliga amal qiladi, bunda birinchi qo'shilgan elementlar birinchi bo'lib o'chiriladi.
Navbatdagi ma'lumotlar tuzilmasi

Tavsiya etilgan o'qishlar
Queue Data StructureC++ da navbat yaratish uchun avval queue sarlavha faylini kiritishimiz kerak.
#include <queue>
Ushbu faylni import qilgandan so'ng, biz quyidagi sintaksis yordamida queue yaratishimiz mumkin:
queue<type> q;
Bu erda type biz navbatda saqlamoqchi bo'lgan data type ni bildiradi. Masalan,
// butun sonli ma'lumotlar turidagi navbat yaratish
queue<int> integer_queue;
// string ma'lumotlar turi navbatini yaratish
queue<string> string_queue;
C++ tilida queue class bo'lib, navbatdagi turli operatsiyalarni bajarish uchun turli usullarni taqdim etadi.
Usullar tavsifi push() Elementni navbatning orqa tomoniga kiritadi. pop() Navbatning oldingi qismidan elementni olib tashlaydi. front() Navbatning birinchi elementini qaytaradi. back() Navbatning oxirgi elementini qaytaradi. size() Navbatdagi elementlar sonini qaytaradi. empty() Agar navbat bo'sh bo'lsa, true ni qaytaradi.
Elementni navbatning orqa tomoniga kiritish uchun push() usulidan foydalanamiz. Masalan,
#include <iostream>
#include <queue>
using namespace std;
int main() {
// qatorlar qatorini yarating
queue<string> animals;
// elementlarni navbatga surish
animals.push("Cat");
animals.push("Dog");
cout << "Queue: ";
// navbat elementlarini chop etish
// navbat bo'sh bo'lguncha aylanish
while(!animals.empty()) {
// elementni chop eting
cout << animals.front() << ", ";
// navbatdan ochilgan element
animals.pop();
}
cout << endl;
return 0;
}
Chiqish
Queue: Cat, Dog,
Yuqoridagi misolda biz hayvonlar deb ataladigan queue strings ni yaratdik. Bu erda biz navbatning oxiriga elementlar qo'shish uchun push() usulidan foydalandik.
animals.push("Cat");
animals.push("Dog");
To'g'ridan-to'g'ri navbat mazmunini chop etish o'rniga, biz while siklidan va turli navbat usullaridan foydalandik.
while(!animals.empty()) {
cout << animals.front() << ", ";
animals.pop();
}
Buning sababi, STL navbati STL Container Adapter bo'lib, u standart navbat ma'lumotlar tuzilmasi kabi harakat qilish uchun cheklovchi kirishni ta'minlaydi.
Natijada, biz vectors yoki boshqa containers orqali takrorlash kabi navbatni takrorlay olmaymiz.
Buning o'rniga, biz uning old qismini chop qilamiz va keyin navbat bo'sh bo'lgunga qadar elementni sikl ichida qayta-qayta ochamiz.
Biz keyingi bo'limlarda pop() , front() va empty() haqida bilib olamiz.
Navbatning old qismidan elementni olib tashlash uchun pop() usulidan foydalanishimiz mumkin. Masalan,
#include <iostream>
#include <queue>
using namespace std;
// display_queue yordam dasturi uchun funksiya prototipi
void display_queue(queue<string> q);
int main() {
// qatorlar qatorini yarating
queue<string> animals;
// elementni navbatga surish
animals.push("Cat");
animals.push("Dog");
animals.push("Fox");
cout << "Initial Queue: ";
display_queue(animals);
// elementni navbatdan olib tashlang
animals.pop();
cout << "Final Queue: ";
display_queue(animals);
return 0;
}
// navbatni ko'rsatish uchun yordamchi dastur
void display_queue(queue<string> q) {
while(!q.empty()) {
cout << q.front() << ", ";
q.pop();
}
cout << endl;
}
Chiqish
Initial Queue: Cat, Dog, Fox,
Final Queue: Dog, Fox,
Yuqoridagi misolda biz navbatdan elementni olib tashlash uchun pop() usulidan foydalandik.
Dastlab, navbatning mazmuni "Cat" , "Dog" va "Fox" .
// oldingi elementni olib tashlaydi
animals.pop();
Bu erda animals.pop() navbatning old qismidagi elementni, ya'ni "Cat" bo'lgan boshida kiritilgan elementni olib tashlaydi.
Demak, oxirgi navbatda "Dog" va "Fox" elementlari mavjud.
Biz quyidagi usullar yordamida queue elementlariga kirishimiz mumkin:
-front() - navbatning oldingi qismidan elementni qaytaradi
-back() - navbatning orqa qismidagi elementni qaytaradi
Masalan,
#include <iostream>
#include <queue>
using namespace std;
int main() {
// int qatorini yarating
queue<int> nums;
// elementni navbatga surish
nums.push(1);
nums.push(2);
nums.push(3);
// oldingi elementni oling
int front = nums.front();
cout << "First element: " << front << endl;
// orqa tarafdagi elementni oling
int back = nums.back();
cout << "Last element: " << back << endl;
return 0;
}
Chiqish
First element: 1
Last element: 3
Yuqoridagi misolda biz front() va back() usullaridan sonlar deb nomlangan butun sonlar qatoridan birinchi va oxirgi elementlarni olish uchun foydalandik.
Biz birinchi elementni, ya'ni oldingi elementni olishimiz mumkin:
// 1 qaytaradi
nums.front()
Bu erda birinchi bo'lib 1 qo'yilgan, shuning uchun u old tomonda.
Xuddi shunday, biz oxirgi elementni, ya'ni orqa (orqa) elementni topamiz:
// qaytaradi 3
nums.back()
Bu erda 3 oxirgi kiritilgan, shuning uchun u orqada.
queue dagi elementlar sonini olish uchun size() usulidan foydalanamiz. Masalan,
#include <iostream>
#include <queue>
using namespace std;
int main() {
// qatorlar qatorini yarating
queue<string> languages;
// elementni navbatga surish
languages.push("Python");
languages.push("C++");
languages.push("Java");
// navbat hajmini oling
int size = languages.size();
cout << "Size of the queue: " << size;
return 0;
}
Chiqish
Size of the queue: 3
Yuqoridagi misolda biz tillar deb nomlangan qatorlar qatorini yaratdik va unga uchta element qo'shdik.
Keyin navbatdagi elementlar sonini topish uchun size() usulidan foydalandik:
// qaytaradi 3
languages.size();
Navbatga uchta element qo'shganimiz sababli, languages.size() 3 ni qaytaradi.
queue bo'sh yoki yo'qligini tekshirish uchun empty() usulidan foydalanamiz. Bu usul qaytaradi:
Masalan,
#include <iostream>
#include <queue>
using namespace std;
int main() {
// qatorlar qatorini yarating
queue<string> languages;
cout << "Is the queue empty? ";
// navbat bo'sh yoki yo'qligini tekshiring
if (languages.empty()) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
cout << "Pushing elements..." << endl;
// elementni navbatga surish
languages.push("Python");
languages.push("C++");
cout << "Is the queue empty? ";
// navbat bo'sh yoki yo'qligini tekshiring
if (languages.empty()) {
cout << "Yes";
}
else {
cout << "No";
}
return 0;
}
Chiqish
Is the queue empty? Yes
Pushing elements...
Is the queue empty? No
Yuqoridagi misolda biz queue bo'sh yoki yo'qligini aniqlash uchun empty() usulidan foydalanganmiz,
if (languages.empty()) {
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
Dastlab, navbatda unda hech qanday element yo'q. Shunday qilib, languages.empty() true ni qaytaradi.
Keyin navbatga elementlarni qo'shamiz.
Keyin navbat bo'sh yoki yo'qligini aniqlash uchun yana languages.empty() dan foydalanamiz. Bu safar false ni qaytaradi.
Shuningdek oʻqing