Cod sursa(job #2000239)

Utilizator MaligMamaliga cu smantana Malig Data 13 iulie 2017 10:27:25
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.16 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
const int NMax = 5e6 + 5;

struct elem {
    int val;
    elem *prv,*nxt;
    elem() {
        val = 0;
        prv = 0;
        nxt = 0;
    }
};

struct deq {
    int sz;
    elem *st,*dr;

    deq() {
        sz = 0;
        st = dr = 0;
    }

    void pushFront(int val) {
        ++sz;
        if (sz == 1) {
            st = new elem();
            st -> val = val;
            dr = st;

            return;
        }

        elem *n = new elem();
        n -> val = val;
        n -> nxt = st;

        st -> prv = n;
        st = n;
    }

    int fata() {
        if (sz == 0) {
            return -1;
        }

        return st -> val;
    }

    void popFront() {
        if (sz == 0) {
            return;
        }
        if (sz == 1) {
            popSingle();
            return;
        }
        --sz;

        elem *n = st -> nxt;
        delete st;
        st = n;
        st -> prv = 0;
    }

    void pushBack(int val) {
        ++sz;
        if (sz == 1) {
            st = new elem();
            st -> val = val;
            dr = st;

            return;
        }

        elem *n = new elem();
        n -> val = val;
        n -> prv = dr;

        dr -> nxt = n;
        dr = n;
    }

    int spate() {
        if (sz == 0) {
            return -1;
        }

        return dr -> val;
    }

    void popBack() {
        if (sz == 0) {
            return;
        }
        if (sz == 1) {
            popSingle();
            return;
        }
        --sz;

        elem *n = dr -> prv;
        delete dr;
        dr = n;
        dr -> nxt = 0;
    }

    void popSingle() {
        sz = 0;
        delete st;
        st = 0;
        dr = 0;
    }
}Q;

int N;

int main()
{
    Q.pushFront(2);
    Q.pushFront(3);
    Q.pushFront(4);

    Q.pushBack(7);
    Q.pushBack(8);
    Q.pushBack(10);

    while (Q.sz) {
        cout<<Q.fata()<<' ';
        Q.popFront();
    }

    in.close();
    out.close();
    return 0;
}