CCCPaste

Untitled

#include 
#include 
#include 
using namespace std;
struct node {
    string val;
    node *next, *prev;
};
struct DLCL {
    node *head, *tail;
    
    void init() {
        head = NULL;
        tail = NULL;
    }
    void insertFirst(string x) {
        node *new_node = new node;
        new_node->val = x;
        if(head == NULL) {
            head = new_node;
            head->next = head;
            head->prev = head;
            tail = head;
        }
        else {
            new_node->next = head;
            head->prev = new_node;
            head = new_node;
            head->prev = tail;
        }
    }
    void insertLast(string x) {
        node *new_node = new node;
        new_node->val = x;
        
        if(head == NULL) {
            head = new_node;
            head->next = head;
            head->prev = head;
            tail = head;
        }
        else {
            tail->next = new_node;
            new_node->next = head;
            head->prev = new_node;
            new_node->prev = tail;
            tail = new_node;
            
        }
    }
    void deleteFirst() {
        if(head != NULL) {
            if(head->next == head) {
                delete head;
                head = NULL;
                tail = NULL;
            }
            else {
                node *tmp = head;
                head = head->next;
                head->prev = tail;
                tail->next = head;
                delete tmp;
            }
        }
    }
    void deleteLast() {
        if(head != NULL) {
            if(head->next == head) {
                delete head;
                head = NULL;
                tail = NULL;
            }
            else {
                node *tmp = tail;
                tail = tail->prev;
                tail->next = head;
                head->prev = tail;
                delete tmp;
            }
        }
    }
    void deleteAll() {
        while(head != NULL) {
            deleteFirst();
        }
    }
    void delete_node(node * tmp) {
        if(head != NULL) {
            if(head == tmp) {
                deleteFirst();
                return;
            }
            if(tail == tmp) {
                deleteLast();
                return;
            }
            tmp->prev->next = tmp->next;
            
            tmp->next->prev = tmp->prev;
            delete tmp;
            
        }
    }
    void print() {
        node *tmp = head;
        while(tmp != tail) {
            cout << tmp->val << " <--> ";
            tmp = tmp->next;
        }
        cout << tmp->val << endl;
    }
};

void igra(DLCL & igraci, DLCL & broevi) {
    
    node * igrac = igraci.head;
    node * broj = broevi.head;
    srand(time(NULL));

    int p = 0;
    int niza[] = {4, 2, 6};
    while(igraci.head->next != igraci.head) {
        int sluchaen;
        if(p < 2) {
             sluchaen = niza[p++];
        }
        else {
            sluchaen = 1 + (rand() % 6);
        }
        cout << "Na poteg e " << igrac->val <<", i ja frla kockat: " << sluchaen << endl;
        
        for(int i = 0; i < sluchaen; i++) {
            
            cout << broj->val << " " ;
            broj = broj->next;
        }
        cout << endl;
        cout << "Zastanuvame na pole: " << broj->val << endl;
        string br = "";
        br += (sluchaen + '0');
        if(broj->val ==  br) {
            cout << "Ovoj igrac ostanuva vo igra" << endl;
            node *tmp = broj;
            broj = broj->next;
            broevi.delete_node(tmp);
            igrac = igrac->next;
        }
        else {
            cout << "Igracot ispagja od igrata" << endl;
            node *tmp = igrac;
            igrac = igrac->next;
            igraci.delete_node(tmp);
            broj = broj->next;
        }
        cout << endl;
    }
    
    cout << "Pobednik: " << igraci.head->val << endl;
}
int main() {
    DLCL igraci, broevi;
    igraci.init();
    broevi.init();
    
    int br_na_igraci;
    cin >> br_na_igraci;
    for(int i = 0; i < br_na_igraci; i++) {
        string ime;
        cin >> ime;
        igraci.insertLast(ime);
    }
    int broj_na_broevi;
    cin >> broj_na_broevi;
    
    for(int i = 0; i < broj_na_broevi; i++) {
        string broj;
        cin >> broj;
        broevi.insertLast(broj);
    }
    
    igra(igraci, broevi);
    return 0;

}
/**
 4
 Dejan
 Tina
 Marija
 Jane
 7
 1 6 5 3 4 1 5
 
 /*/