---
# System prepended metadata

title: Programiranje 2 - jednostruko povezane kružne liste

---

# 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;
}
```