2-tajriba ishi. Qidiruv usullarini tadqiq qilish


Download 172.5 Kb.
bet2/2
Sana02.02.2023
Hajmi172.5 Kb.
#1147020
1   2
Bog'liq
2-laboratoriya ishi variant21

Transpozitsiya usuli


Ushbu usulda topilgan element ro‘yhatda bitta oldingi element bilan o‘rin almashtiriladi. Agarda mazkur elementga ko‘p murojaat qilinsa, bittadan oldinga surilib borib natijada ro‘yhat boshiga kelib qoladi. Ushbu usulning afzalligi shundaki, tuzilmada ko‘p murojaat qilinadigan elementlar ro‘yhat boshiga bitta qadam bilan intiladi.


Ushbu usulning qulayligi u nafaqat ro‘yhatda, balki tartiblanmagan massivda ham samarali ishlaydi (sababi faqatgina ikkita yonma-yon turgan element o‘rin almashtiriladi).
Bu usulda uchta ko‘rsatkichdan foydalanamiz (5.3-rasm):
p – ishchi ko‘rsatkich
q – yordamchi ko‘rsatkich, p dan bitta qadam orqada bo‘ladi
s – yordamchi ko‘rsatkich, p dan ikkita qadam orqada bo‘ladi

5.3-rasm. Transpozitsiya usuli bilan ro‘yhatni qayta tartibga keltirish

Biz tomonimizdan topilgan uchinchi element ro‘yhat boshiga bir qadam suriladi (ya’ni ikkinchi bo‘lib qoladi). Birinchi element ko‘rsatkichi uchinchi elementga joylashtiriladi, ikkinchi element ko‘rsatkichi to‘rtinchi, shunday qilib uchinchi element ikkinchi joyga joylashib qoladi. Agar mazkur elementga yana bir bor murojaat qilinsa, u holda u ro‘yhat boshida bo‘lib qoladi.
node *s=NULL;
node *q=NULL;
node *p=table;
while (p != NULL){
if (key == p->k){ //transponerlaymiz
if( q ==NULL){//o‘rinlashtirish shart emas
search=p;
exit(0);
}
q->nxt=p->nxt;
p->nxt=q;
if (s == NULL) table = p;
else s->nxt = p;
search=p;
exit(0);
}
s=q;
q=p;
p=p->nxt;
}

Topshiriq


Variantlar:

  1. Berilgan ro‘yhatda qidirilayotgan element transpozitsiya usuli bilan qancha murojaatda ro‘yhat boshiga kelishini aniqlash dasturini tuzing.

#include


using namespace std;

struct self_list {


int value;
struct self_list* next;
};

self_list *head = NULL, *rear = NULL;


void insert_self_list(int number)


{
self_list* temp = (self_list*)malloc(sizeof(self_list));

temp->value = number;


temp->next = NULL;

if (head == NULL)


head = rear = temp;

else {
rear->next = temp;


rear = temp;
}
}

bool search_self_list(int key)


{
self_list* current = head;
self_list* prev = NULL;
self_list* prev_prev = NULL;

while (current != NULL) {


if (current->value == key) {


if (prev_prev != NULL) {


prev_prev->next = current;


prev->next = current->next;
current->next = prev;
}

else if (prev != NULL) {


prev->next = current->next;


current->next = prev;
head = current;
}
return true;
}
prev_prev = prev;
prev = current;
current = current->next;
}

return false;


}

void display()


{
if (head == NULL) {
cout << "List is empty" << endl;
return;
}

self_list* temp = head;


cout << "List: ";

while (temp != NULL) {


cout << temp->value;
if (temp->next != NULL)
cout << " --> ";

temp = temp->next;


}
cout << endl
<< endl;
}

int main()


{
insert_self_list(1);
insert_self_list(2);
insert_self_list(3);
insert_self_list(4);
insert_self_list(5);
insert_self_list(6);
display();
int i;
for( i=0;i<6;i++){
if (search_self_list(4) )
cout << "Qidiridh: 4" << endl;
else
cout << "Not Found: 4" << endl;

display();


++i;
}
cout<<"Murojaatlar soni "<return 0;
}


Download 172.5 Kb.

Do'stlaringiz bilan baham:
1   2




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