CCCPaste

Untitled

#include 

using namespace std;

const int max_size = 50;
struct magacin {
    int idx, niza[max_size];
    void init() {
        idx = -1;
    }
    bool isEmpty() {
        if(idx == -1) {
            return true;
        }
        return false;
    }
    bool isFull() {
        if(idx == max_size - 1) {
            return true;
        }
        return false;
    }
    void push(int x) {
        if(isFull()) {
            cout << "Stekot e full" << endl;
            return;
        }
        idx++;
        niza[idx] = x;
    }
    int pop() {
        if(isEmpty()) {
            cout << "Prazen stek" << endl;
            exit(0);
        }
        
        return niza[idx--];
    }
    int top() {
        if(isEmpty()) {
            cout << "prazen stek" << endl;
            exit(0);
        }
        return niza[idx];
    }
};
struct node {
    int val;
    node *next, *prev;
};
 
struct DoublyLinkedList  {
    node *head, *tail;
    
    void init() {
        head = NULL;
        tail = NULL;
    }
    void dodadiPrv(int x) {
        node *tmp = new node;
        tmp->val = x;
        if(head == NULL) {
            head = tmp;
            tail = head;
        }
        else {
            tmp->next = head;
            head->prev = tmp;
            head = tmp;
        }
    }
    void dodadiPosleden(int x) {
        node *tmp = new node;
        tmp->val = x;
        if(head == NULL) {
            head = tmp;
            tail = head;
        }
        else {
            tail->next = tmp;
            tmp->prev = tail;
            tail = tmp;
        }
    }
    void brishiPrv() {
        if(head->next == NULL) {
            delete head;
            head = NULL;
            tail = NULL;
        }
        if(head != NULL) {
            node *tmp = head;
            head = head->next;
            delete tmp;
        }
    }
    void brishiPosleden() {
        if(head->next == NULL) {
            delete head;
            head = NULL;
            tail = NULL;
        }
        else {
            node *tmp = tail;
            tail = tail->prev;
            delete tail;
        }
    }
    void brishiLista() {
        while(head != NULL) {
            brishiPrv();
        }
    }
    void pechati() {
        node *tmp = head;
        while(tmp != NULL) {
            cout << tmp->val << " <--> ";
            tmp = tmp->next;
        }
        cout << endl;
    }
    bool dodadiPosle(int el) {
        node *tmp = head;
        bool ok = false;
        while(tmp != NULL) {
            if(tmp->val == el) {
                ok = true;
                break;
            }
            tmp = tmp->next;
        }
        if(ok) {
            node * new_node = new node;
            new_node->val = el;
            
            if(tmp->next == NULL) {
                dodadiPosleden(el);
                return ok;
            }
            node *sleden = tmp->next;
            tmp->next = new_node;
            new_node->prev = tmp;
            new_node->next = sleden;
            sleden->prev = new_node;
            
        }
        return ok;
    }
    
};
void raspredelba(magacin m, DoublyLinkedList & even, DoublyLinkedList & odd) {
    while(!m.isEmpty()) {
        int el = m.top();
        m.pop();
        
        if(el != 0) {
            if(el % 2 == 0 && el <= 10) {
                if(!even.dodadiPosle(el)) {
                    even.dodadiPosleden(el);
                }
            }
            else if(el % 2 == 1  && el > 10){
                if(!odd.dodadiPosle(el)) {
                    odd.dodadiPosleden(el);
                }
                
            }
        }
    }
}
int main()
{
    magacin m;
    m.init();
    for(int i = 0; i < 13; i++) {
        int x;
        cin >> x;
        
        m.push(x);
    }
    
    DoublyLinkedList even, odd;
    even.init();
    odd.init();
    
    raspredelba(m, even, odd);
    cout << "Parni: ";
    even.pechati();
    
    
    cout << "Neparni: ";
    odd.pechati();
   
    return 0;

}
// 8 0 17 4 9 16 5 25 0 10 17 33 8