2-misol (elementni o‘chirish):
Ishchi ko‘rsatkich P ko‘rsatib turgan elementdan keyingi elementni o‘chirish talab qilingan bo‘lsin.
Buni bajarish uchun quyidagi ish-harakat amalga oshirilishi zarur:
o‘chiriladigan elementning ko‘rsatkichiga Q ta'minlanadi:
Q = Ptr(P);
X o‘zgaruvchida o‘chiriladigan elementning axborot maydonining qiymati saqlab qo‘yiladi:
X = Info(Q);
o‘chiriladigan elementning ko‘rsatkichi o‘rniga keyingi elementning ko‘rsatkichi qo‘yiladi va o‘chirish amali bajariladi:
Ptr(P) = Ptr(Q);
FreeNode(Q);
Bu amal DelAfter(P, X) protsedurasini tashkil etadi.
Yuqorida tavsiflangan o‘chirish va qo‘shish protseduralari Paskal tilida quyidagi ko‘rinishga ega bo‘ladi:
procedure InsAfter(var Q: PNode; X: Integer); var
Q: PNode; begin
New(Q);
QA.Info:=X;
QA.Next: =PA.Next;
PANext:=Q;
procedure DelAfter(var Q: PNode; var X: Integer); var
Q: PNode;
begin
Q:=PA.Next;
PA.Next:=QA.Next;
X:=QA.Info;
Dispose(Q);
end;
Ro‘yxat ustida bajariladigan amallarga doir namunaviy misollar.
misol. Ro‘yxat elementlarini ketma-ket ko‘rib chiqish va ma‘lumot maydoni 4 ga teng bo‘lgan elementlarni o‘chirish talab qilinadi.
Ishchi ko‘rsatkich sifatida P o‘zgaruvchi olinadi va dastlabki holatda P=Lst. Yana bitta Q nomli ko‘rsatkich ham zarur bo‘lib, u P ning qiymati ko‘rsatayotgan elementdan bitta oldingi elementning joyini ko‘rsatib turadi. P ko‘rsatkichli elementning ma‘lumotlar maydoni 4 ga teng bo‘lsa, u o‘chirilishi kerak va buni amalga oshirish uchun Q ning qiymatidan foydalaniladi.
Q = Nil
P = Lst
While P <> Nil do If Info(P) = 4 then
If Q = Nil then Pop(Lst)
FreeNode(P)
P = Lst
Else
DelAfter(Q, X)
EndIf
Else
Q = P P = Ptr(P)
EndIf
EndWhile
Dostları ilə paylaş: |