Delphi, Listy jednokierunkowe

0

Witam, mam do napisania listę w Delphi, niestety nie cierpię tego języka i mam ciągle naruszenie pamięci, naskrobałem szybko coś krótkiego żebyście mi pokazali co robię źle. Kod wygląda tak:

Lista:

unit list;

interface

type
PList=^TList;
  TList=Record
    word1: String;
    word2: String;
    Next: PList;
    Prev: PList;
    First: PList;
    Last: Plist;
end;
  procedure addToList(list: PList; word1, word2: String);

implementation

procedure addToList(list: PList; word1, word2: String);
var
  TMP: PList;
begin
  TMP:=new(PList);
  if list=nil then
  begin
    TMP.word1:=word1;
    TMP.word2:=word2;
    TMP.First:=TMP;
    TMP.Last:=TMP;
    TMP.Next:=nil;
    TMP.Prev:=nil;
    list:=TMP;
  end;
end;
end. 

Procedura pracujaca na liscie:

procedure TForm1.FormCreate(Sender: TObject);
begin
  list:=nil;
  addtolist(list, 'aaa', 'sss');
  showmessage(list.word1);
end; 

Chciałem zrobić żeby operować bezpośrednio na liście a nie wysyłając listę do funkcji ale niestety nie mam pojęcia jak to zrobić :/ Jeżeli ktoś ma czas rzucić na to okiem dobrze by było gdyby napisał gdzie popełniam błąd oraz ewentualnie jak dobrze przygotować strukturę klasy żebym mógł na obiekcie pracować.
Z góry dzięki za pomoc.

0

Temat dałeś listy jednokierunkowe. Skoro masz wskaźnik na next i prev to znaczy że masz listę dwukierunkową. Poza tym w elemencie listy zwykle nie trzyma się wskaźników na pierwszy i ostatni element.

Przy liście jednokierunkowej masz tylko wskaźnik na początek i tyle.

rybak16 napisał(a)

procedure addToList(list: PList; word1, word2: String);

Dawno się wskaźnikami w delphi nie bawiłem, ale nie wiem czy nie powinno być tutaj:

rybak16 napisał(a)

procedure addToList(var list: PList; word1, word2: String);

Jeśli nie chcesz wysyłać wskaźnika do funkcji, to zadeklaruj ten wskaźnik albo jako zmienną globalną, albo jako pole formatki.

rybak16 napisał(a)

... jak dobrze przygotować strukturę klasy żebym mógł na obiekcie pracować...

Sktruktury, klasy, obiekty - mieszasz pojęcia...

b

0

faktycznie z tym ze jednokierunkowe popełniłem błąd, a pojęć nie mieszam, mówiąc strukturę klasy miałem na myśli jak stworzyć taka klasę by jej obiekt stawał się lista.

0
rybak16 napisał(a)

faktycznie z tym ze jednokierunkowe popełniłem błąd, a pojęć nie mieszam, mówiąc strukturę klasy miałem na myśli jak stworzyć taka klasę by jej obiekt stawał się lista.

Klasa powinna zawierać część związaną z danymi i wskazanie na następną instancję (następny obiekt) lub na nil jeśli jest na końcu.

b

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