You are on page 1of 3

Ispit iz predmeta Strukture podataka

15. lipnja 2016.

Napomena za sve zadatke:


• Nije dopušteno korištenje goto naredbe, te statičkih i globalnih varijabli.

Zadatak 1 (5)

Jedan zapis datoteke organizirane po načelu raspršenog adresiranja sadrži matični broj
studenta (int), ime i prezime (50+1 znak), godinu studija (int) te trenutni prosjek ocjena
(float). Prazni se zapis prepoznaje po matičnom broju jednakom nula (0). Veličina bloka na
disku je 2048 B. Očekuje se najviše 100000 zapisa, a tablica je dimenzionirana za 35% veći
kapacitet. Prilikom upisa primjenjuje se metoda cikličkog preljeva. Ključ zapisa je matični
broj, a pretvorba ključa u adresu se obavlja već pripremljenom funkcijom
Ključ zapisa je šifra artikla, a transformacija ključa u adresu obavlja se zadanom funkcijom:

int adresa(int matbr);

Napisati funkciju koja će pronaći zapis sa zadanim matičnim brojem, a potom izbrisati sve
zapise iz pretinca u kojem je zapis pronađen.

int pronadji_izbrisi(FILE *f, int matbr);

Zadatak 2 (5)

Za tip podatka Red definirane su funkcije (nije ih potrebno pisati) za inicijalizaciju reda,
dodavanje elementa u red te za skidanje elementa iz reda. Prototipovi navedenih funkcija su:

void init_red(Red *red);


int dodaj(int element, Red *red);
int skini(int *element, Red *red);

Funkcije dodaj i skini vraćaju 1 ako je operacija dodavanja ili skidanja uspjela, a 0 inače.
Elementi reda su podatci tipa int. Tip Red definiran je sljedećim programskim odsječkom:

typedef struct at {
int element;
struct at *sljed;
} atom;
typedef struct {
atom *ulaz;
atom *izlaz;
} Red;

Napišite funkciju koja će iz zadanog reda u novi red izdvojiti sve elemente koji su manji od
prosjeka elemenata u redu. U ulaznom redu trebaju ostati elementi koji nisu izdvojeni.
Funkcija pozivatelju vraća taj novi red, a prototip je:

Red* IzdvojiManje(Red *red)


Zadatak 3 (5)

Na stog realiziran poljem spremaju se podaci cjelobrojnog tipa (int). Već su napisane funkcije
za skidanje sa stoga i stavljanje na stog. Napisati dodatnu funkciju koja će u stogu ostaviti
samo prvi element. Ta funkcija stogu smije pristupati samo preko funkcija za rad sa stogom
(ne smije direktno pristupati elementima polja). Prototipi funkcija za stavljanje i skidanje
elemenata sa stoga su:

typedef struct{
int polje[MAXSTOG];
int vrh;
}Stog;

int dodaj(int element, Stog *stog);


int skini(int *element, Stog *stog);
int prvi(Stog *stog);

Zadatak 4 (5)

Zadana je jednostruko povezana lista čiji zapis sadrži šifru artikla (long), naziv artikla
(50+1 znak) i količinu na skladištu (int). Potrebno je napisati funkciju koja će svim
elementima liste količinu umanjiti za umanjenje iz argumenta. Prototip je:

void umanji(cvor *glava, int umanjenje);

Zadatak 5 (5)

Zadano je binarno stablo čiji čvor sadrži ime studenta (20+1 znak), prezime studenta (20+1
znak) i maticni broj (int). Napisati rekurzivnu funkciju koja izračunava broj zapisa u stablu
kojima prezime počinje sa slovom "B". Prototip funkcije je :

int broj (cvor *korijen);


Zadatak 1.
int pronadji_izbrisi(FILE *f, int matbr)
{
zapis pom[C];
for (int i = 0; i < C; i++)
pom[i].indeks = 0;

zapis pret[C];
for (int i = 0; i < M; i++)
{
fseek(f, i*BLOK, SEEK_SET);
fread(pret, sizeof(pret), 1, f);
for(int j=0; j<C; j++)
if (pret[j].indeks == matbr) {
fseek(f, BLOK*i, SEEK_SET);
fwrite(pom, sizeof(pret), 1, f);
}
}
return 1;
}
Zadatak 2.
Red *IzdvojiManje(Red *red){
Red pom; Red *novi;
int br=0,el; double suma=0;
novi = (Red*)malloc(sizeof(Red));
init_red(&pom);init_red(novi);
while(SkiniIzReda(&el, red))
{
suma+=el;
br++;
DodajURed(el, &pom);
}
suma=suma/br;
while (SkiniIzReda(&el,&pom))
{
if(el<suma) DodajURed(el,novi);
else DodajURed(el,red);
}
return novi;
}

You might also like