Gast
#3081645
Hallo,
ich bin C Anfängerin und bekomme das vertauschen von Elementen in einer
verketteten Liste nicht hin.
Der erste Fall, dass die ersten zwei Elemente vertauscht werden, klappt.
Aber wenn ich zwei beliebige Elemente vertauschen möchte, bekomme ich
das nicht hin.
Kann mir jemand vllt. weiterhelfen? Ich bin am verzweifeln... :-(
// Perlenspiel.cpp : main project file.
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace System;
struct perle
{
char farbe[100];
char typ[100];
struct perle *naechste;
};
struct perle* vorwaerts (struct perle *akt, short x)
{
int i = 0;
struct perle *perl_zeiger1;
perl_zeiger1 = akt;
while(perl_zeiger1->naechste != NULL && i < x-1)
{
perl_zeiger1 = perl_zeiger1->naechste;
i++;
}
return perl_zeiger1;
}
short loesche(struct perle **anf,short x)
// Lösche x.
// Rueckgabe: 0, wenn ok, 1 wenn nicht ok.
{
int i = 0;
struct perle *aktuell = *anf;
struct perle *perl_zeiger1;
struct perle *perl_zeiger2;
if(aktuell != NULL)
{
if(i==x)
{
*anf = aktuell->naechste;
// "*anf" ist ein Synonym für "erste"
}
else
{
perl_zeiger1 = vorwaerts(aktuell, x);
perl_zeiger2 = perl_zeiger1 -> naechste;
if ( perl_zeiger2 == NULL )
{
return 1; // Fehler!
}
perl_zeiger1 -> naechste = perl_zeiger2->naechste;
}
}
return 0;
}
short vertausche(struct perle **anf, short x, short y)
{
int i = 0;
struct perle *aktuell = *anf;
struct perle *perl_zeiger1;
struct perle *perl_zeiger2;
struct perle *perl_zeiger3;
struct perle *perl_zeiger4;
if(i==x && y == x+1)
{
perl_zeiger1 = aktuell->naechste;
perl_zeiger2 = aktuell;
perl_zeiger2->naechste = perl_zeiger1->naechste;
perl_zeiger1->naechste = perl_zeiger2;
}
else
{
//perl_zeiger1 = (vorwaerts(aktuell,y))->naechste;
//perl_zeiger2 = (vorwaerts(aktuell,x))->naechste;
perl_zeiger1 = vorwaerts(aktuell,x);
perl_zeiger2 = vorwaerts(aktuell,y);
perl_zeiger3 = perl_zeiger1->naechste;
perl_zeiger1->naechste = perl_zeiger2->naechste;
perl_zeiger2->naechste = perl_zeiger3;
}
return 0;
}
int main(array<System::String ^> ^args)
{
struct perle p1,p2,p3,p4;
short fehler = 0;
struct perle* erste;
strcpy_s(p1.farbe, "gelb");
strcpy_s(p1.typ, "austern");
strcpy_s(p2.farbe, "blau");
strcpy_s(p2.typ, "saphir");
strcpy_s(p3.farbe, "schwarz");
strcpy_s(p3.typ, "onyx");
strcpy_s(p4.farbe, "rot");
strcpy_s(p4.typ,"rubin");
erste = &p1;
p1.naechste = &p3;
p3.naechste = &p2;
p2.naechste = &p4;
p4.naechste = NULL;
//fehler = loesche(&erste,4);
vertausche(&erste,1,3);
return 0;
}