예제 #1
0
파일: Names.cpp 프로젝트: enbik/maszyna
ItemRecord *__fastcall TNames::TreeSet(int *n, int d, int u)
{ // rekurencyjne wype³nianie drzewa pozycjami od (d) do (u)
    if (d == u)
    {
        rRecords[n[d]].rPrev = rRecords[n[d]].rNext = NULL;
        return rRecords + n[d]; // tej ga³êzi nie ma
    }
    else if (d > u)
        return NULL;
    int p = (u + d) >> 1; // po³owa
    rRecords[n[p]].rPrev = TreeSet(n, d, p - 1); // zapisanie wczeœniejszych ga³êzi
    rRecords[n[p]].rNext = TreeSet(n, p + 1, u); // zapisanie póŸniejszych ga³êzi
    return rRecords + n[p];
};
예제 #2
0
파일: Names.cpp 프로젝트: enbik/maszyna
void TNames::Sort(int t)
{ // przebudowa drzewa typu (t), zwraca wierzcho³ek drzewa
    if (iLast < 3)
        return; // jak jest ma³o, to nie ma sensu sortowaæ
    if (rTypes[t]) // jeœli jest jakiœ rekord danego typu
    {
        int *r = new int[iLast + 1]; // robocza tablica indeksów - numery posortowanych rekordów
        int *q = r; // wskaŸnik roboczy, przekazywany przez referencjê
        rTypes[t]->ListGet(rRecords, q); // drzewo jest ju¿ posortowane - zamieniæ je na listê
        rTypes[t] = TreeSet(r, 0, (q - r) - 1);
        delete[] r;
    }
    return;
};
예제 #3
0
	static TreeSet newFull(){
		return TreeSet(true);	
	}
예제 #4
0
	static TreeSet newEmpty(){
		return TreeSet();
	}