Trebam da rešim problem koji izgleda ovako: Unositi studente (ime, prezime,ocenu) sortirano u listu po sledećim kriterijumima:
1. Po prosečnoj oceni;
2.Ukoliko je prosečna ocena ista kod studenata, njih sortirati leksikografski po imenu
Ja sam uradio samo za prosečnu ocenu, i posebno da sortira leksikografski, ali ne uspevam da uradim kombinaciju da radi kako treba, pa molim za pomoć.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _cvor
{
char ime[100];
char prezime[100];
float ocena;
struct _cvor *sl;
}CVOR;
CVOR* naparavi_cvor(char ime[],char* prezime,float ocena)
{
CVOR*novi=(CVOR*)malloc(sizeof(CVOR));
if (novi==NULL) exit(-1);
strcpy(novi->ime,ime);
strcpy(novi->prezime,prezime);
novi->ocena=ocena;
return novi;
}
void ubaci_na_pocetak_ime(CVOR**pl,char* ime,char*prezime,float ocena)
{
CVOR*novi=naparavi_cvor(ime,prezime,ocena);
if (*pl==NULL || strcmp(ime,(*pl)->ime)<0)
{
novi->sl=*pl;
*pl=novi;
return;
}
CVOR*t;
for (t=*pl;t->sl!=NULL && strcmp(ime,t->sl->ime)>0;t=t->sl);
novi->sl=t->sl;
t->sl=novi;
}
void ubaci_na_pocetak_prosek(CVOR**pl,char* ime,char*prezime,float ocena)
{
CVOR*novi=naparavi_cvor(ime,prezime,ocena);
if (*pl==NULL || ocena > (*pl)->ocena)
{
novi->sl=*pl;
*pl=novi;
return;
}
CVOR*t;
for (t=*pl;t->sl!=NULL && t->sl->ocena > ocena;t=t->sl);
novi->sl=t->sl;
t->sl=novi;
}
void ispis_liste(CVOR*l)
{
CVOR*t;
for (t=l;t!=NULL;t=t->sl)
printf("%s\t%s\t%f\n",t->ime,t->prezime,t->ocena);
}
void oslobodi(CVOR*l)
{
while (l)
{
CVOR*tmp=l->sl;
free(l);
l=tmp;
}
}
int main()
{
CVOR*l=NULL;
CVOR*m=NULL;
char ime[100];
char prezime[100];
float ocena;
int i;
for (i=0;i<3;i++)
{
printf("\nUnesite Ime Studenta:");
scanf("%s",&ime);
printf("\nUnesite Prezime Studenta:");
scanf("%s",&prezime);
printf("\nUnesite Prosecnu Ocenu:");
scanf("%f",&ocena);
ubaci_na_pocetak_ime(&l,ime,prezime,ocena);
ubaci_na_pocetak_prosek(&m,ime,prezime,ocena);
}
printf("\n\n---------Ispis leksikografski po imenima----------\n");
ispis_liste(l);
printf("\n\n-----------Ispis po prosecnoj oceni-----------\n");
ispis_liste(m);
oslobodi(l);
oslobodi(m);
return 0;
}