All pastes #341827 Raw Edit

Miscellany

public cpp v1 · immutable
·published 2007-02-05 21:50 UTC
rendered paste body
#ifndef _ABR_#define _ABR_#include <cstring>#include <iostream>using namespace std;class ABR{	private:		struct Tcell {						int clef;						char * infos;						Tcell * fg;						Tcell * fd;				 	};		Tcell * racine;		void pvid(Tcell *);		public:		ABR();		~ABR();		bool ajouter(char *, int);		bool supprimer(int);		char * valeur(int);		void vider();};ABR::~ABR(){	vider();}ABR::ABR(){	racine = NULL;}void ABR::vider(){	pvid(racine);	racine = NULL;}void ABR::pvid(Tcell * noeud){	if(noeud != NULL)	{		pvid(noeud->fg);		pvid(noeud->fd);		delete noeud;	}}	bool ABR::supprimer(int telclef){	Tcell * noeud = racine;	Tcell * pnoeud = NULL;	Tcell * tmp, * ptmp, * pptmp;		while(noeud != NULL && noeud->clef != telclef)	{		if(telclef < noeud->clef)		{			pnoeud = noeud;			noeud = noeud->fg;		}		else		{			pnoeud = noeud;			noeud = noeud->fd;		}	}	if(noeud == NULL)		return false;	else if(noeud->fg == NULL && noeud->fd == NULL)	{		if(pnoeud != NULL)		{			if(pnoeud->fg == noeud)				pnoeud->fg = NULL;			else				pnoeud->fd = NULL;		}		else			racine = NULL;		delete noeud;	}	else	{		pptmp = noeud;		if(noeud->fg != NULL)		{			tmp = noeud->fg;		}		else			tmp = noeud;		ptmp = tmp;		while(tmp != NULL && tmp->fd != NULL)		{			pptmp = ptmp;			ptmp = tmp;			tmp = tmp->fd;		}		if(pptmp->fg == ptmp)			pptmp->fg = NULL;		else			pptmp->fd = NULL;		noeud->clef = ptmp->clef;		delete noeud->infos;		noeud->infos = ptmp->infos;		delete ptmp;	}return true;}			bool ABR::ajouter(char * telinfos, int telclef){	Tcell * noeud = racine;	Tcell * pnoeud = NULL; /* élément père de noeud */		while(noeud != NULL)	{		if(telclef < noeud->clef)		{			pnoeud = noeud;			noeud = noeud->fg;		}		else if(telclef > noeud->clef)		{			pnoeud = noeud;			noeud = noeud->fd;		}		else /* Si telclef == noeud->clef */			return false;	}	noeud = new Tcell;	noeud->clef = telclef;	noeud->infos = strdup(telinfos);	noeud->fd = NULL;	noeud->fg = NULL;	if(pnoeud != NULL && telclef < pnoeud->clef)		pnoeud->fg = noeud;	else if(pnoeud != NULL && telclef > pnoeud->clef)		pnoeud->fd = noeud;	else /* Si pnoeud est null */		racine = noeud;	return true;}char * ABR::valeur(int telclef){	Tcell * noeud = racine;		while(noeud != NULL && noeud->clef != telclef)	{				if(telclef < noeud->clef)			noeud = noeud->fg;		else			noeud = noeud->fd;	}	if(noeud == NULL)		return NULL;	else		return noeud->infos;}#endif