You are on page 1of 4

/*

Stvorite jednostavnu vezanu listu s podacima o filmovima


(naziv_filma, redatelj_filma, broj_nagrada).
Ponuditi korisniku izbornik s osnovnim operacijama:
dodavanje novih elemenata u listu,
ispis sadraja liste,
brisanje elementa liste,
pretraga liste,
brisanje elemenata liste,
dealokacija liste i izlaz iz programa.
*/
#include "stdafx.h"
#include <iostream>
using namespace std;

//header file projekta


//header u kojem je sadrana biblioteka std
//koritenje imenskog prostora std

struct film{
int id;
char naz[40];
char red[40];
int brn;
film *slijedeci;
};

//definiranje strukture liste elemenata


//deklaracija

//pointer unutar elementa kao clan liste

void unos(film *glavaListe){


//f-ja za unos u listu strukture tipa "film"
film *noviEl, *zadnjiGlava;
//alokacija pomonih pointera
zadnjiGlava=glavaListe;
//adresiranje ptr-a zadnjiGlava adresom glave liste
while(zadnjiGlava->slijedeci) //uvjet koji dohvaa adresu ptr-a slijedeci
zadnjiGlava=zadnjiGlava->slijedeci;//adresiranje ptr-a zadnjiGlava krajnjim el. u listi
noviEl=new film;
//stvaranje novog el. liste
noviEl->slijedeci=NULL;
//postavljanje ptr-a noviEl->slijedeci na NULL je sada
zadnji el.
zadnjiGlava->slijedeci=noviEl;//povezivanje predzadnjeg i zadnjeg el. - sada je zadnji noviEl
preko ptr. slijedeci ** pokaziva zadnjeg elementa (vora) u listi postavljamo da pokazuje na novi
element (vor)
cout<<"ID: ";
cin>>noviEl->id;
cout<<"Naziv: ";
cin.ignore();

cin.getline(noviEl->naz, 40);
cout<<"Redatelj: ";
cin.ignore();
cin.getline(noviEl->red, 40);
cout<<"Nagrada: ";
cin>>noviEl->brn;
}
void ispis(film *glavaListe){
//f-ja za ispis koja zaprima parametar tipa film ptr. glavaListe
film *tekuci;
//alokacija ptr.a
tekuci=glavaListe->slijedeci; //tekuci adresira se na poetni(prvi) el. za ispis na koji
pokazuje glava pomou ptr. slijedeci
while(tekuci){
//dok adresa ptr.a pokazuje na slijedeci
cout<<"ID: "<<tekuci->id<<endl;
cout<<"Naziv: "<<tekuci->naz<<endl;
cout<<"Redatelj: "<<tekuci->red<<endl;
cout<<"Nagrada: "<<tekuci->brn<<endl;
tekuci=tekuci->slijedeci; //adresiranje idueg el. u listi preko ptr. slijedeci
}//***kada stigne do NULL vrijednosti izlazi iz uvjeta jer NULL oznaava zadnji el. liste***
}
void trazi(film *glavaListe, int id){ //f-ja za pretragu zaprima parametre ptr. tipa glavaListe i
ID
film *tekuci;
//alokacija ptr.a tekuci tipa film
tekuci=glavaListe->slijedeci; //adresiranje ptr. tekuci adr.1.el. liste preko cl.ptr. slijedeci
while(tekuci){
//dok adresa ptr. slijedeci pokazuje na adresu-NIJE NUL
if(tekuci->id==id){ //uvjet da vrij. clana tekuceg el. ID bude ista kao zaprimljeni ID
cout<<"ID: "<<tekuci->id<<endl;
cout<<"Naziv: "<<tekuci->naz<<endl;
cout<<"Redatelj: "<<tekuci->red<<endl;
cout<<"Nagrada: "<<tekuci->brn<<endl;
cout<<"--------------------"<<endl;
break;
}
tekuci=tekuci->slijedeci;//prolaz listom adres na iduci el.(lista od 1. do NULL slijedeci)
}
}
void brisi(film *glavaListe, int id){//f-ja za bris. el. zaprima ptr. tipa film i int ID tipa film

film *brisiEl, *prethodni;


//alokacija ptr.a
prethodni=glavaListe;
//adresiranje prethodni adresom glavaListe (sauvanje adrese ptr.
glavaListe)
brisiEl=glavaListe->slijedeci;//postavljanje adrese brisiEl na prvi el. liste pomocu ptr.
/
//slijedeci glaveListe koji pokazuje na prvi iduci el. liste
while(brisiEl){
//dok brisiEl pokazuje na slijedeci(dok slijedeci nije NULL)
if(brisiEl->id==id){
//uvjet ako je id u trenutnom el. isti kao zaprimljeni ID
prethodni->slijedeci=brisiEl->slijedeci;
//premost' adr.ptr.brisiEl kopira se u
prethodni koji sada pokazuje na adr. brisiEl->slijedeci odnosno naredni el. nakon brisiEl
//***odstranjivanje elementa se provodi tako da njega veemo na element koji slijedi iza elementa
kojeg odstranjujemo
delete brisiEl;
//brisi taj el. sa istim ID
break;
//break - prekini uvjet
}
prethodni=brisiEl;
brisiEl=brisiEl->slijedeci;
}
}
film *dealoc(film *glavaListe){
film *tekuci, *prethodni;
prethodni=glavaListe;
tekuci=glavaListe->slijedeci;
while(tekuci){
delete prethodni;
prethodni=tekuci;
tekuci=tekuci->slijedeci;
}
delete prethodni;
return NULL;
}
void main(){
int izbor, id;
film *glavaListe=new film;
glavaListe->slijedeci=NULL;
do{

//f-ja za dealokaciju zaprima ptr. glavaListe tipa film


//aloc. pomocnih ptr.a
//adresiranje prethodni sa adresom glava liste
//tekuci se adresira na prvi element liste
//dok tekuci nije NULL
//delete prethodni
//adresiranje prethodnog sa adresom tekuceg
//adresiranje tekuceg sa el. nakon trenutnog tekuceg
//brisanje prethodnog
//vrati NULL

cout<<"1. Unos"<<endl;
cout<<"2. Ispis"<<endl;
cout<<"3. Trazi"<<endl;
cout<<"4. Brisi"<<endl;
cout<<"5. Dealoc"<<endl;
cin>>izbor;
switch(izbor){
case 1:unos(glavaListe);break;
case 2:ispis(glavaListe);break;
case 3:
cout<<"ID filma: ";
cin>>id;
trazi(glavaListe, id);break;
case 4: cout<<"ID filma: ";
cin>>id;
brisi(glavaListe, id);break;
case 5:glavaListe=dealoc(glavaListe);break;
}
}while(izbor!=5);
cout<<(int)glavaListe;
}

You might also like