Vezbe 02 Ulancane Liste
-
Upload
mirko-mirkovic -
Category
Documents
-
view
228 -
download
0
description
Transcript of Vezbe 02 Ulancane Liste
Vebe 02Dodavanje vora na odreenu poziciju u jednostuko ulananoj listi:
void PushAtPosition(NODE* head, int data, int poz) {
NODE* newNode = (NODE*)malloc(sizeof(NODE));
NODE* current = head;
int i = 2;
while (current->next != NULL && i < poz) {
current = current->next;
i++;
}
newNode->data = data;
newNode->next = current->next;
current->next = newNode;}
Dvostruko ulanana lista
Dvostruko ulanane liste za razliku od jednostuko ulananih imaju pored pokazivaa na sledei element i pokaziva na prethodni. Ovo donosi prednosti u mogunosti lakseg kretanja u obe strane i bre pretrage ali zato svaki voj ima jedan pokaziva vie. Sto se tie alokacije memorije, ona je identina kao i kod jednostruko ulananih lista. Sa obzirom da u svakom voru postoje dva pokazivaa i zbog mogunosti kasnijeg korienja ovakve implementacije kreirati klasu Lista koja ima atribute pokazivae na prvi (head) i poslednji (end) cvor.
Slika 11. Dvostruko ulanana lista : a) nekruna ib) kruna
Umetanje vora u dvostruko ulananu listu
ZADATAK 2 : C dvostruko ulanana lista
Kreirati NODE koji pored podatka d ima kao atribute i pokazivae na sledei i prethodni vor. #include// definicija Nodatypedef struct Node{
int d;
struct Node* next;
struct Node* prev;}Node;// dodavanje Noda na kraj listeNode* push_back(Node* end, int p){
Node *temp = (Node*)malloc(sizeof(Node));
temp->prev = end;
temp->d = p;
end=temp;
return end;}// dodavanje Noda na pocetak listeNode* push_front(Node* begin, int p){
Node *temp = (Node*)malloc(sizeof(Node));
temp->next = begin;
temp->d = p;
begin = temp;
return begin;}//modifikovati da se brise poslednji cvorvoid pop_back(Node* end){
Node *temp = end;
printf("\nElement sa kraja liste = %d",temp->d);}//modifikovati da se brise prvi cvorvoid pop_front(Node* begin){
Node *temp = begin;
printf("\nElement sa pocetka liste = %d",temp->d);}// prokomentarisati da li se ispisuje cela listavoid display(Node* head) {
Node* current = head;
printf("\n\nISPIS LISTE\n");
for (current = head; current != NULL; current = current->next) {
printf("%d ",current->d);
}
printf("\n");}//prosta demonstracija funkcionalnostiint main(){
Node* begin;
Node* end;
int i;
for ( i=2;inext;
delete begin;
begin=temp;
}
}};void Lista::push_back(int p){
NODE *temp=new Node;
if(begin == NULL){
coutnext = NULL;
temp->prev = begin;
begin->next = temp;
end = temp;
}else {
temp->d = p;
temp->next = NULL;
temp->prev = end;
end->next = temp;
end = temp;
}};void Lista::push_front(int p){
NODE *temp=new Node;
if(begin == NULL){
temp->d = p;
temp->next = NULL;
temp->prev = NULL;
begin = temp;
}else if (begin->next==NULL){
end = begin;
temp->d = p;
temp->next = end;
temp->prev = NULL;
begin = temp;
begin->next = end;
end->prev = begin;
}else {
temp->d = p;
temp->next = begin;
temp->prev = NULL;
begin = temp;
}};//modifikovati da izbacuje cvor iz listevoid Lista::pop_back(){
if(end != NULL){
Node *temp=end;
cout