type pointer=^element;{покажчик на елемент списку} element=record {елемент списку} r: real; n: pointer; end; {вказівники:} var first, {на перший елемент списку} e,t: pointer; {на допоміжні елементи списку} n, {кількість елементів списку} i: integer; {допоміжний лічильник} BEGIN n:=0; {початкова кількість записів 0} first:=nil; new(e); {виділено пам’ять запис} e^.n:=nil; {список завершується записом e} t:=nil; first:=e; {збережено адресу початку списку} for i:=1 to 5 do {створити і додати до списку 5 записів} begin e^.r:=sqr(i); {надано значення полю поточного елемента списку} new(e^.n); {виділено пам’ять під наступний запис} e:=e^.n; {переміщення до кінця списку} inc(n); end; t:=first; {t тепер вказує на початок списку, як і first} for i:=1 to n do {виведення значень полів елементів списку на екран} begin writeln(t^.r:7:2); {виведення значення} t:=t^.n; {переміщення до наступного запису} end; {знищення 3-го елемента} t:=first; for i:=1 to 2 do {перехід до 3-го елемента} begin e:=t; t:=t^.n; end; e^.n:=t^.n; {зміна адреси наступного елемента для 2-го елемента списку} dec(n); {зменшення значення n на 1} dispose(t); {вивільнення пам’яті, що містила 3-ій елемент} writeln('Значення полів елементів списку після видалення 3-го елемента'); t:=first; for i:=1 to n do begin writeln(t^.r:7:2); t:=t^.n; end; t:=first; {вилучення першого елемента} first:=first^.n; dec(n); {зменшення значення n на 1} dispose(t); {вивільнення пам’яті, що містила 1-ий елемент} t:=first; writeln('Значення полів елементів списку після видалення 1-го елемента'); for i:=1 to n do begin writeln(t^.r:7:2); t:=t^.n; end; t:=first; {вставлення нового запису на початок списку} new(e); e^.r:=pi; {значення числа Піфагора} e^.n:=first; first:=e; inc(n); {збільшення значення n на 1} t:=first; writeln('Значення полів елементів списку після долучення елемента на початок списку'); for i:=1 to n do begin writeln(t^.r:7:2); t:=t^.n; end; t:=first; {вставлення нового запису 3-тю позицію} for i:=1 to 2 do {перехід до місця вставлення} begin e:=t; t:=t^.n; end; new(e^.n); {виділення пам’яті під запис} e^.n^.r:=49; {запишемо до інформаційного поля запису число 49} e^.n^.n:=t; {вставлення запису до списку} inc(n); {збільшення значення n на 1} writeln('Значення полів елементів списку після долучення елемента на позицію 3'); t:=first; for i:=1 to n do begin writeln(t^.r:7:2); t:=t^.n; end; t:=first; {послідовне знищення елементів списоку} for i:=1 to n do begin e:=t; {збереження адресу поточного елемента} t:=t^.n; {перехід до наступного елемента} dispose(e); {вивільнення пам’яті, зайняту елементом, чию адресу збережено на попередньому кроці} dec(n); {зменшення значення n на 1} end; first:=nil; t:=first; end.