15-Laboratoriya mashg’uloti Bog\'langan ro\'yxat. Ikkala bog\'langa
15-Laboratoriya mashg’uloti
Bog'langan ro'yxat. Ikkala bog'langan ro'yxat bilan ishlash
Bog'langan ro'yxatlar
Bog'langan ro'yxat - bu ma'lumotlar bazasining asosiy tuzilishi, bu erda har bir element biz keyingi elementga olishimiz kerak bo'lgan ma'lumotlarni o'z ichiga oladi.
Bog'langan ro'yxatlarning massivlarga nisbatan asosiy ustunligi shundaki, havolalar bizga buyumni samarali ravishda qayta tuzish imkoniyatini beradi. Ushbu moslashuvchanlik ro'yxatdagi har qanday o'zboshimchalik bilan tezkor kirish hisobiga erishiladi, chunki ro'yxatdagi elementga kirishning yagona usuli bu havolalarni boshidanoq kuzatib borishdir.
Quyidagi misollar bog'langan ro'yxat uchun. Har bir misol ichida bizda bir nechta operatsiyalar mavjud:
Halqasimon (sikli) bog'langan ro'yxatni aniqlash (# 1)
Ikki bog'langan ro'yxatni taqqoslash (# 2)
Ikki ro'yxatning kesishishini va birlashishini topish (# 3)
2 ta alohida bog'langan ro'yxat berilgan. Berilgan ikkita bog'langan ro'yxatni birlashtirish uchun funktsiyani hosil qilamiz ketma-ket o’sish tartibda (# 5)
Berilgan ikkita bog'langan ro'yxatdan har bir Node da kattaroq element bilan yangi bog'langan ro'yxat yaratish Bir xil o'lchamdagi ikkita bog'langan ro'yxatni hisobga olgan holda, ushbu bog'langan ro'yxatlar yordamida yangi bog'langan ro'yxatni yaratish vazifasi qo'yilgan. Shart shundaki, ikkala bog'langan ro'yxat orasidagi kattaroq elementlar yangi ro'yxatiga qo'shiladi. (# 6)
#1Misol
Misol - halqasimon (tashqaridan) bog'langan ro'yxatni aniqlash
/ * Ushbu kod quyidagilarga ega * /
/ *
1. Node larni qo'shish
2. Ro'yxat hajmini qaytaradigan funktsiya
3. Ro'yxatni dumaloq qilib tuzish (tsikl)
4. Halqasimon ro'yxatni aniqlash
5. Rekursiv bosib chiqarish
* /
#include using namespace std;
cout << " Ikkala ro'yxat bir xilmi?\n";
if(compareLinkedList(head,newHead))
cout << " Ha, ular bir xil!\n";
else
cout << " Yo'q, bular emas!\n";
cout << endl;
numDel = 35;
ptrDelete = searchNode(newHead,numDel);
if(deleteNode(&newHead;,ptrDelete)) {
cout << "Node "<< numDel << " deleted!\n";
cout << " O'chirishdan keyin yangi ro'yxat \n";
display(newHead);
}
cout << " Ikki ro'yxatni yana taqqoslash ...\n";
cout << " Ikkala ro'yxat bir xilmi?\n";
if(compareLinkedList(head,newHead))
cout << " Ha, ular bir xil!\n";
else
cout << " Yo'q, bular emas!\n";
cout << endl;
cout << " Nusxalangan ro'yxat o'chirilish \ n ";
deleteLinkedList(&newHead;);
display(newHead);
return 0;
}
Natija:
10
10 20
10 20 30
10 20 30 35
10 20 30 35 40
5 10 20 30 35 40
5 tugun o'chirildi!
10 20 30 35 40
Ro'yxat teskari
40 35 30 20 10
Ro'yxat ko'chirildi
40 35 30 20 10
Ikki ro'yxatni taqqoslash ...
Ikkala ro'yxat bir xilmi?
Ha, ular bir xil!
35 tugun o'chirildi!
O'chirishdan keyin yangi ro'yxat
40 30 20 10
Ikki ro'yxatni yana taqqoslash ...
Ikkala ro'yxat bir xilmi?
Yo'q, ular boshqacha!
Nusxalangan ro'yxat o'chirilmoqda
#Misol.3 Navbat tuzilishi: bog'langan ro'yxatdan foydalanish
#include #include
struct node
{
int data;
node *next;
};
typedef struct node node_t;