7-laboratoriya mashg’uloti. Bog'langan ro'yxat


Download 218 Kb.
bet1/5
Sana05.01.2022
Hajmi218 Kb.
#220587
  1   2   3   4   5
Bog'liq
7-laboratoriya mashguloti MTA 2020 2021


7-laboratoriya mashg’uloti. Bog'langan ro'yxat
1-misol. Ro’yxat ustida quyidagi amallarni bajaruvchi prosedura ѐki funksiyalarni o’z ichiga olgan dasturni tuzing:


  • ro’yxatga element qo’shish;







  • ro’yxatdan element qidirish;




  • ro’yxatdan element o’chirish;

dasturi quyida keltirilgan:

#include
#include
#include
#include
struct TNode {
int value;
TNode* pnext;
TNode(int val): pnext(0), value(val) {}
};


  • Ro’yxatga element qo’shish

void add2list(TNode **pphead, int val) {


TNode **pp = pphead, *pnew;
while(*pp) {
if(val < (*pp)->value)
break;
else
pp = &((*pp)->pnext);
}
pnew = new TNode(val);

pnew->pnext = *pp;


*pp = pnew;
}


  • Ro’yxat elementlarini ekranga chiqarish

void print(TNode *phead) {


TNode* p = phead;
while(p) {
cout <<""<< p->value<<"|" <<"--> ";


  1. = p->pnext;

}
cout << endl;


}

TNode* Find(TNode *phead, int x)


{
TNode *p=phead;
while(p)
if (p->value==x) return p;
else p = p->pnext;
return 0;
}


  • Ro’yxat elementini o’chirish

void deleteList(TNode *phead) {


if(phead) {
deleteList(phead->pnext);
if(phead)
delete phead;

}
}




  • Asosiy qism

