pravim jednostruku listu. Sve je ok, ali ne mogu da napravim funkciju za brisanje elementa iz jednostruke liste. U biti, funkcija treba da radi sljedece:
void UkloniElemenat(JCVOR **pocetak,int id_elementa) - ukoni elemenat sa zadanim IDom. Znam da da trebam gledati sljedeci elemenat i zatim ako je on jedank trazenom IDu postaviti da pokazuje na sljedeci->sljedeci ali nikako ne mogu to da napravim a da se program ne obori. PLEASE HELP!
Evo sta sam do sada napisao: U funkciji UkloniElemenat znam da mora biti jos i specijalni slucaj ako ima samo jedan cvor, ali ne razumjem kako odraditi ovo kada ih ima vise.
Code:
typedef struct cvor
{
int data;
struct cvor *sljedeci;
} JCVOR;
JCVOR *glava = NULL;
void DodajElement(JCVOR **pocetak,int vrijednost);
void UkloniElemenat(JCVOR **pocetak,int id_elementa);
void main( void )
{
JCVOR *curr;
DodajElement(&glava,10);
DodajElement(&glava,20);
DodajElement(&glava,30);
for (curr = glava;curr!=NULL; curr=curr->sljedeci)
{
//printf("%d",curr->data);
}
UkloniElemenat(&glava,20);
}
void DodajElement(JCVOR **pocetak,int vrijednost)
{
JCVOR *NoviCvor;
if ( (NoviCvor = (JCVOR *)malloc( sizeof( JCVOR ) )) == NULL )
{
printf( "Neuspjela alokacija memorije! ");
}
else
{
NoviCvor->data = vrijednost;
NoviCvor->sljedeci = *pocetak;
*pocetak = NoviCvor;
}
}
void UkloniElemenat(JCVOR **pocetak,int id_elementa)
{
JCVOR *trenutni;
for (trenutni = *pocetak; trenutni->sljedeci !=NULL; trenutni=trenutni->sljedeci)
{
if ( trenutni->sljedeci->data == id_elementa)
{
trenutni = trenutni->sljedeci->sljedeci;
free(trenutni->sljedeci);
}
}
}
typedef struct cvor
{
int data;
struct cvor *sljedeci;
} JCVOR;
JCVOR *glava = NULL;
void DodajElement(JCVOR **pocetak,int vrijednost);
void UkloniElemenat(JCVOR **pocetak,int id_elementa);
void main( void )
{
JCVOR *curr;
DodajElement(&glava,10);
DodajElement(&glava,20);
DodajElement(&glava,30);
for (curr = glava;curr!=NULL; curr=curr->sljedeci)
{
//printf("%d",curr->data);
}
UkloniElemenat(&glava,20);
}
void DodajElement(JCVOR **pocetak,int vrijednost)
{
JCVOR *NoviCvor;
if ( (NoviCvor = (JCVOR *)malloc( sizeof( JCVOR ) )) == NULL )
{
printf( "Neuspjela alokacija memorije! ");
}
else
{
NoviCvor->data = vrijednost;
NoviCvor->sljedeci = *pocetak;
*pocetak = NoviCvor;
}
}
void UkloniElemenat(JCVOR **pocetak,int id_elementa)
{
JCVOR *trenutni;
for (trenutni = *pocetak; trenutni->sljedeci !=NULL; trenutni=trenutni->sljedeci)
{
if ( trenutni->sljedeci->data == id_elementa)
{
trenutni = trenutni->sljedeci->sljedeci;
free(trenutni->sljedeci);
}
}
}
PLEASE HELP. Sve ostale potrebne funkcije sam nasao u odlicnim tutorialima, jedino mi ova fali. Imam Pop ali ona ne zadovoljava, jer brise samo sa pocetka stack-a.