16
deb hisoblaymiz. recordtype turidagi ro‘yxat elementlarini listtype (ro‘yxat turi) ma’lumotlar
turi orqali ifodalab olamiz. Listtype turi ro‘yxatning ixtiyoriy turi bo‘lishi mumkin, lekin
hozirgi holatda bizga ko‘proq bog‘langan ro‘yxatlar to‘g‘ri keladi.
Ro‘yxatning umumiy uzunligi fiksirlangan va n ga teng deb faraq qilishimiz mumkin.
Shuningdek array[keytype] of listtype turidagi V massiv ham kerak. Bu ro‘yxatlarni
saqlovchi massiv «cho‘ntak»i bo‘lib hisoblanadi. V massivning indeksi keytype ma’lumotlar
turiga ega, chunki bu massivning har bir elementi kalitning bitta qiymatiga mos keladi.
SHunday qilib, 9-dasturni
umumlashtirish mumkin, chunki endi «cho‘ntak»lar keraklicha
hajmga ega. «Cho‘ntak»larni qanday birlashtirish mumkinligini ko‘rib chiqamiz. a
1
, a
2
, .... a
i
va b
1
, b
2
, … b
j
ro‘yxatlar ustida ro‘yxatlar konkatenatsiyasi operatsiyasini bajarish kerak,
natijada a
1
, a
2
, .... a
i
i b
1
, b
2
, … b
j
ro‘yxatga ega bo‘lamiz. L
1
L
2
, ro‘yxatlarning birlashmasidan
hosil bo‘lgan L
1
ro‘yxatni egallovchi konkatenatsiya CONCATENATED(L
1
, L
2
)
operatsiyasini tadbiq etish uchun ro‘yxatlarning ixtiyoriy
ifodalanishidan foydalanish
mumkin.
Ro‘yxat sarlavhalariga qo‘shishda konkatenatsiya operatori yanada samarali bajarilishi
uchun ro‘yxatning oxirgi elementlariga ko‘rsatkichlarni ishlatish mumkin.
2.2 2-rasmda Punktir chiziqlar bilan L
1
i L
2
ro‘yxatlarni bitta L
1
ro‘yxatga
konkatenatsiyasida o‘zgargan ko‘rsatkichlar ko‘rsatilgan.
Endi yozuvlarning «cho‘ntak» saralashining dasturin tuzsak bo‘ladi. Bu dastur
5-dasturda ko‘rsatilgan, dastur ro‘yxatlar ustida bajariladigan
bazaviy operatorlarni
ishlatib tuzilgan.
5-dastur. binsort dasturi (cho‘ntak saralash) procedure binsort;
{A massiv elementlarini tartiblaydi, tartiblangan ro‘yxatni V[lowkey]
«cho‘ntak»ga yozadi} var i: integer; v: keytype; begin {"cho‘ntak"ka
yozuvlarni kiritish boshlanadi}
(1)
for i:= 1 to n do
{ A[i] elementni «cho‘ntak» boshiga joylashtirish}
(2)
INSERT(A[i], FIRST(B[A[i].key]), B[A[i].key]);
(3)
for v:= succ(lowkey)
to
highkey
do
(4)
CONCATENATE(B[lowkey] , B[v]) end; { binsort }