// ListaOrdenada.cpp
// Redefinição dos métodos Inserir e Procurar 
//         da classe cListaOrdenada , que deriva de cLista

// Apresentação do Princípio da HERANÇA

// Aula de 4 de Janeiro de 2002

// Obs : No método remover herdado, o método Procurar que é executado é o cLista::Procurar
//       No método Inserir redefinido, o método Procurar que é executado é o cListaOrdenada::Procurar 

#include "ListaOrdenada.h"

cListaOrdenada::cListaOrdenada()
{

}


// Inserção ordenada pelo nr do aluno
bool cListaOrdenada::Inserir( cAluno Al )
{
	cElemLista *pNovo , *p, *pAnt;
	
	pNovo = new cElemLista();

	pNovo->Aluno  = Al;
	
	// Procura a zona de inserção
	Procurar( Al.GetNr() , p, pAnt );
	
	pNovo->Proximo = p;
	pAnt->Proximo = pNovo;
	
	if ( pAnt == Tail ) Tail = pNovo;    // inserção no fim

	NrElementos ++;
	return true;
}


bool cListaOrdenada::Procurar( int NrAl, cElemLista* &pEl , cElemLista* &pAnterior )
{
	cElemLista *p, *pAnt;

	pAnt = Sentinela;
	p = Sentinela->Proximo ;

	while ( p && ( NrAl > p->Aluno.GetNr() ) )
	{
		pAnt = p;
		p = p->Proximo ;
	}

	pAnterior = pAnt;
	pEl = p;
	return ( p != 0 );
}


