# Programiranje 2 - jednostruko povezane kružne liste #### Svaka lista sastoji se od: 1. strukture ```cpp= struct node { int data; node* next; } ``` 2. main-a ```cpp= node* last = NULL; // node* tail = NULL; //koristi samo kod dodavanje elemenata na kraj liste char choice; do { cout << "1 - unos elemenata u listu." << endl; cout << "2 - ispis elemenata iz liste." << endl; cout << "3- brisanje elemenata iz liste." << endl; cout << "Izaberi funkcionalnost: "; cin >> choice; switch(choice) { case '1': add(last); break; case '2': if (checkEmpty(last) == 1) { cout << "Lista je prazna, molim unesite element u listu." << endl; } else listElements(last); break; case '3': if (checkEmpty(last) == 1) { cout << "Lista je prazna, molim unesite element u listu." << endl; } else removeElement(last); break; default: break; } } } while(choice != '0'); memoryDeallocation(last); cout << "Kraj programa." << endl; ``` 3. funkcija (unos, ispis, brisanje, dealokacija memorije...) Funkcije su detaljnije obrađene u daljnjem dijelu dokumentacije. #### Funkcija za unos: ```cpp= void unos(node*& last) { int data; cout << "unesite podatak: "; cin >> data; node* newNode = new node; newNode->data = data; if(last == NULL) { newNode->next = newNode; } else { newNode->next = last->next; last->next = newNode; } last = newNode; } ``` #### Funkcija za ispis: ```cpp= void ispis(node* last) { node* current = last->next; do { cout << current->data << " "; current = current->next; }while(current != last->next); cout << endl; } ``` #### Funkcija za brisanje: ```cpp= void brisanje(node*& last) { node* tmp; if(tmp != last->next) { tmp = last->next; last->next = tmp->next; delete tmp; tmp = NULL; } else { last = NULL; } } ``` #### Funkcija za dealokaciju memorije: ```cpp= void dealokacijaMemorije(node*& last) { node* tmp; do{ tmp = last->next; last->next = tmp->next; delete tmp; tmp = NULL; } while(last = last->next); last = NULL; cout << "uspjesna dealokacija memorije" << endl; } ``` #### Primjer cijelog programa: ```cpp= #include <iostream> using namespace std; struct node { int data; node* next; }; void unos(node* & last) { int data; cout << "unesite podatak: "; cin >> data; node* newNode = new node; newNode->data = data; if(last == NULL) { newNode->next = newNode; } else { newNode->next = last->next; last->next = newNode; } last = newNode; } bool provjera(node* last) { if(last == NULL) { return 1; } else return 0; } void ispis(node* last) { node* current = last->next; do { cout << current->data << " "; current = current->next; }while(current != last->next); cout << endl; } void brisanje(node*& last) { node* tmp; if(tmp != last->next) { tmp = last->next; last->next = tmp->next; delete tmp; tmp = NULL; } else { last = NULL; } } void dealokacijaMemorije(node*& last) { node* tmp; do{ tmp = last->next; last->next = tmp->next; delete tmp; tmp = NULL; } while(tmp = last->next); last = NULL; cout << "uspjesna dealokacija memorije" << endl; } int main() { node* last = NULL; char odabir; do { cout << "1 - unos" << endl; cout << "2 - ispis" <<endl; cout << "3 - brisanje" << endl; cout << "odabir: "; cin >> odabir; switch(odabir) { case '1': unos(last); break; case '2': if(provjera(last) == 1){ cout << "lista je prazna" << endl; } else ispis(last); break; case '3': if(provjera(last) == 1){ cout << "lista je prazna" << endl; } else brisanje(last); default: break; } } while(odabir != '0'); dealokacijaMemorije(last); cout << "kraj programa" << endl; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up