[ kole1108 @ 20.11.2005. 08:41 ] @
Ovako imam zadaću i trebam je predati danas do 23:59 pa ako mi je netko voljan pomoći s tim vezanim listama pa da bar riješi bilo koji od ovih zadataka ispod i pošalje na mail: [email protected] Znam da svi mrze kad se traže gotovo rješenja ali mi ne ide jednostavno, kod slijedi, puno hvala unaprijed! Rješenja funkcija trebaju biti pohranjene po imenima u datoteke: ->> dodavanje na početak reda - PROG04_4_1.C ->> dodavanje na kraj reda - PROG04_4_2.C ->> dodavanje prema najvećem prioritetu - PROG04_4_3.C ->> dodavanje prema najmanjem prioritetu - PROG04_4_4.C ->> brisanje elemenata iz reda - PROG04_4_5.C #include <stdio.h> #include <string.h> #include <stdlib.h> // typedef uvodi vlastito definirani tip podatka LISTA typedef struct lista { unsigned int kljuc; char naziv[20]; struct lista *sljedeci; // kazaljka na sljedeci element } LISTA; typedef struct red { struct lista *prvi; // kazaljka na prvi element reda struct lista *posljednji; // kazaljka na posljednji element reda } RED; // vraca broj elemenata liste unsigned int broj_elemenata(LISTA *pocetak_liste) // pocetak_liste je adresa od koje pocinje ispis { LISTA *p; // p sadrzi adresu tekuceg elementa liste unsigned int br_el=0; // br_el sadrzi broj elemenata p = pocetak_liste; // p prima adresu pocetka liste while(p) { ++br_el; p = p->sljedeci; // prijelaz na sljedeci element } return(br_el); } // ispisuje elemente liste void ispis_liste(LISTA *pocetak_liste) // pocetak_liste je adresa od koje pocinje ispis { LISTA *p; // p sadrzi adresu tekuceg elementa liste p = pocetak_liste; // p prima adresu pocetka liste printf("\n"); while(p) { printf("%5d->%20s\n",p->kljuc,p->naziv); p = p->sljedeci; // prijelaz na sljedeci element } } void dodaj_element(RED *pocetak_reda, LISTA *novi_element); // priprema za dodavanje u red void dodaj_u_listu(RED *pocetak_reda) // pocetak_reda je adresa varijable koja sadrzi adrese prvog i posljednjeg elementa { LISTA *novi_element; // novi_element je adresa elementa koji se dodaje unsigned int ucitani_kljuc; // kljuc novog elementa char ucitani_naziv[20]; // nazi novog elementa do { printf("Upisi kljuc (0 za kraj) :"); scanf("%5d",&ucitani_kljuc); // upisuje se kljuc if(ucitani_kljuc == 0) // kljuc = 0 tj. kraj unosa break; printf("Upisi naziv :"); scanf("%s",&ucitani_naziv); // upisuje se naziv novi_element = (LISTA *) malloc(sizeof(LISTA)); // alokacija memorije novi_element->kljuc = ucitani_kljuc; // kljucu novog elementa pridruzuje se upisana vrijednost strncpy(novi_element->naziv, ucitani_naziv, 20);// nazivu novog elementa kopira se upisani naziv dodaj_element(pocetak_reda, novi_element);// poziv funkcije za dodavanje u red } while(1); } void brisi_element(RED *pocetak_reda, int ucitani_kljuc); // priprema za brisanje iz reda void brisi_iz_liste(RED *pocetak_reda) // pocetak_reda je adresa varijable koja sadrzi adrese prvog i posljednjeg elementa { unsigned int ucitani_kljuc; // kljuc koji se brise do { printf("Upisi kljuc za brisanje (0 za kraj) :"); scanf("%5d",&ucitani_kljuc); // upisuje se kljuc za brisanje if(ucitani_kljuc == 0) // kljuc = 0 tj. kraj unosa break; brisi_element(pocetak_reda, ucitani_kljuc); // poziv funkcije za brisanje iz reda } while(1); } main() { RED pocetak_reda; unsigned int upit; pocetak_reda.prvi = NULL; // nema prvog elementa pocetak_reda.posljednji = NULL; // nema posljednjeg elementa for(;;) { printf("\n\nIzaberi\n" "1.Dodavanje elemenata\n" "2.Brisanje elemenata\n" "3.Ispis liste\n" "0.Kraj\n" " Izbor: "); scanf("%1d",&upit); switch(upit) { case 0: exit(0); break; case 1: dodaj_u_listu(&pocetak_reda); break; case 2: brisi_iz_liste(&pocetak_reda); break; case 3: ispis_liste(pocetak_reda.prvi); printf("---ukupno %d elem.---\n", broj_elemenata(pocetak_reda.prvi)); break; } } } |