Wstęp do Programowania, semestr zimowy, 2018/2019

Ćwiczenia: poniedziałek 14:15 (sala 3130), środa 12:15 (sala 3170)

Rozwiązanie zadania 3 z egzaminu

Czas: O(n), Pamięć: O(max(wysokość1, wysokość2))

void wstaw_pierwszy_lisc(stack<drzewo *> &s, drzewo *d) {
    while(d!=NULL) {
        s.push(d);
        if (d->lsyn != NULL)
            d = d->lsyn;
        else
            d = d->psyn;
    }
}

void nastepny_lisc(stack<drzewo *> &s) {
    drzewo *d = s.top(); s.pop();
    while((s.size() > 0) && ((s.top()->psyn==NULL) || (s.top()->psyn==d))) {
        d = s.top(); s.pop();
    }
    if ((s.size() > 0) && (s.top()->psyn!=NULL)) {
        wstaw_pierwszy_lisc(s, s.top()->psyn);
    }
}

int wspolne_liscie_ze_stosem(drzewo *d1, drzewo *d2) {
    stack<drzewo *> s1;
    stack<drzewo *> s2;
    int wynik = 0;
    wstaw_pierwszy_lisc(s1, d1);
    wstaw_pierwszy_lisc(s2, d2);
    while(!s1.empty() && !s2.empty()) {
        drzewo *w1 = s1.top();
        drzewo *w2 = s2.top();
        assert(w1->lsyn==NULL && w1->psyn==NULL);
        assert(w2->lsyn==NULL && w2->psyn==NULL);
        if (w1->w == w2->w) {
            wynik++;
            nastepny_lisc(s1);
            nastepny_lisc(s2);
        } else if (w1->w > w2->w) {
            nastepny_lisc(s2);           
        } else {
            nastepny_lisc(s1);
        }
    }
    return wynik;
}

2019-01-16

  • programowanie dynamiczne

2019-01-14

  • zadania z poprzednich kolokwiów

2019-01-09

  • zadania z poprzednich kolokwiów

2018-12-03

2018-11-28

2018-10-31

2018-10-29

2018-10-15

2018-10-10

2018-10-08

2018-10-03

Tomasz Waleń
Tomasz Waleń
Assistant Professor