O’ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI
MUXAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
Axborot texnologiyalari Kafedrasi
Ma’lumotlar tuzilmasi va algoritmlar Fani bo’yicha
Mavzu : 4 - laboratoriya ishi.
Bajardi : SWD003 – L2 Guruh talabasi
Nurmatov Baxodir .
Tekshirdi : Iskandarov S .
TOSHKENT – 2019
Masalaning berilishi :
Navbat eng kichik elementi topilsin va uning o‘rniga 0 joylashtirilsin.
Masalaning C++ dasturidagi kodi:
//---------------------------------------------------------------------------
#include
using namespace std;
struct Spis1 {
int info;
Spis1 *next;
};
//---------------------------------------------------------------------------
void View(Spis1 *b) {
Spis1 *t = new Spis1;
t = b;
while (t != NULL) {
cout <<" "<< t->info << endl;
t = t->next;
}
}
//---------------------------------------------------------------------------
Spis1* Del_All(Spis1 *b) {
Spis1 *t=NULL;
while (b != NULL) {
t = b;
b = b->next;
}
delete t;
return b;
}
void Create(Spis1 **b, Spis1 **e, int in) {
Spis1 *t = new Spis1;
t->info = in;
t->next = NULL;
if (*b == NULL)
*b = *e = t;
else {
(*e)->next = t;
*e = t;
}
}
//---------------------------------------------------------------------------
void Funk(Spis1 *p) {
Spis1 *_begin = new Spis1;
Spis1 *t = _begin;
Spis1 *max = _begin;
Spis1 *min = _begin;
t->next = p;
while (t->next != NULL) {
if (t->next->info < min->info)
min = t->next;
else
t = t->next;
}
cout << "min = " << min->info << endl;
t = p;
while (t != NULL) {
if (t->next == max) {
t->next->next = min;
while (t->next->next != min) {
delete t;
}
break;
}
else if (t->next == min) {
t->next->next = max;
while (t->next->next != max) {
delete t;
}
break;
}
t = t->next;
}
}
int main()
{
Spis1 *_begin = NULL, *_end = NULL;
int in, n, kod;
srand(time(0));
while (true) {
cout << "~~~~~~~~~~~~" << endl
<< "Hosil qilish - 1." << endl
<< "Qoshish - 2." << endl
<< "Korish - 3." << endl
<< "Ochirish - 4." << endl
<< "Topshiriq - 5." << endl
<< "Chiqish - 0." << endl
<< "~~~~~~~~~~~~" << endl;
cin >> kod;
switch (kod) {
case 1: case 2:
if (kod == 1 && _begin != NULL) {
cout << "Xotira tozalandi!" << endl;
break;
}
cout << "Elementlar sonini kiriting = ";
cin >> n;
for (int i = 1; i <= n; i++) {
in = rand() % 20;
Create(&_begin, &_end, in);
}
if (kod == 1)
cout << "Hosil qilish" << n << endl;
else
cout << "Qoshish" << n << endl;
break;
case 3:
if (!_begin) {
cout << "Navbat bosh!" << endl;
break;
}
cout << "---Navbat---" << endl;
View(_begin);
cout << endl;
break;
case 4:
_begin = Del_All(_begin);
cout << "Xotira tozalandi!" << endl;
break;
case 5:
Funk(_begin);
cout << "Elementlar ochirildi!" << endl;
break;
case 0:
if (_begin != NULL)
_begin = Del_All(_begin);
exit(0);
}
}
}
//--------------------------------------------------------------------------
Dastur natijasi :
Masalaning yechilishi usuli :
Navbatda minimal elementni topish uchun birinchi Spis1 strukturasini yaratib olamiz. Undan keyin mos ravishda qo’shish va o’chirish maydonlarini hosil qilamiz. Navbat elementlarini kiritgach topshirig’imizni bajarishga kirishamiz. Min elementini while sikli orqali bosh elementdan boshlab navbatning birinchidan elementini min o’zgaruvchiga saqlagan holda solishtirib boramiz. Minimal elementimizni topgach uni Navbatdan chiqarib, uni orniga 0 elementini kiritamiz.
Xulosa :
Men 4 - laboratoriya ishidan c++ da dinamik va yarim statik strukturalar bilan ishlashni o’rgandim.
Do'stlaringiz bilan baham: |