Vezbe 02 Ulancane Liste

14
Vežbe 02 Dodavanje čvora na određenu poziciju u jednostuko ulančanoj 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; } 1

description

k

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