Witam. Moim zadaniem jest napisanie kodu programu który wczytuje słowa z pliku do listy dwukierunkowej, a następnie sortuje je alfabetycznie i wypisuje wynik na ekranie. Problem mój polega na tym, że nie za bardzo wiem jak zabrać się za sortowanie za pomocą listy dwukierunkowej. Pomoże ktoś?
Mój kod:
#include
#include
struct element
{
char slowo[16];
struct element* nast;
struct element* poprz;
};
struct element* wczytaj_wartosci(FILE *plik);
void wypisz_wartosci(element* glowa);
void usun_liste(element* glowa);
int main()
{
FILE *plik;
element *glowa;
char nazwa_pliku[30];
printf("Podaj nazwe pliku z ktorego maja zostac wczytane dane: ");
scanf("%s", nazwa_pliku);
printf("Otwieranie pliku\n");
if((plik=fopen(nazwa_pliku, "r")) == NULL)
printf("Plik nie zostal otwarty\n");
printf("Otwarto plik\n");
glowa = wczytaj_wartosci(plik);
wypisz_wartosci(glowa);
usun_liste(glowa);
return 0;
}
struct element* wczytaj_wartosci(FILE *plik)
{
struct element *wsk, *glowa=NULL;
while(feof(plik)==0)
{
if(glowa==NULL)
{
glowa=(element*)malloc(sizeof(element));
glowa->nast=NULL;
fscanf(plik,"%s\n",glowa->slowo);
wsk=glowa;
}
else
{
wsk->nast=(element*)malloc(sizeof(element));
wsk=wsk->nast;
wsk->nast=NULL;
fscanf(plik,"%s\n",wsk->slowo);
}
}
return glowa;
}
void wypisz_wartosci(element* glowa)
{
element* wsk;
printf("\nWypisuje elementy listy:\n");
wsk=glowa;
while(wsk!=NULL)
{
printf("\t%s\n",wsk->slowo);
wsk=wsk->nast;
if(wsk->nast==NULL)
{
printf("\t%s\n",wsk->slowo);
break;
}
}
}
void usun_liste(element* glowa)
{
element *wsk;
while(glowa!=NULL)
{
wsk=glowa;
if(wsk->nast==NULL)
break;
while(wsk->nast->nast!=NULL)
wsk=wsk->nast;
free(wsk->nast);
wsk->nast=NULL;
}
free(glowa);
printf("\nUsuwanie listy zakonczone powodzeniem.\n");
}
– Dodane 25.03.2012 (N) 21:30 –
Zapomniałem dodać, że sortowanie ma być umieszczone w funkcji wczytaj_wartosci