Beispiel von Schulübung

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "Liste1Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
struct CWaggon            //Einzelner "Waggon"
{AnsiString data;      //Daten
 CWaggon *next;        //Zeiger auf nächsten Waggon
};
 
CWaggon *first=0;
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{CWaggon *neu=new CWaggon;  // Anlegen eine neuen leeren Waggons
 neu->data = Edit1->Text;   // (*neu).data = (*Edit1).Text;
 neu->next = first;   //   neu->next = 0;
 first=neu;
}
//---------------------------------------------------------------------------



Hier ist ein vollständiges Musterbeispiel zu den verketteten Listen

//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
struct CWaggon            //Einzelner "Waggon"
{
	AnsiString data;      //Daten
	CWaggon *next;        //Zeiger auf nächsten Waggon
};
 
CWaggon *first=0;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CWaggon *neu = new CWaggon;   //Anlegen eines neuen Waggons
 
 //	(*neu).data=Edit1->Text;     so wäre die eigentl. Syntax
neu->data=Edit1->Text;    //Daten in den Waggon übernehmen
neu->next=first;          //Zeiger zeigt auf ersten Waggon
first=neu;                //Erster Waggon ist der neue Waggon
Edit1->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CWaggon *h;     //Hilfszeiger,
h=first;		//der auf den ersten Waggon zeigt
 
AnsiString ausgabe="";
 
while (h!=0)    //Solange Hilfszeiger nicht auf 0 zeigt.
{
   ausgabe=ausgabe+h->data+" -> ";   //Ausgabestring zusammensetzen
   h=h->next;   //Hilfszeiger soll auf nächsten Waggon zeigen
}
Memo1->Lines->Add(ausgabe);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int pos=StrToInt(InputBox("Einfügen an Position","An welcher Position?",""));
//neuer Waggon erstellt
CWaggon *neu = new CWaggon;
neu->data=Edit1->Text;
neu->next=0;   //vorerst
 
//Erste Stelle
if (pos==1) {
	neu->next=first;
	first=neu;
}
else     //Andere Stelle
{  //Hilfszeiger
   CWaggon *h;
   h=first;
   for (int i=1; i<pos-1; i++) {
	  h=h->next;     //"Weiterschreiten" der Waggons
   }
   neu->next=h->next;
   h->next=neu;
}
 
 
 
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 int z=0;
 CWaggon *h;
 h=first;
 
 while (h!=0)
{
   z++;
   h=h->next;
}
 
Memo1->Lines->Add("Anzahl der Elemente: "+IntToStr(z));
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{
 int pos=StrToInt(InputBox("Löschen von Position","An welcher Position?",""));
 
 CWaggon *h1, *h2;
 h1=first;
 
 if (pos==1)
	{
	 first=h1->next;
	 delete(h1);
	}
 
 else
    {
	 for (int i=1; i<pos-1; i++)
		{
		 h1=h1->next;
		}
	 h2=h1->next;
	 h1->next=h2->next;
	 delete(h2);
	}
   }
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
CWaggon *h1, *h2, *h3, *h4;       //Hilfszeiger deklarieren
h1=first; h3=first;
 
int j=StrToInt(InputBox("Tauschen","Erstes Element?",""));
int k=StrToInt(InputBox("Tauschen","Zweites Element?",""));
 
//j und k der Größe nach ordnen;
 
if (j>k) {   //j und k tauschen
	int h=j;
	j=k;
	k=h;
}
 
 
if (j!=k) {  //Tausch, nur wenn ungleich!
 
   //Wenn Erster Waggon betroffen:
   if (j==1) {
	 //h3 und h4 positionieren
	 for (int i=1;i<k-1 ;i++ ) {  //h3 positionieren
	 h3=h3->next;
	 }
	 h4=h3->next; 				//h4 positionieren
 
	 first=h4;
	 h3->next=h1;
	 h3=first->next;   //bzw. h3=h4->next (ist dasselbe!)
	 h4->next=h1->next;
	 h1->next=h3;
 
	} else
	{
  //Allgemeiner Fall (ohne 1. Element)
  //Positionieren der Hilfszeiger
  for (int i=1;i<j-1 ;i++ ) {  //h1 positionieren
  h1=h1->next;
  }
  h2=h1->next; 				//h2 positionieren
 
  for (int i=1;i<k-1 ;i++ ) {  //h3 positionieren
  h3=h3->next;
  }
  h4=h3->next; 				//h4 positionieren
 
  //Umhängen:
  h1->next=h4;
  h3->next=h2;
  h3=h4->next;
  h4->next=h2->next;
  h2->next=h3;
   }
}
}
 
//---------------------------------------------------------------------------
 
void ausgabeverkehrt(CWaggon *h, AnsiString &AS)
{
if (h->next!=0) ausgabeverkehrt(h->next,AS);
AS=AS+" <- "+h->data;
}
 
 
void __fastcall TForm1::Button9Click(TObject *Sender)
{
AnsiString AS="";
 
if (first!=0) {
	ausgabeverkehrt(first,AS);
	Memo1->Lines->Add(AS);
}
 
}
//---------------------------------------------------------------------------