Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические структуры данных > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
InFuz
Задание: Создать объект - однонаправленный список L1 без головного элемента.
Добавить в стандартный набор объекта ваш метод согласно варианту.
Задание варианта: Если среди первых трех элементов есть два равных, то удалить первый из них, иначе вставить в начало списка сумму трех элементов. Напечатать эти элементы.


Не разобрался как работают указатели. Стандартные методы нам дали на лекциях осталось только свой метод сделать.

Код
program Spisok;
uses Crt;
type  Inf=integer;
const Zero:Inf=0;
type    ptr=^EL;
        EL=record
            Dn:Inf;
            Nx:ptr;
           end;
   List = Object
            private p:ptr;
            public
            constructor Init;
            function      Empty:boolean;
            procedure   MyMethod;
            procedure   AddHead(D:Inf);
            procedure   AddEnd(D:inf);
            destructor   Done;
            procedure   Print;
          end;
{--------------------------------------------------------------}
constructor List.Init;  begin p:=nil end;

function  List.Empty:boolean; begin Empty:=p=nil end;

procedure List.MyMethod;
var q:prt;
   begin
   end;

procedure List.AddHead(D:Inf); var q:ptr;
  begin new(q); q^.Dn:=D; q^.Nx:=p; p:=q; end;

procedure List.AddEnd(D:inf); var q,t:ptr;
  begin new(q); q^.Dn:=D; q^.Nx:=nil;
    if p=nil
       then p:=q
       else begin t:=p;
              while t^.Nx<>nil do t:=t^.Nx;
              t^.Nx:=q;
            end;
   end;

destructor List.Done;
  var q:ptr;
  begin
    while not Empty do
      begin q:=p; p:=q^.Nx; dispose(q) end;
  end;

procedure List.Print;
  var q:Ptr;
  begin
    if p=nil
      then write('->|')
      else begin q:=p;
             while q<>nil do
             begin write(q^.Dn:3,' ');q:=q^.Nx end;
           end;
     writeln;
  end;

{--------------------------------------------------------}
var L1:List; n,i,k:longint;
BEGIN
  ClrScr; TextColor(10);
  writeln;
  writeln('Mem Before = ',MemAvail); TextColor(15);
  write('Vvedite dliny spiska: n = ');
  readln(n);
  L1.Init; {randomize;}
  for i:=1 to n do
  L1.AddEnd (100 - random(100));
  L1.Print;
  {if n<3 then begin writeln('Malo elementov')
  else begin
           L1.MyMethod;
           L1.Print;
         end;}
  L1.Done; TextColor(10);
  writeln('Mem After = ',MemAvail);
  readln;
END.


Помогите хотя бы, как правильно записать сравнение первых 3 элементов с помощью указателей, а дальше может сам тогда разберусь.
InFuz
Все убейте тему, сам разобрался.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.