diff options
| author | Santo Cariotti <dcariotti24@gmail.com> | 2020-10-18 18:56:43 +0200 | 
|---|---|---|
| committer | Santo Cariotti <dcariotti24@gmail.com> | 2020-10-20 09:08:52 +0200 | 
| commit | f279107065146a4940f5e73602a1c3c09e58b31d (patch) | |
| tree | fd892749637a8b6c5c31ccb80bba04ade76ab87a /1_anno/Programmazione_2/data_structures/queue.cc | |
| parent | 4e063e32250312c38d5646840719b62429362b21 (diff) | |
chore: name of first year folder
Diffstat (limited to '1_anno/Programmazione_2/data_structures/queue.cc')
| -rw-r--r-- | 1_anno/Programmazione_2/data_structures/queue.cc | 72 | 
1 files changed, 72 insertions, 0 deletions
| diff --git a/1_anno/Programmazione_2/data_structures/queue.cc b/1_anno/Programmazione_2/data_structures/queue.cc new file mode 100644 index 0000000..8398459 --- /dev/null +++ b/1_anno/Programmazione_2/data_structures/queue.cc @@ -0,0 +1,72 @@ +#include<iostream> + +using namespace std; + +template<typename T> +struct node { +    T value; +    node<T>* next; +}; + +template<class T> +class queue { +public: +    queue() : _head{nullptr} {} + +    ~queue() { +        auto iter = _head; +        while(iter) { +            delete iter; +            iter = iter->next; +        } +    } + +    queue<T>* enqueue(T val) { + +        if(!_head) { +            _head = new node<T>{val, nullptr}; +            _tail = _head; +        } else { +            _tail->next = new node<T>{val, nullptr}; +            _tail = _tail->next; +        } + +        return this; +    } + +    node<T>* dequeue() { +        if(!_head) return nullptr; +        auto iter = _head; +        delete _head; +        _head = iter->next; +        return iter; +    } + +    void print() { +        auto iter = _head; +        while(iter) { +            cout << iter->value << ' '; +            iter = iter->next; +        } +        cout << endl; +    } +private: +    node<T>* _head; +    node<T>* _tail; +}; + +int main() { +    queue<int>* q = new queue<int>(); + +    q->dequeue(); +    q->enqueue(4)->enqueue(2)->enqueue(8); +    q->print(); +    auto e = q->dequeue(); +    if(e) +        cout << e->value << endl; +    q->enqueue(1); +    q->print(); + +    delete q; +    return 0; +} | 
