Professional Documents
Culture Documents
Jednostruko Povezane Kruzne Liste
Jednostruko Povezane Kruzne Liste
Podatak
...
Pokaziva
Objanjenja
Ovaj program dodaje novi vor u postojeu listu tj. ubacuje novi vor na njen
kraj i postavlja polje pokazivaa novoubaenog vora da pokazuje na prvi lan liste.
Na ovaj nain postiemo da poslednji vor liste obavezno ukazuje na poetak liste.
Objanjenja
Da bismo razdvojili listu od 2n vorova na dva jednaka dela potrebno proi
kroz nju sve dok se ne stigne do n-tog vora (polovine). Tada uvodimo novi
pokaziva, koji je definisan kao pokaziva na pokazivaku strukturu da bio oznaio
poetak nove (druge) liste koja poinje od (n+1). vora. Nakon toga, n-ti vor se
nameta da pokazuje na prvi vor liste, a kod druge liste koja poinje od (n+1). vora
se nameta da poslednji vor stare liste pokazuje na njega, koji je sada prvi vor druge
liste. Na ovaj nain su od stare liste duine 2n, napravljene dve nove krune liste
podjednake duine. Funkcija split se moe, svakako, koristiti i za proizvoljno
razdvajanje liste na dva dela. U tom sluaju, potrebno je zadati broj vora iza koga se
eli razdvajanje (u programu, tada, treba voditi rauna da taj broj nije vei od duine
same liste).
# include <stdio.h>
# include <stdlib.h>
struct node
{
int data;
struct node *link;
};
struct node *insert(struct node *p, int n)
{
struct node *temp;
if(p==NULL)
{
p=(struct node *)malloc(sizeof(struct node));
if(p==NULL)
{
printf(" Greska \n");
exit(0);
}
p-> data = n;
p-> link = p;
}
else
{
temp = p;
while (temp-> link != p)
temp = temp-> link;
temp-> link = (struct node *)malloc(sizeof(struct node));
if(temp -> link == NULL)
{
printf(" Greska \n");
exit(0);
}
temp = temp-> link;
temp-> data = n;
temp-> link = p;
}
return (p);
}
void printlist ( struct node *p )
{
struct node *temp;
temp = p;
printf(" Podaci u listi su \n");
if(p!= NULL)
{
do
{
printf("%d\t",temp->data);
temp=temp->link;
} while (temp!= p);
}
else
printf(" Lista je prazna \n");
}
struct node *merge(struct node *p, struct node *q)
{
struct node *temp=NULL;
struct node *r=NULL;
Objanjenja
Da bismo spojili ili nastavili jednu krunu listu na drugu, sa pokazivaima p i
q tim redom, potrebno je najpre postaviti da je pokaziva na novu listu pokaziva p.
Dalje, prolazimo kroz listu p sve dok ne stignemo do njenog kraja i tada polje
pokazivaa poslednjeg vora postaje pokaziva q. Nakon toga, se prolazi kroz listu q
sve dok se ne doe do njenog kraja, a nakon toga se polje pokazivaa poslednjeg
vora iz liste q postavlja da pokazuje na poetak liste tj. na pokaziva p.
Objanjenja
Princip izvravanja funkcije reverselist je veoma slian kao i funkcije
reverse koju smo pominjali kod jednostruko povezanih lista, s tim to u ovom
sluaju dodatno treba voditi rauna da poslednji lan ne pokazuje na NULL, ve na
prvi lan liste.