#include <iostream>
#include <stdexcept>


template <typename T>
class Red{

    struct Cvor{
        T element;
        Cvor *veza;
    };

    Cvor *celo;
    Cvor *zacelje;
    void IzbrisiVrh();
    public:
    Red() : celo(nullptr), zacelje(nullptr){}
    ~Red(){while(celo != nullptr) IzbrisiVrh();}
    void DodajNaZacelje(T x);
    void SkiniSaCela() {
        if(DaLiJePrazan()) throw std::logic_error("Prazan red");
        IzbrisiVrh();
    };
    T DajCelo() const {
        if(DaLiJePrazan()) throw std::logic_error("Prazan red"); 
        return celo->element;};
    bool DaLiJePrazan() const{ return celo == nullptr;};
    int VelicinaReda() const;
    
};

template <typename T>
void Red<T>::DodajNaZacelje(T x){
    Cvor *novi = new Cvor {x, nullptr};
    if(!celo) celo = novi;
    else
    zacelje->veza = novi;
    zacelje = novi;
}
template <typename T>
void Red<T>::IzbrisiVrh(){

    Cvor *stari = celo;
    celo = celo->veza;
    delete stari;
    if(celo == nullptr) zacelje = nullptr;
}
template <typename T>
int Red<T>::VelicinaReda()const{

    int brojac = 0;
    for(auto p = celo; p != nullptr; p = p->veza) brojac ++;

    return brojac;
}

int main() {
    Red<int> r;

    std::cout << "Je li prazan: " << r.DaLiJePrazan() << std::endl;

    r.DodajNaZacelje(3);
    r.DodajNaZacelje(5);
    r.DodajNaZacelje(8);

    std::cout << "Velicina: " << r.VelicinaReda() << std::endl;
    std::cout << "Celo: " << r.DajCelo() << std::endl;

    r.SkiniSaCela();

    std::cout << "Nakon skidanja jednog elementa:" << std::endl;
    std::cout << "Velicina: " << r.VelicinaReda() << std::endl;
    std::cout << "Celo: " << r.DajCelo() << std::endl;

    r.SkiniSaCela();

    std::cout << "Nakon skidanja drugog elementa:" << std::endl;
    std::cout << "Velicina: " << r.VelicinaReda() << std::endl;
    std::cout << "Celo: " << r.DajCelo() << std::endl;

    r.SkiniSaCela();

    std::cout << "Nakon skidanja treceg elementa:" << std::endl;
    std::cout << "Velicina: " << r.VelicinaReda() << std::endl;
    std::cout << "Je li prazan: " << r.DaLiJePrazan() << std::endl;

    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: