Autor Beitrag
Chuckyy
Hält's aus hier
Beiträge: 9


Delphi 5
BeitragVerfasst: So 19.02.06 15:38 
Hi,

mein problem ist folgendes: Wie ihr sehen könnt habe ich eine einfuegen und loeschen prozedur. ich kann damit aber nicht die ersten 2 einträge meiner liste löschen...

wenn ich mir also eine liste - 1,2,3,4,5 - ausgeben lasse kann ich nichts mehr hinter 4 und 5 einfuegen bzw. 4 und 5 loeschen :(

Helft mir bitte. Die Suche hat mir leider nicht weiter geholfen, hab zwar son tolles tut gefunden, was mich dann auf die idee mit der weitergabe von "Vorheriger" gebracht hat, aber nicht das problem mit den zugriffen löst :(

Greetz, Chuckyy

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
type Zeiger = ^Element;
     Element = record
                Naechster: Zeiger;
                Inhalt: integer;
               end;
var
  Form1: TForm1;
  Wurzel, z: Zeiger;

implementation

{$R *.DFM}



procedure loeschen(var Listenzeiger: Zeiger; Nach: integer);

   procedure loeschen2(var Listenzeiger, Vorheriger: Zeiger; Nach: integer);
   begin
     if Listenzeiger <> NIL
      then if Listenzeiger^.Inhalt = Nach
            then begin
             Vorheriger^.naechster := Listenzeiger^.naechster;
            end
             else loeschen2(Listenzeiger^.naechster,Listenzeiger,Nach);
   end;

begin
if Listenzeiger <> NIL
  then loeschen2(Listenzeiger^.naechster,Listenzeiger,Nach);
end;


procedure einfuegen(var Listenzeiger, Vorheriger: Zeiger; Wert,Nach: integer);
var Listenzeiger_add: Zeiger;
begin
if Listenzeiger <> NIL
 then if Listenzeiger^.Inhalt = Nach
   then begin
         new(Listenzeiger_add);
         Listenzeiger_add^.Inhalt := Wert;
         Vorheriger^.Naechster := Listenzeiger_add;
         Listenzeiger_add^.naechster := Listenzeiger;
        end
   else einfuegen(Listenzeiger^.naechster,Listenzeiger,Wert,Nach);
end;


procedure ausgeben(var Listenzeiger: Zeiger);
begin
form1.lib_ausgabe.clear;
if Listenzeiger <> NIL
 then
  begin
   form1.lib_ausgabe.items.add(inttostr(Listenzeiger^.Inhalt));
   ausgeben(Listenzeiger^.naechster);
  end;
end;


procedure anfuegen(var Listenzeiger: Zeiger);
begin
 Wurzel := z;
 new (Listenzeiger);
 Listenzeiger^.Inhalt := StrToInt(form1.edt_eingabe.text);
 Listenzeiger^.naechster := Wurzel;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 Wurzel := nil;
 z := Wurzel;
end;


procedure TForm1.btn_anfuegenClick(Sender: TObject);
begin
 anfuegen(z);
end;

procedure TForm1.btn_ausgebenClick(Sender: TObject);
begin
 ausgeben(z);
end;

procedure TForm1.btn_einfuegenClick(Sender: TObject);
var Wert, Nach: integer;
begin
Wert := strtoint(edt_eingabe.text);
Nach := strtoint(edt_listenzeiger.text);
einfuegen(Wurzel,Wurzel,Wert,Nach);
end;

procedure TForm1.btn_loeschenClick(Sender: TObject);
var Nach: integer;
begin
Nach := strtoint(edt_listenzeiger.text);
loeschen(Wurzel,Nach);
end;

end.
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: So 19.02.06 21:26 
Ich nehme an, das du das aus einem bestimmten Grund so manuell machst und nicht z.B. auf TStringlist zurückgreifst?
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.02.06 22:24 
anbei ein kleines demo zum löschen und anfügenvon einträgen in eine einfach verkettete liste.

hab ich schnell zusammengebastelt, daher bitte ich um rücksicht. eine einfügen, sortieren, etc. ist nicht drin. zeigt aber wie man einträge sucht und löscht und wie man die liste am schluss auch wieder freigibt ... man will ja keinen speicher verschwenden.

<HTH>
Einloggen, um Attachments anzusehen!