int main() {int mas[1000], N, key; TNode* T; TNode *phead = 0;


//srand(time(0));
cout<<"Royhat uzunligini kirit"<cin>>N;
cout<<"Elementlarni kirit!"<for(int j=0; jcin>>mas[j];
for(int i = 0; i < N; ++i)
add2list(&phead,mas[i]);
cout<<"Qidiruv elementni kiriting!"<cin>>key;
// rand() % 100);
cout << "Elements of the list:" << endl;
print(phead);
T=Find(phead,key);
if (T==0) cout <<"Bunday element yoq"<else cout <<"Bunday element bor"<<" "<value<<"
"<deleteList(phead);
getch();
}
2-misol. Daraxt ustida amallar:


  • Daraxtning ildizini hosil qilish;




  • Daraxtga element qo’shish;


  • Daraxtdan element o’chirish;



#include


#include
#include
#pragma hdrstop
typedef int Tinfo;
typedef struct Item* Pitem;
struct Item {
Tinfo Key;
Pitem Left;
Pitem Right;
};
class TTree{
private :
Pitem Root;
public :
TTree();
void Add(Tinfo);
void Del(Tinfo);
void View();
void Exist(Tinfo Key);
~TTree();
};
//-----------------------------------
TTree::TTree(){
Root=0;
};
//----------------------------

static void IniTree(Pitem& P,Tinfo X)


{
P=new Item;
P->Key=X;
P->Left=0;
P->Right=0;
};
static void Iendleft(Pitem& P,Tinfo X)
{
Pitem R;
R=new Item;
R->Key=X;
R->Left=0;
R->Right=0;
P->Left=R;
}
static void InRight(Pitem P,Tinfo X)
{
Pitem R;
R=new Item;
R->Key=X;
R->Left=0;
R->Right=0;
P->Right=P;
}
static void Tree_Add(Pitem P,Tinfo X)
{
int OK;
OK=false;
while(!OK){

if(X>P->Key)


if(P->Right!=0)
P=P->Right;
else {
InRight (P,X);
OK=true;
}
else if(P->Left!=0)P=P->Left;
else{Iendleft(P,X);
OK=true;}
}
}
void TTree::Add(Tinfo Key)
{
if(Root==0)
IniTree(Root,Key);
else Tree_Add(Root,Key);
}
static void delete_(Pitem& P,Tinfo);

static void Del(Pitem& R,Pitem& Q)


{
if(R->Right!=0)
Del(R->Right,Q);
else
{
Q->Key=R->Key;
Q=R;
R=R->Left;
}
}

static void delete_(Pitem& P,Tinfo X)


{
Pitem Q;
if(P!=0)
if(X
Key)
delete_(P->Left,X);
else
if(X>P->Key)
delete_(P->Right,X);
else{
Q=P;
if(Q->Right==0)
P=Q->Left;
else
if(Q->Left==0)
P=P->Right;
else
Del(Q->Left,Q);
delete Q;
}
else
cout<<"Bunday element daraxtda yuq..."<}
void TTree::Del(Tinfo Key)
{
delete_(Root,Key);
}

static void PrintTree(Pitem R,Tinfo L)


{
int i;
if(R!=0){
PrintTree(R->Right,L+3);
for(i=1;i<=L;i++)
cout<<" ";
cout<Key<PrintTree(R->Left,L+3);
}
}

void TTree::View()


{
PrintTree(Root,1);
}
//-----------------------------
static void Search(Pitem& P,Tinfo X )
{
if(P==0){
cout<<"bunday element yuq"<}else
if(X>P->Key)
Search(P->Right,X);
else if(X
Key)
Search(P->Left,X );
else
cout<<"Bunday element bor..."<}

void TTree::Exist(Tinfo Key)


{
Search(Root,Key);
}
static void Node_Dispose(Pitem P)
{
if(P!=0){
if(P->Left!=0)
Node_Dispose(P->Left);
if(P->Right!=0)
Node_Dispose(P->Right);
delete P;
}
}
TTree::~TTree()
{
Node_Dispose(Root);
}
//------------------------------------------------------------

void inputKey(char S[128],Tinfo& Key)


{

cout<
cin>>Key;

}


TTree *Tree=new TTree;

int N;
Tinfo Key;


int main(int argc,const char* argv[] )
{

do{

cout<<"1-daraxtga element qoshish..."<>N;

switch(N){


case 1:{inputKey("qoshiluvchi element qiymatini
kiriting...",Key);
Tree->Add(Key);
};
case 2:{inputKey("uchiriladigan element qiymatini
kiriting...",Key);

istagan ",Key);Tree


Tree->Del(Key);
} break;
case 3:Tree->View();break;
case 4:{
inputKey("element kiriting,borligini
->Exist(Key);
} break; }
}while(!(N==5));

siz


bilishni


getch();
return EXIT_SUCCESS;

}
Natija:



10-topshiriq


1–variant. Avtobus parkidagi avtobus haqidagi dinamik ma’lumotlardan tashkil topgan dastur tuzing.
Har bir avtobus haqidagi ma’lumotlar quyidagilardan iborat:


  • avtobus nomeri (raqami);







  • yo’nalish nomeri;

Dastur quyidagilarni ta’minlab berishi kerak:




  • parkdagi barcha avtobuslar haqidagi dastlabki ma’lumotlarni ro’yxat ko’rinishida taqdim etish;




  • har bir avtobus parkdan chiqaѐtganda uning nomeri kiritiladi va u haqidagi ma’lumotlar parkdagi avtobuslar haqidagi ma’lumotlar ro’yxatidan chiqarilib, yo’nalishda bo’lgan avtobuslar haqidagi ma’lumotlar ro’yxatiga qo’shib qo’yish;


  • har bir avtobus yo’nalishdan parkka kirganda uning nomeri kiritiladi va u haqidagi ma’lumotlar yo’nalishda bo’lgan avtobuslar haqidagi ma’lumotlar ro’yxatidan parkdagi avtobuslar haqidagi ma’lumotlar ro’yxatiga qo’shib qo’yish;




  • so’rov bo’yicha parkda ѐki yo’nalishda bo’lgan avtobus haqidagi ma’lumotlarni chiqarish.


2–variant. Kutubxonada mavjud kitobning ayni vaqtdagi holati haqidagi ma’lumotlar bilan ishlovchi dastur yarating.
Har bir kitob quyidagi ma’lumotlardan tashkil topadi:


  • UDK nomeri;




  • Muallif ismi sharifi;




  • Nomi;







  • Kitobning kutubxonadagi miqdori;

Dastur quyidagilarni amalga oshirishi kerak:




  • kutubxonadagi barcha kitoblar haqidagi ma’lumotlarni ikkilik daraxt ko’rinishida tasvirlash;




  • kutubxonaga kelgan yangi kitob haqidagi ma’lumotlarni ro’yxatga qo’shish;




  • kutubxonadan chiqarib tashlangan kitob haqidagi ma’lumotlarni ro’yxatdan chiqarib tashlash;




  • so’rov bo’yicha kutubxonada mavjud kitoblar haqidagi ma’lumotlarni chiqarilgan yili bo’yicha tartiblab bosmaga chiqarish.


3–variant. Ayni vaqtdagi buyurtma berilgan aviabiletlar haqidagi ma’lumotlar bilan ishlovchi dastur tuzing.
Har bir buyurtma qilingan ma’lumotlar quyidagilagdan tashkil topadi:


  • belgilangan punkt (bo’lim);




  • reys nomeri;




  • familiya ismi sharifi;


  • uchish ko’zlangan sana;

Dastur quyidagilarni amalga oshirishi kerak:







  • ro’yxatga yangi buyurtma qo’shish;




  • buyurtmani o’chirish;




  • belgilangan reys nomeri va uchish vaqti bo’yicha buyurtmalarni chiqarish;




  • barcha buyurtmalarni chiqarish.


4–variant. Ayni vaqtdagi buyurtma berilgan aviyabiletlar haqidagi ma’lumotlar bilan ishlovchi dastur tuzing.
Har bir buyurtma qilingan ma’lumotlar quyidagilagdan tashkil topadi:


  • belgilangan punkt (bo’lim);




  • reys nomeri;




  • familiya ismi sharifi;




  • uchish ko’zlangan sana;

Dastur quyidagilarni amalga oshirishi kerak:




  • barcha buyurtmalarni ikkilik daraxt tarzida saqlash;




  • ro’yxatga yangi buyurtma qo’shish va o’chirish;




  • belgilangan reys nomeri va uchish vaqti bo’yicha ketma-ket o’chirilish tartibida bosmaga chiqarish;




  • barcha buyurtmalarni chiqarish.



Download 218 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling