Professional Documents
Culture Documents
Rjesenja zadace:
#include <stdio.h>
#include <cstdlib>
#include <iostream>
pom = pom->sledeci;
return;
int main()
{
cvor *startpokazivac,*zadnji,*pomocni;
string rijec;
cout<<"upisite rijec:";
cin>>rijec;
int i=0;
startpokazivac=NULL;
while(rijec[i] !='\0'){
cvor *novi = new cvor;
novi->slovo=rijec[i];
novi->sledeci = NULL;
if (startpokazivac == NULL){
startpokazivac=novi;
}else{
pomocni = startpokazivac;
// postavljamo pom na kraj liste
while (pomocni->sledeci != NULL)
{
pomocni = pomocni->sledeci; // pomjeranje na slijedeći čvor
}
pomocni->sledeci = novi;// pokazivač zadnjeg čvora u listi postavljamo da
pokazuje na novi čvor
}
i++;
}
cout<<"ispis podataka iz liste:"<<endl;
zadnji=startpokazivac;
while(zadnji !=NULL){
zadnji=zadnji->sledeci;
}
cout<<endl;
cout<<"ispis podataka iz liste uz pomoc funkcije:"<<endl;
ispisi_listu(startpokazivac);
cout<<"ispis podataka iz liste uz pomoc funkcije ali nakon brisanja prvog
cvora:"<<endl;
startpokazivac= brisi_prvi_cvor(startpokazivac);
cout<<"vrijednost startnog pokazivaca: "<<startpokazivac<<endl;
ispisi_listu(startpokazivac);
return 0;}
Za rad sa povezanom listom, potrebno je uspostaviti mehanizam kretanja po listi, unaprijed ili unazad.
Ovo je naročito potrebno aki želimo brisati ili upisivati čvor unutar liste.
Kretanje naprijed:
Deklarišimo pointer tekuci. Najprije mu dodjeljujemo adresu prvog čvora u listi, koju čuvamo u pointeru
start_ptr (startni pokazivac je nasa veza sa listom!) :
cvor *tekuci;
tekuci = start_ptr;
Nakon ovih naredbi oba pointera pokazuju na isti (pocetni) čvor:
Pomjeranje pointera tekuci unaprijed realizujemo naredbom u kojoj pointeru tekuci dodjeljujemo
adresu cvora koji slijedi, a koja je upisana u članicu “slijedeci” čvora na kojeg tekuci pokazuje:
tekuci = tekuci->slijedeci;
Prije prethodne naredbe dodjele, potrebno je provjeriti da tekući u polju slijedeći ne sadrži null
vrijednost. Ako je to tako, onda tekuci pokazuje na zadnji čvor u list i nema potrebe za njegovim
pomjeranjem:
if (tekuci->slijedeci == NULL)
cout << "Pozicionirani ste na kraj liste." << endl;
else
tekuci = tekuci->slijedeci;
Kao sto znamo listi pristupamo preko startnog pokazivaca.Idemo naprijed sve dok ne dodjemo do cvora
br. 3 (jer je on predhodnik naseg trenutnog cvora na kome se nalazimo).
Kako cu znati da sam nasao predhodnika? Tako sto pokazivac slijedeci od predhodnika pokazuje na nas
trenutni cvor (tj sadrzi njegovu adresu).
Najprije ćemo provjeriti da li pointer tekuci pokazuje na prvi čvor. Ako je tako, onda on nema
prethodnika. Ako nije, onda provjeravamo sve čvorove dok ne naiđemo na prethodnika tekućeg
if (tekuci == start_ptr)
cout << "Pocetak liste!" << endl;
else
{ cvor *prethodni; // pointer koji pokazuje na prethodnika
prethodni = start_ptr;
while (prethodni->slijedeci != tekuci)
{
prethodni = prethodni->slijedeci;
}
tekuci = prethodni;//tekuci smo pomijerili za jedno mjesto unaprijed
}
Sada kada možemo da se “krećemo” unaprijed i unazad kroz listu, možemo uraditi još ponešto sa listom.
Naprimjer, možemo mijenjati podatke u čvoru liste na koji pokazuje tekuci: