예제 #1
0
파일: Controller.cpp 프로젝트: ximarx/asd
/**
 *     crea una lista costituita dai seguenti elementi: 4, 7, 9, 10, 13, 14, 15;
 */
Lista caricaElementi () {
	
	Lista lista = Lista();
	tipoelem el[7] = {4,7,9,10,13,14,15};
	
	for ( int i = 1; i < 8 ; i++ ) {
		lista.insLista(el[i-1], lista.pos(i));
	}
	
	
	return lista;
}
예제 #2
0
파일: Controller.cpp 프로젝트: ximarx/asd
/**
 * Lista creaSottoLista(Lista l, pos inizio, pos fine) – restituisce la sottolista l' di l costituita
 * dagli elementi compresi tra le posizioni inizio e fine della lista l;
 */
Lista creaSottoLista(Lista lista, posizione inizio, posizione fine) {
	
	Lista nuovaLista = Lista();
	posizione current = inizio;
	int i = 1;
	tipoelem letto;
	while ( current != fine ) {
		lista.leggiLista(letto, current);
		nuovaLista.insLista(letto, nuovaLista.pos(i));
		current = lista.succLista(current);
		i++;
	}
	return nuovaLista;
}
예제 #3
0
파일: Controller.cpp 프로젝트: ximarx/asd
/**
 * Riempie ricorsivamente un sotto-albero in base all'elemento
 * da inserire
 * [FUNZIONE_PRIVATA]
 */
void private_riempiAlbero(Lista lista, int lunghezzaLista, Albero &t, nodoBin nodoRiferimento) {
	
	tipoelem elemento;
	posizione p;
	nodoBin nuovoRiferimentoSx, nuovoRiferimentoDx;
	Lista listaSx, listaDx;
	int lSottolistaSx, lSottolistaDx;
	
	// 1: calcola il mediano e lo scrive nel nodo di riferimento
	p = mediano(lista,lista.primoLista(), lista.pos(lunghezzaLista));
	lista.leggiLista(elemento, p);
	t.scriviNodo(nodoRiferimento, elemento);
	// :1
	// 2: calcola la sottolista sinistra in base al mediano
	listaSx = creaSottoLista(lista, lista.primoLista(), p);
	lSottolistaSx = lunghezza(lista, lista.primoLista(), p);
	// 2.1: controlla che abbia senso avviare una ricorsione
	if ( lSottolistaSx > 0 ) {
		t.insFiglioSx(nodoRiferimento);
		nuovoRiferimentoSx = t.figlioSx(nodoRiferimento);
		// 2.1.1 Se la lista ha 1 solo elemento, allora è una foglia
		if ( lSottolistaSx == 1 ) {
			listaSx.leggiLista(elemento, listaSx.primoLista());
			t.scriviNodo(nuovoRiferimentoSx, elemento);
		// :2.1.1
		// 2.1.2 Se la lista ha piu di un elemento allora avvia la ricorsione
		} else {
			private_riempiAlbero(listaSx, lSottolistaSx, t, nuovoRiferimentoSx);
		}
		// :2.1.2
	}
	// :2.1
	// 3: calcola la sottolista destra analogamente a quella sinistra
	listaDx = creaSottoLista(lista, lista.succLista(p), salta(lista, lista.primoLista(), lunghezzaLista));
	lSottolistaDx = lunghezzaLista / 2;
	if ( lSottolistaDx > 0 ) {		
		t.insFiglioDx(nodoRiferimento);
		nuovoRiferimentoDx = t.figlioDx(nodoRiferimento);
		if ( lSottolistaDx == 1 ) {
			listaDx.leggiLista(elemento, listaDx.primoLista());
			t.scriviNodo(nuovoRiferimentoDx, elemento);
		} else {
			private_riempiAlbero(listaDx, lSottolistaDx, t, nuovoRiferimentoDx );
		}
	}
	// :3
	return;
}