/*
  .__       .           .     
  [__) _  _.|_  _ ._. _.|_  _ 
  |  \(/,(_.[ )(/,[  (_.[ )(/,...
     _     _                                          
    | |__ (_) __ _ _ __ __ _ _ __ ___  _ __ ___   ___ 
    | '_ \| |/ _` | '__/ _` | '_ ` _ \| '_ ` _ \ / _ \
    | |_) | | (_| | | | (_| | | | | | | | | | | |  __/
    |_.__/|_|\__, |_|  \__,_|_| |_| |_|_| |_| |_|\___|
             |___/                                    
	   
AUTEURS	: Aymeric & Ramazan
GROUPE	: RT (5)
DATE	: 21/03/2003
FICHIER	: liste.cpp

*/


#include <iostream.h>
#include "liste.h"



// ---------------------------------------------------------------- //
// ------------------------- CONSTRUCTEUR ------------------------- //
// ---------------------------------------------------------------- //

Liste::Liste()
{
	debut=NULL;
	nb_elt=0;
}


// ---------------------------------------------------------------- //
// ------------------------- DESTRUCTEUR -------------------------- //
// ---------------------------------------------------------------- //

Liste::~Liste()
{
	// on detruit la chaine maillon par maillon
	Maillon * aux=debut;
	while (aux != NULL)
	{
		debut=debut->suivant;
		delete aux;
		aux=debut;
	}
}


// ---------------------------------------------------------------- //
// -------------------------- FONCTIONS --------------------------- //
// ---------------------------------------------------------------- //


// Cette fonction ajoute les 3 informations m1, m2 et p dans la liste chainee

void Liste::ajoute(int m21, int m22, float p2)
{
	// definition d'un nouveau maillon
	Maillon * aux=new Maillon;
	
	// on entre les valeurs dans le maillon
	aux->m1=m21;
	aux->m2=m22;
	aux->p=p2;
	
	// on ajoute le maillon en debut de la liste
	aux->suivant=debut;
	
	// on deplace le pointeur debut
	debut=aux;
	
	// on incremente le nombre d'element
	nb_elt++;
}



// Cette fonction permet de trouver un bigramme dans la liste chainee.
// Retourne un float representant la probabilite trouvee.
// Si aucune probabilite est trouvee, on retourne 0.

float Liste::cherche_Bigramme(int m21, int m22)
{
	// on cree un pointeur qui va nous permettre de nous deplacer le long de la liste
	Maillon * aux;
	aux=debut;
	
	// on parcourt la liste chainee
	while (aux != NULL)
	{
		// si on trouve le bigramme on retourne la valeur de la probabilite associee
		if ((aux->m1 == m21) && (aux->m2 == m22))
		{
			return(aux->p);
		}
		
		// sinon on avance dans la liste
		aux=aux->suivant;
	}
	
	// si aucun bigramme n'a ete trouve, on retourne 0
	return(0);
}
	

	

