A
danke für den infos.
ich hab den quelltext jetzt übern haufen egworfen und einen neuen geschrieben
aber er geht noch nicht ganz ich ich weiss nicht genau wo der fehler ist
aber ich überschreibe mir immer einen "next"-pointer und verliere so immer
wieder elemente in der liste beim einfügen.
hier der neue code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TEST
struct sListe
{
char name[30];
int ez;
struct sListe *next;
};/*struct sListe*/
/*erzeugt mir das Nullte-Element der lineraren Liste
es diennt als dummy-*/
struct sListe *create_list()
{
struct sListe *anfang;
anfang = (struct sListe *) malloc(sizeof(struct sListe));
if (anfang == NULL)
{
printf("ERROR 1: can't create List\n");
return(NULL);
}
anfang->next = NULL;
strncpy(anfang->name,"<ANFANG>",10);
anfang->ez = -1;
return(anfang);
}/*create_list*/
/*fügt ein element in die Liste ein alphabetisch sortiert nach struct
element name*/
void insert(struct sListe **anfang, char name[30],int z)
{
struct sListe *pointer = NULL,
*pointer1 = NULL;
pointer1 = *anfang;
pointer = (struct sListe *) malloc(sizeof(struct sListe));
if(pointer == NULL)
{
printf("ERROR 2: can't create new element");
return;
}
strncpy(pointer->name,name,30);
pointer->ez = z;
pointer->next = NULL;
if/*1*/((*anfang)->next == NULL)/*1. Fall Liste Leer*/
{
(*anfang)->next = pointer;
#ifdef TEST
printf("\n |leer einfuegen %s| \n",pointer->name);
#endif
}
else /*andere möglichkeit liste nicht leer*/
{
if( strncmp(pointer->name,((*anfang)->next)->name,30)<0 )/*2.Fall element am anfang einfügen.*/
{
pointer->next = (*anfang)->next;
(*anfang)->next = pointer;
#ifdef TEST
printf("\n |anfang einfuegen %s| \n",pointer->name);
#endif
}
while(strncmp(pointer->name,((*anfang)->next)->name,30) > 0 )
{
if((strncmp(pointer->name,((*anfang)->next)->name,30) > 0) && ( (strncmp(pointer->name,(((*anfang)->next)->next)->name,30) < 0) && ((*anfang)->next)->next !=NULL ) )/*3.Fall element am in mitte einfügen*/
{
pointer->next = (*anfang)->next->next;
(*anfang)->next->next = pointer;
#ifdef TEST
printf("\n |mitte einfuegen %s| \n",pointer->name);
#endif
break;
}
else
{
if( (strncmp(pointer->name,((*anfang)->next)->name,30) > 0) )
{
((*anfang)->next)->next = pointer;
#ifdef TEST
printf("\n |ende einfuegen %s| \n",pointer->name);
#endif
break;
}
}
(*anfang) = (*anfang)->next;
} /*anfang = pointer1;*/
}
}/*insert*/
int main(void)
{
struct sListe *anfang;
anfang = create_list();
insert(&anfang,"element1",12);
insert(&anfang,"alement2",10);
insert(&anfang,"clement3",11);
insert(&anfang,"boing4",34);
insert(&anfang,"gooo5",56);
insert(&anfang,"tree6",53);
insert(&anfang,"zlement7",99);
insert(&anfang,"flement8",20);
while(anfang != NULL)
{
printf("\nName: %s Zahl: %d \n",anfang->name,anfang->ez);
anfang = anfang->next;
}
getchar();
return(0);
}/*main*/