Ansi C. Sortowanie listy dwukierunkowej


(Mysero) #1

Witam, problem polega na tym, ze NIE sortuje:) Kompiluje sie, odpala sie, ale albo: gdy casem (kejsem) z menu wybiore sortowanie to wywala blad windowsa ze program nie dziala i ulegnie zamknieciu, albo nie wywala ten blad ale efektu w postaci przesortowania nie ma. Pokaze tutaj struktury i wskazniki z ktorych korzystam w programie oraz cala funkcje sortowania. Nie wkleje calego programu poniewaz ma ponad 700 linijek. Czekam na wszelka pomoc. Z gory dziekuje za odzew.

include

include // np. do porownania napisow

include

include

char nastepny; // zmienna odpowiadajaca za pytanie czy wpisac kolejnego klienta

char usuwanie;//zmienna pytania czy usunac liste

char menuodpowiedz;//powrot do menu

int menu,kolejny; //obsluga menu

int edycjaopcja;//do wyboru podmenu do edytowania przy wyborze numeru klienta

int nowynr;

fpos_t dlugosc;//dlugosc pliku; przy sprawdzaniu czy baza danych jest pusta

struct dane

{

char nazwisko [20];

char imie [10];

int numer [4];

int poprzedni [4]; //poprzedni stan licznika

int aktualny [4]; //aktualny stan licznika

int zuzycie [4]; //=poplicz-aktlicz

float oplatapierwsza [6]; //oplata za pierwsze 500 l; litr za 3 gr

float oplatadodatkowa [6]; //oplata za przekroczenie 500 l; litr za 2 gr

float suma [6]; //=oplpierw+opldod

struct dane *next, *prev; //wskazniki

};

struct dane *glowa;

struct dane *ogon;

struct dane *skoczek;

[......]

void sortowanie(struct dane **start, struct dane **end)

{

struct dane *pom;

struct dane *pom1;

struct dane *pop;

struct dane *nast;

struct dane *skoczek2;

skoczek2 = glowa;

if (skoczek2!=NULL)

pom=skoczek2->next;

while(pom!=NULL)

{

pom1=pom;

while (pom1->prev!=NULL)

{

if(pom1->numer > pom1->prev->numer)

{

nast=pom1->next;

pop=pom1->prev;

pom1->prev=pop->prev;

if ((pop->prev) !=NULL)

{

pop->prev->next=pom1;

pom1->prev = pop->prev;

}

else

glowa = pom1;

pop->next=nast;

if (nast != NULL)

nast->prev=pop;

else

{

ogon = pop;

}

pop->prev=pom1;

pom1->next=pop;

pom1=pop;

}

pom1=pom1->prev;

}

pom=pom->next;

}

}