Witam, mam problem z listą podwieszaną. Chodzi o to, że nie moge dodać listy albumów, która jest połaczona z listą zespołów... gdzie jest błąd? (od każdego zespołu odchodzi osobna lista na albumy)
funkcja dodaj_zespoly działa poprawnie, problem jest z dodaj_albumy, i jedyne co wyczaiłem to wywalanie przy porównaniu wsk->next2==NULL
typedef struct zespol
{
char nazwa[30];
char kraj[20];
}zespol;
typedef struct album
{
char nazwa[30];
int rok_wydania;
}album;
typedef struct podwieszana
{
album dane;
struct podwieszana *next;
struct podwieszana *poprz;
} podwieszana;
typedef struct element
{
zespol dane;
struct element *next;
struct element *poprz;
struct podwieszana *next2;
} el_listy;
struct element *glowa=NULL;
struct element *ogon=NULL;
void dodaj_zespol (zespol dane_zesp,int *licznik){
el_listy *tmp=glowa;
el_listy *nowy;
nowy = (el_listy*)malloc(sizeof(el_listy));
if (glowa==NULL){
glowa=nowy;
nowy->dane = dane_zesp;
nowy->next = NULL;
nowy->poprz= NULL;
nowy->next2=NULL;
ogon=nowy;
}
else{
nowy->dane = dane_zesp;
if ((stricmp(glowa->dane.nazwa, nowy->dane.nazwa))>0){
nowy->next = glowa;
glowa->poprz=nowy;
nowy->poprz=NULL;
nowy->next2=NULL;
glowa=nowy;
}
else{
while ((tmp->next!=NULL)&&((stricmp(tmp->dane.nazwa, nowy->dane.nazwa) < 0)))
tmp=tmp->next;
nowy->poprz = tmp;
nowy->next = tmp->next;
nowy->next2=NULL;
if (tmp->next != NULL){
tmp->next->poprz = nowy;
tmp->next = nowy;
}
else{
nowy->next==NULL;
tmp->next = nowy;
ogon=nowy;
}
}
}
(*licznik)++;
}
void dodaj_album (album dane_albumu, el_listy *wsk){
podwieszana *tmp=wsk->next2;
podwieszana *nowy;
nowy = (podwieszana*)malloc(sizeof(podwieszana));
if (wsk->next2==NULL){
printf("pierwszy element listy pusty");
wsk->next2=nowy;
nowy->dane = dane_albumu;
nowy->poprz=wsk;
nowy->next=NULL;
}
else{
nowy->dane = dane_albumu;
if ((stricmp(wsk->next2=nowy->dane.nazwa, nowy->dane.nazwa))>0){
nowy->next = wsk->next2;
wsk->next2->poprz=nowy;
nowy->poprz=wsk;
wsk->next2=nowy;
}
else{
while ((tmp->next!=NULL)&&((stricmp(tmp->dane.nazwa, nowy->dane.nazwa) < 0)))
tmp=tmp->next;
nowy->poprz = tmp;
nowy->next = tmp->next;
if (tmp->next != NULL){
tmp->next->poprz = nowy;
tmp->next = nowy;
}
else{
nowy->next==NULL;
tmp->next = nowy;
}
}
}
}
album wpisz_album(){
el_listy *wsk;
wsk=znajdz_zespol(wsk);
if (wsk==NULL){
printf("Nie ma takiego zespolu na liscie!");
getch();
return;
}
album dane;
printf("Podaj nazwe albmumu: ");
fgets(dane.nazwa, 20, stdin);
printf("Podaj rok wydania: ");
scanf("%d",&dane.rok_wydania);
dodaj_album(dane,&wsk);
return;
}