cout << "Navbat barcha elementlari: "q.front();
}
NATIJANI TEKSHIRISH
XULOSA:
Men ushbu laboratoriya ishida ro’yxatlar yordamida navbatni amalga oshirishni o’rgandim.
LABORATORIYA ISHI – 20
Mavzu:Dek tuzilmasi. Asosiy operatsiyalar.
Ishdan maqsad. Ushbu laboratoriya ishida talabalarSTL komponentlaridan biri bo‟lgan dek(deque) bilan ishlashni o‟rganishlari kerak.
Dek – bu ikki tomonlama navbat hisoblanadi. Ya‟ni (Double ended queues) Ikkala uchli navbat - bu ikkala uchida kengayish va qisqarish xususiyatiga ega bo'lgan ketma-ket konteynerlar. Ular vektorlarga o'xshash, ammo elementlarni kiritish va yo'q qilishda samaraliroq. Vektorlardan farqli o'laroq, tutashgan joy ajratilishini kafolatlash mumkin emas. Dek, asosan ma'lumotlar tuzilmasining ikki tomonlama navbatini amalga oshirishdir. Navbatdagi ma'lumotlar tuzilishi faqat oxiriga qo'shib, old tomondan o'chirishga imkon beradi. Bu haqiqiy hayotdagi navbatga o'xshaydi, unda odamlar old tomondan olib tashlanadi va orqada qo'shiladi. Ikkala tugagan navbat - bu qo'shilish va o'chirish operatsiyalari ikkala uchida ham mumkin bo'lgan navbatlarning alohida holati. Dek uchun funktsiyalar vektor bilan bir xil, oldinga va orqaga surish va pop operatsiyalari qo'shiladi.
Dekning asosiy funksiyalari quyidagicha:
deque insert() – ushbu funktsiya dek tarkibiga elementlarni kiritish uchun ishlatiladigan C ++ da o'rnatilgan funktsiyadir.
deque rbegin() - Dekning so'nggi elementiga ishora qiluvchi teskari iteratorni qaytaradi.
deque rend() - Dek boshlanishidan oldingi holatga ishora qiluvchi teskari iteratorni qaytaradi.
deque max_size() - deque konteyner sig'adigan elementlarning maksimal sonini qaytaradi. Ya’ni maksimal nechta element qabul qilishini anglatadi.
Topshiriqlar
Ixtiyoriy nomad dek e’lon qiling push() funksiyasi yordamida dastlabki 3 ta tub son dekga kiritilsin, Insert() funksiyasi yordamida 10 soni 7 va 12 sonlari orasiga joylashtirilsin, natija ekranga chiqarilsin.
#include
#include
using namespace std;
int a[10],n,R=0;
bool isEmpty(){
if(R==0) return true; else return false;
}
bool isFull(){
if(R>=10) return true; else return false;
}
int kirit_left(int s){
if(isFull()){cout<<"\ndek to'ldi";n=R;return EXIT_SUCCESS;}
for(int i=R;i>0;i--)
a[i]=a[i-1];
a[0]=s;R++;
}
int olish_left(){
if(isEmpty()){cout<<"\ndek bo'sh";return EXIT_SUCCESS;}
int t=a[0];
for(int i=0;i
a[i]=a[i+1];
R--;
return t;
}
int kirit_right(int s){
if(isFull()){cout<<"\ndek to'ldi";n=R;return EXIT_SUCCESS;}
a[R]=s;R++;
}
int olish_right(){
if(isEmpty()){cout<<"\ndek bo'sh";return EXIT_SUCCESS;}
R--;
return a[R];
}
int print(){
cout<
cout<
}
int main(int argc, char *argv[])
{ int n,s;cout<<"n="; cin>>n;
for(int i=0;i
if(!isFull()){
cout<<"kirit=";cin>>s;
if(i>=n/2) kirit_right(s);
else kirit_left(s);}
else {cout<<"dek to'ldi\n";break;}
}
print();
int b[n/2],k=0,c[n/2],p=0;
while(!isEmpty()){
int q=olish_left();
if(q%2==0) b[k++]=q;
if(isEmpty()) break;
int p=olish_right();
if(p%2==0) b[k++]=p;
}
int i=0;
while(i
kirit_right(b[i]);
i++;
}
print();
system("PAUSE");
return EXIT_SUCCESS;
}
Do'stlaringiz bilan baham: