#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct osoba
{
char ime[10], prez[10];
int g_r;
struct osoba *next;
}*pocetak;
void ubaci_na_poc();
void ispis();
void ubaci_na_kraj();
void brisi();
void ubaci_iza();
void ubaci_ispred();
void citaj_iz_datoteke();
void pisi();
main()
{
int radnja;
printf("\nOdaberite zeljenu radnju:\n");
printf("\n1. Dodavanje novog elementa na pocetak liste");
printf("\n2. Ispis liste");
printf("\n3. Dodavanje novog elementa na kraj liste");
printf("\n4. Brisanje elemanta iz liste");
printf("\n5. Dodavanje elementa ispred zeljenog elementa liste");
printf("\n6. Dodavanje elementa iza zeljenog elementa liste");
printf("\n7. Citanje liste iz datoteke");
printf("\n8. Upisivanje liste u datoteku");
printf("\n\nradnja >>");
scanf("%d",&radnja);
switch (radnja)
{
case 1:
ubaci_na_poc();
break;
case 2:
ispis();
break;
case 3:
ubaci_na_kraj();
break;
case 4:
brisi();
break;
case 5:
ubaci_iza();
break;
case 6:
ubaci_ispred();
break;
case 7:
citaj_iz_datoteke();
break;
case 8:
pisi();
break;
default:
printf("\nPogresan unos!\n");
break;
}
return (0);
}
//f-ja koja dinamicki dodaje novi element na pocetak liste
void ubaci_na_poc()
{
struct osoba *q;
q=(struct osoba*) malloc(sizeof(struct osoba)); //ne znan sta ide ovdi
scanf(" %s %s %d",q->ime,q->prez,&q->g_r); // jel' ide & operator
q->next=pocetak;
pocetak=q;
}
//f-ja koja ispisuje listu
void ispis()
{
struct osoba *q;
q=pocetak;
while(q!=NULL)
{
printf("%s %s\t%d",q->ime, q->prez, q->g_r);
q = q->next;
}
}
//f-ja koja dinamicki dodaje novi element na kraj liste
void ubaci_na_kraj()
{
struct osoba *q, *kraj;
q=(struct osoba*) malloc(sizeof(struct osoba)); //jel' tako??
q->next = NULL;
printf("\nUpisite novu osobu:");
printf("\nIme: ");
scanf(" %s",q->ime);
printf("\nPrezime: ");
scanf(" %s",q->prez);
printf("\nGodina rodjenja: ");
scanf("%d",&q->g_r);
q->next=NULL;
if(NULL==pocetak)
pocetak=q;
else
{
while(kraj->next != NULL)
kraj=kraj->next;
kraj->next=q;
}
}
//f-ja koja brise odredjeni element iz liste (moze biti prvi, zadnji i neki u sredini)
void brisi()
{
struct osoba *preth, *q;
preth=NULL;
q=pocetak;
char a[20];
printf("\nUnesite ime osobe koju zelite izbrisati: ");
scanf(" %s",a);
while(strcmp(a,q->ime) != 0 && q != NULL)
{
preth=q;
q=q->next;
}
if(q==NULL)
printf("\nElement ne postoji!");
else if (q==pocetak) //prvi element
pocetak = q->next;
else preth->next = q->next;
if(q != NULL)
free(q);
}
//f-ja koja dodaje element iza odredjenog elementa (moze biti prvi)
void ubaci_iza()
{
struct osoba *q, *p;
int x;
printf("\nUnesite godinu rodjenja osobe iza koje zelite dodati novu osobu:\nIme: ");
scanf("%d",&x);
p=pocetak;
while(x != p->g_r && p != NULL)
p = p->next;
if(p == NULL)
printf("\nElement ne postoji!");
else
{
q=(struct osoba*) malloc(sizeof(struct osoba));
scanf(" %s %s %d", q->ime, q->prez, &q->g_r);
q->next=p->next;
p->next=q;
}
}
Evo zadatak koji je slican ovome sta sam ga postavija.
Ne radi, javlja neke 4 cudne greske.
Koristim Visual C++, ali pisem C kod.
Niste trebali bit tako okrutni sa odgovorima.
Bija bi najzahvalniji da mi napisete par linija koda ili da malo prokomentirate ovaj napisani kod tj. ko sta tu radi.
Ako neko ima slicne primjere zadataka sa vezanim listama neka mi posalje na
[email protected].
Hvala na strpljenju.
R_O_K_E