Тема: Кільцевий список
Усім доброго дня! Будь ласка, допоможіть мені з такою задачою:
Описати клас КІЛЬЦЕВИЙ СПИСОК з довільних об'єктів та реалізувати дії над списками
1) Почати роботу
2) Довжина списку
3) Перейти до наступного елемента
4) Поточний елемент
5) Вставити елемент
6) Видалити елемент
Описати клас ЕЛЕМЕНТ на базі початкового об'єкта, який має методи "показати" та "дорівнює", та розв'язати задачу обчислення максимальної кількості рівних елементів списку, що йдуть підряд.
Розв'язати задачу для елементів, які містять масиви заданого розміру.
Ось, власне, реалізація кільцевого списку. Операції Init, Next та Current написала сама, тому до кінця не впевнена в їх правильності.
unit IntRList;
interface
type
rlist = ^relem;
relem = record
d: integer;
next: rlist
end;
procedure Init(var r: rlist);
function Len(r: rlist): integer;
procedure Next(var r: rlist);
function Current(r: rlist): integer;
procedure Insert(var r: rlist; n: integer);
procedure Delete(var r: rlist);
implementation
procedure Init(var r: rlist);
begin
r:=nil
end;
function Len;
var i: word;
p: rlist;
begin
i:=0; p:=r;
if p<>nil then
repeat
p:=p^.next;
i:=i+1
until p=r;
Len:=i
end;
procedure Next(var r: rlist);
begin
if r<>nil then begin
r:=r^.next; end
else
begin
writeln('Next: Spysok porozhniy');
halt
end;
end;
function Current(r: rlist): integer;
begin
if r<>nil then begin
Current:=r^.d; end
else
begin
writeln('Current: Spysok porozhniy');
halt;
Current:=0;
end;
end;
procedure Insert;
var p: rlist;
begin
new(p);
if r=nil then
begin
p^.d:=n; p^.next:=p;
end
else
begin
p^:=r^; r^.d:=n; r^.next:=p;
end;
r:=p;
end;
procedure Delete;
var p: rlist;
begin
if r=nil then begin
writeln('Delete: Spysok porozhniy');
halt
end;
if r^.next=r then
begin
p:=r; r:=nil
end
else
begin
p:=r^.next; r^:=p^
end;
dispose(p)
end;
end.
А ось мої намагання розв'язати задачу. Як я зрозуміла умову задачі, то мені треба створити порожній список, ввести "l" масивів розміру "size", та вставити їх по черзі в список. А потім, вважаючи ці масиви елементами списку, просто порівнювати їх. І у разі рівності збільшувати макс. значення рівних елементів sum на одиничку.
Program Proekt2;
Uses IntRList;
Type
AnyRef = ^AnyObject;
AnyObject = Object
Constructor Initial;
Destructor Done; Virtual;
end;
ElemRef = ^Element;
Element = Object(AnyObject)
public
Procedure Show(s: rlist);
begin
writeln(s);
end;
Function Equals(s,s1: rlist): boolean;
begin
if s=s1 then
begin
Equals:=true;
end
else
begin
Equals:=false;
end;
end;
end;
Constructor AnyObject.Initial;
begin
end;
Constructor AnyObject.Done;
begin
end;
var m: array [1..size] of integer;
l,k,i,sum: integer;
spysok: rlist;
begin
Init(spysok);
write('Rozmir massyviv = ');
read(size);
write('Dovzhyna spysku = ');
read(l);
for k:=1 to l do
begin
for i:=1 to size do
begin
readln(m[i]);
end;
Insert(m,k);
k:=k+1;
end;
sum:=0;
if m=m^.next then
begin
sum:=sum+1;
end;
end.
Відкомпілювати програму не вдається (помилка 37, пропущено End а де - не знаю)
Буду дуже вдячна за ваш час і вашу допомогу. Якщо у вас будуть якісь запитання, постараюсь на них відповісти)