Witam, od jakiegos czasu probuje posortowac liste, jednak w zaden sposob mi nie wychodzi napisalam cos takiego:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct element{
int liczba_pktow;
char zadanie[1000];
struct element *nast;
struct element *poprz;
};
struct element *utworz(struct element *lista)
{
lista=NULL;
return lista;
}
struct element *dodaj(int pkty,struct element *lista,char zad[1000])
{
int i;
struct element *el;
el=(struct element *)malloc(sizeof(struct element));
el->liczba_pktow=pkty;
for(i=0;i<1000;i++)
el->zadanie[i]=zad[i];
el->nast=lista;
el->poprz=NULL;
lista->poprz=el;
return el;
}
struct element * wczytaj_baze(struct element *lista)
{
char sciezka[100];
int a=0,i=0;
char zad[1000];
int pkty;
FILE *plik;
struct element * pom=lista;
printf("Podaj sciezke do pliku: ");
scanf("%s",&sciezka);
if((plik=fopen(sciezka,"r"))==NULL)
{
printf("Nie mozna otworzyc pliku");
return 1;
}
while(fscanf(plik,"%d\n",&pkty)!=EOF)
{
fflush(stdin);
fgets(zad,1000,plik);
i=0;
while(zad[i]!='\n')
i++;
zad[i]='\0';
lista=dodaj(pkty,lista,zad);
}
fflush(stdout);
while(lista->nast->nast!=NULL)
lista=lista->nast;
return lista;
}
int wypisz(struct element *lista)
{
int i=1;
struct element *el;
el=lista;
while(el!=NULL)
{
printf("Zadanie nr %d:\n",i);
printf("\t%d\n",el->liczba_pktow);
printf("\t%s\n",el->zadanie);
el=el->poprz;
i++;
}
return i-1;
}
void sort_wg_pktow(struct element *lista,int liczba_zadan)
{
while(lista->nast->nast!=NULL)
lista=lista->nast;
int i,j,temp,b,c=0;
struct element *pom=lista;
pom=(struct element *)malloc(sizeof(struct element));
struct element *pom2=lista;
pom2=(struct element *)malloc(sizeof(struct element));
for (i=0; i<liczba_zadan; i++)
{
for (j=0; j<liczba_zadan-1; j++)
{printf("dupa");
if (lista->liczba_pktow > lista->poprz->liczba_pktow)
{
pom->liczba_pktow = lista->poprz->liczba_pktow;
for(b=0;b<1000;b++)
pom->zadanie[b] = lista->poprz->zadanie[b];
lista->poprz->liczba_pktow = lista->liczba_pktow;
for(b=0;b<1000;b++)
lista->poprz->zadanie[b] = lista->zadanie[b];
lista->liczba_pktow = pom->liczba_pktow;
for(b=0;b<1000;b++)
lista->zadanie[b] = pom->zadanie[b];
}
lista=lista->poprz;
}
pom2=pom2->poprz;
lista=pom2;
}
printf("\n\n");
}
int main(void)
{
int liczba_zadan;
int liczba_pktow;
int i=1;
struct element *lista;
lista=utworz(lista);
lista=(struct element *)malloc(sizeof(struct element));
lista->liczba_pktow=0;
lista->zadanie[0]='0';
lista->nast=NULL;
lista->poprz=NULL;
lista=wczytaj_baze(lista);
liczba_zadan=wypisz(lista);
sort_wg_pktow(lista,liczba_zadan);
liczba_zadan=wypisz(lista);
free(lista);
return 0;
}
Nie mam pojecia co jest zle, program sie zawiesza na koncu, i w ogóle nie sortuje. jezeli ktos by mogl napisac mi co jest zle bylabym wdziecza:)