Listy jednokierunkowe i wyświetlanie ich zawartości

0

Mam do wykonania zadanie na jutro.

Zdefiniuj typ rekordowy dla listy jedno kierunkowej do tyłu i jedno kierunkowej do przodu. Czy czymś się będą różniły?
Zaimplementuj procedurę dodawania do listy jednokierunkowej do przodu za elementem podanym jako argument, jeżeli element = nil twórz listę.
Zaimplementuj funkcję odczytywania pojedynczego elementu oraz odczytywania całej listy jednokierunkowej na ekran.
Zaimplementuj procedurę usuwania dowolnego elementu listy jednokierunkowej.
Zademonstruj działanie powyższych funkcji w programie który:

Stworzy  i wyświetli listę 30 elementów typu int ułożonych w następujący sposób 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3
Doda do listy elementy o wartości 4 po elementach o wartości 3. Następnie wyświetli listę.
Odczyta co piąty element listy.
Wszystkie jedynki przeniesie do osobnej listy. Wyświetli obie listy.

Kod jaki obecnie posiadam:

program zad5;

uses crt;

type
 wskaznik=^element;
 element=record
   dana:integer;
   next:wskaznik;
 end;

var
 first,jedynki:wskaznik;
 ne:integer;
 i:byte;

procedure insert_node(var f:wskaznik; a:integer);
 var
  prev, p,nowy:wskaznik;

begin
 new(nowy);
 nowy^.dana:=a;
 nowy^.next:=nil;
 if f^.dana>a then
  begin
   nowy^.next:=f;
   f:=nowy;
   exit;
  end;
 p:=f;
 while (p^.dana<=a) do
   begin
    prev:=p;
    p:=p^.next;
    if p=nil then
     begin
      prev^.next:=nowy;
     exit;
     end;
   end;
 nowy^.next:=prev^.next;
 prev^.next:=nowy;
end;

procedure delete_node(var f:wskaznik; a:integer);
 var
  p,prev,tmp:wskaznik;

 begin
  if f^.dana=a then
   begin
    tmp:=f^.next;
    dispose(f);
    f:=tmp;
    exit;
   end;
  p:=f;
  repeat
   prev:=p;
   p:=p^.next;
   if p=nil then exit;
  until p^.dana=a;
  prev^.next:=p^.next;
  dispose(p);
end;

procedure create (var f:wskaznik; a:integer);
 var
  nowy:wskaznik;

 begin
  if f=nil then
   begin
   new(nowy);
   nowy^.next:=nil;
   nowy^.dana:=a;
   f:=nowy;
   end
  else
   insert_node(f,a);
end;

procedure remove (var f:wskaznik);
 var
  tmp:wskaznik;

 begin
  while f<> nil do
   begin
   tmp:=f^.next;
   dispose(f);
   f:=tmp;
  end;
end;

procedure show (f:wskaznik);
 begin
  while f<> nil do
   begin
    write(f^.dana,',');
    f:=f^.next;
   end;
   writeln;
 end;

procedure wyswietl5 (f:wskaznik);
 begin
  while f<> nil do
   begin
    write(f^.dana:3);
    f:=f^.next;
   end;
   writeln;
 end;

begin
 clrscr;
 writeln('Dostepna pamiec: ',memavail);
  for i:=1 to 10 do
   begin
    for ne:=1 to 3 do
     create(first,ne);
   end;
  show(first);
  for i:=1 to 10 do
   insert_node(first,4);
  show(first);
  {i:=5;
  while i<36 do
   co5;
   i:=i+5;
  }
    {insert_node(first,6);
     show(first);
     insert_node(first,0);
     show(first);
     delete_node(first,0);
     show(first);}
     remove(first);
     writeln('Pam: ',MemAvail);
     readln;
end.

Problem jest taki, że nie mam pojęcia jak zrobić aby ten kod umożliwił wyświetlenie zadania. Kod był zaczerpnięty z wykładu prowadzonego przez mojego wykładowcę.

dodanie znacznika <code class="pascal"> - @furious programming

1

Tak, to świetny pomysł brać się za zadanie zaliczeniowe na ostatnią chwilę :/ A tak poważnie. Według mnie najlepiej pokombinować z tym co jest tutaj: http://4programmers.net/Delphi/Lista_jednokierunkowa odnośnik do kodu jest na samym końcu artykułu. Gotowiec obsługuje integer jako typ danych. Lecz nie problem aby było to coś innego. Także rekord. Sam dawno użyłem tego kodu przerabiając go na bezklasowy [wymóg zadania] do jednego zaliczenia. Raczej zdał wtedy egzamin.

1 użytkowników online, w tym zalogowanych: 0, gości: 1