All pastes #384948 Raw Edit

Someone

public c v1 · immutable
·published 2007-03-07 14:04 UTC
rendered paste body
tList* SortList(tList* pList, int(*fcmp)(void*pItList,void*pItNew)) //sortiert die übergebene Liste pList mit der angegeben Funktion fcmp{	tList *neueliste, *pItAktuell, *pItNew;   //neueliste ist die neue sortierte Liste, pItAktuell das aktuelle Element der momentanen Liste pList und pItNew eine Kopie dieses Elements für die neue sortierte Liste	neueliste = CreateList();  //neue Liste erstellen	pItAktuell = GetFirst(pList);  //erstes Element der aktuellen Liste holen	while(hasnext(pList))  //solange noch Elemente in der Liste sind...	{		pItAktuell = (tList*)GetNext( pList );  //..nehmen wir uns das nächste		pItNew = (tList*) malloc(sizeof(struct Liste));                             //..legen speicher für die Kopie davon an		pItNew->ArtBest = pItAktuell->ArtBest;                                      //..Kopieren alle Daten		pItNew->ArtNr = pItAktuell->ArtNr;                                          //.. - " -		pItNew->ArtBez = (char*) malloc(strlen(pItAktuell->ArtBez)+1);              //.. - " -		memcpy(pItNew->ArtBez, pItAktuell->ArtBez, strlen(pItAktuell->ArtBez)+1);   //.. - " -		addItemToList(neueliste, pItNew, fcmp); //und fügen die Kopie schließlich in die neue Liste ein. Sortiert nach der angegebenen Sortierfunktion fcmp	}        //löschen der alten Liste stück für stück	GetFirst(pList);	GetNext( pList);	while(hasnext(pList))	{		RemoveItem(pList);	}	DeleteList(pList); //am ende noch die alte Liste an sich Löschen	return GetFirst(neueliste);}int suchen_bez (void* pItList, void*pItNew)  //sucht die richtige Stelle zum sortierten Einfügen nach der Bezeichnung{	tList *neues; //einzufügendes Element	tList *pList; //Liste in der es einzufügen ist	int ret=DAVOR; //Art des Einfügens, standardmäßig vor dem gefundenen Element	if (pItList == NULL || pItNew == NULL) //Fehlerabfrage	{		return FAIL;	}	neues = (tList*) pItNew;   //casten des 2. Argumentes auf den richtigen Typ (das einzufügende Element)	pList = (tList*) pItList;  //casten das 1. Argumentes auf den richtigen Typ (die Liste)	if (neues->ArtBez == NULL) //Fehlerabfrage ob im einzufügenden Element eine Bezeichnung vergeben ist	{		return FAIL;	}	while(pList->aktuell->erstes == FALSE)  //läuft die liste durch so lange das aktuelle nicht das erste ist	{		pList->aktuell = pList->aktuell->next;	}        //hier ist also das aktuelle element das erste (vielleicht sollte man einfach GetFirst() benutzen...)	while(strcmp(((tList*)(pList->aktuell->element))->ArtBez, neues->ArtBez) <= 0) //solange die bezeichnung des aktuellen elementes "kleiner" als die bezeichnung des einzufügenden elementes ist	{		if(pList->aktuell->next->erstes)		{			ret = DANACH; //ist das nachste element das erste, dann fugen wir danach ein und brechen ab. Das neue Element wird als unser letztes Element.			break;		}		pList->aktuell = pList->aktuell->next;	//sonst setzen wir unsere suche fort	}        //an dieser Stelle zeigt nun das aktuelle Element auf das erste element das "größer" als unser neues Element ist, oder im Fall das es kein größeres gibt auf dsa Letzte in der Liste.        //Genau so wird auch die Ruckgabe gehandelt, im ersten Fall wird davor eingefügt, im 2. Fall danach.	return ret;}