|
Axborot texnologiyalari” kafedrasi “MA’lumotlar tuzilmasi va algoritmlari” fanidan amaliy mashg‘ulotlarini bajarish bo‘yicha
|
bet | 23/39 | Sana | 12.06.2024 | Hajmi | 2,32 Mb. | | #262963 |
Bog'liq uslubiy qo\'llanma 3Nazorat savollari
List tushunchasi qayerda ishlatiladi?
Linked list nima uchun ishlatiladi?
List ni arraydan qanday farqi bor?
List qanday kamchiliklarga ega?
Bog‘langan ro‘yxat asosiy nima uchun ishlatiladi?
Swap va clear funksiyasi nima uchun ishlatiladi?
9-Amaliy mashg‘ulot: Stek, navbat va dek bilan ishlash algoritmlari va dasturlarini tuzish.
Ishdan maqsad. Ushbu amaliyot ishida talabalar STL komponentalaridan biri bo‘lgan stek bilan tanishib chiqishi hamda stekda mavjud bo‘lgan funksiyalar bilan ishlashni o‘rganishlari kerak.
Qo‘yilgan masala. Talabalar topshiriq variantiga mos ravishda steklar 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.
Stakning barcha elementlari bir xil bo‘lganligi sababli, C yoki C ++ dagi Arrays yordamida stekni amalga oshirish juda oson. Stakning birinchi elementini birinchi qator uyasiga, stackning ikkinchi elementini ikkinchi qator uyasiga va hokazolarni qo‘yish mumkin. Stekning yuqori qismi bu stekka qo‘shilgan so‘nggi elementning indeksidir. Stekni amalga oshirishda stack elementlari massivda saqlanadi.
STACK bu ma’lumotlar strukturasi bo‘lib, unda elementlarga faqat bitta uchida, ya’ni Last In First Out ma’lumotlar tuzilmasida kirish mumkin (ochilgan yoki itarilgan). Shunday qilib, stack elementiga faqat tepadan kirish mumkin, pastki yoki o‘rtadan emas.Stekning bu xususiyati juda muhimdir va uni yaxshi tushunish kerak.
Massivning yuqori holatini kuzatib borish uchun biz shunchaki Top of Stack deb nomlangan boshqa o‘zgaruvchini e’lon qilishimiz mumkin.
Stack LIFO algoritmini, ya’ni Last In First Out (LIFO) tuzilmasidan foydalanadi. Yangi boshlanuvchilar uchun bu biroz chalkash, ammo bu juda oson tushuncha(5-rasm)
Misol uchun:
1. Oshxonada bir-biriga qo‘yilgan 10 ta likopcha bu stek, chunki ko‘proq plastinkalarni qo‘shsak, ularni tepaga qo‘yamiz. va undan likopchani olsak, birinchi navbatda yuqori plastinani olamiz.
Shunday qilib, u LIFO (Last In First Out) ma’lumotlar tuzilishini kuzatib boradi.
5-rasm. Stack ma’lumotlar tuzilmasiga misollar.
Push va Pop - bu ma’lumotlar elementlarini stekka qo‘shish va o‘chirish uchun standart shakllar.
1. Push shunchaki ma’lumotni stekning yuqori qismiga joylashtirishdir. Yoki ushbu ro‘yxatga ma’lumotlarni qo‘shganda, biz ularni stekka surish uchun chaqiramiz.
2. Pop shunchaki elementlarni o‘chiradi, lekin faqat yuqoridan. Bu to‘plamdan pop deb nomlanadi.
Stack elementlariga faqat yuqoridan kirish imkoni berilganligi sababli, biz barcha operatsiyalarda top qismini yangilashimiz kerak.
Har safar stek yaratilganda, stek tagligi mustahkam bo‘lib qoladi, chunki stakka yuqoridan yangi elementlar qo‘shiladi.
#include
Using namespace std;
#define MAX 1000 //max size for stack
classStack
{
inttop;
public:
intmyStack[MAX]; //stack array
Stack() { top = -1; }
boolpush(intx);
intpop();
boolisEmpty();
}; boolStack::push(intitem)
{ if(top >= (MAX-1)) {
cout << "Stack Overflow!!!";
returnfalse;
}else{
myStack[++top] = item;
cout< returntrue;
}
}//removes or pops elements out of the stack
intStack::pop()
{ if(top < 0) {
cout << "Stack Underflow!!";
return0;
}else{
intitem = myStack[top--];
returnitem;
}}
//check if stack is empty
boolStack::isEmpty()
{
return(top < 0);
}
Int main()
{
classStack stack;
cout<<"The Stack Push "<stack.push(2);
stack.push(4);
stack.push(6);
cout<<"The Stack Pop : "<while(!stack.isEmpty())
{
cout<} return0;}
Navbatlar - bu birinchi bo‘lib chiqadigan (FIFO) tartibda ishlaydigan konteyner adapterlarining turi. Elementlar orqa tomonga (uchiga) kiritiladi va old tomondan o‘chiriladi.
Navbat tomonidan qo‘llab-quvvatlanadigan funktsiyalar:
empty () - navbatning bo‘sh yoki yo‘qligini qaytaradi.
size () - navbatning hajmini qaytaradi.
queue :: swap () C ++ STL-da: Ikkala navbatning tarkibini almashtiring, lekin navbati bir xil bo‘lishi kerak, ammo o‘lchamlari farq qilishi mumkin.
queue :: emplace () da C ++ STL: Navbat konteyneriga yangi element kiriting, yangi element navbat oxiriga qo‘shiladi.
C ++ STL-dagi front () funktsiyasidagi queue :: front () va queue :: back () navbatning birinchi elementiga havolani qaytaradi. back () funktsiyasi navbatning oxirgi elementiga havolani qaytaradi.
push (g) va pop () - push () funktsiyasi navbat oxiriga «g» elementini qo‘shadi. pop () funktsiyasi navbatning birinchi elementini o‘chiradi.
filter_none
#include
#include
Using namespace std;
voidshowq(queue gq)
{ queue g = gq;
while(!g.empty())
{ cout << ‘\t’<g.pop();
} cout << ‘\n’;
} queue gquiz;
gquiz.push(10);
gquiz.push(20);
gquiz.push(30);
cout << "The queue gquiz is : ";
showq(gquiz);
cout << "\ngquiz.size() : "<< gquiz.size();
cout << "\ngquiz.front() : "<< gquiz.front();
cout << "\ngquiz.back() : "<< gquiz.back();
cout << "\ngquiz.pop() : ";
gquiz.pop();
showq(gquiz);
count<<"Using iterators : ";
for(autoi = gquiz.front(); i != gquiz.back(); i++)
{ count<< i <<" ";}
return0;}
Natija:
2-misol
#include
#include
using namespace std;
int main() {
queue q;
cout << "Foydalanuvchi 7 ta raqamni kiriting: " << endl;
for (int h = 0; h < 7; h++) {
int a;
cin >> a;
q.push(a); }
cout << endl;
cout << "Navbatdagi birinchi element: " <q.pop();
cout << "Yangi birinchi element (o‘chirilgandan so‘ng): " <if (!q.empty()) cout << "Navbat bo‘sh emas!"; // navbatning bo‘shligini tekshiring (yo‘q)
system("pause");
return 0;}
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
Axborot texnologiyalari” kafedrasi “MA’lumotlar tuzilmasi va algoritmlari” fanidan amaliy mashg‘ulotlarini bajarish bo‘yicha
|