begin process at 2012 02 12 10:32:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > FILE DE PRIORITÉ DYNAMIQUE

FILE DE PRIORITÉ DYNAMIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :File priorité, dynamique, structure, structures Niveau :Débutant Date de création :27/06/2008 Date de mise à jour :30/06/2008 14:23:03 Vu :3 876

Auteur : mehdi7604

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


 Description

File de priorité dynamique , avec les opérations de base.
    FilePrioDyn(TYPE[],int); // le constructeur vide est désactivé
    void ajouter(TYPE); // ajouter un element
    bool fileVide(); // etat de la file, vide ou non
    TYPE premier(); // retourne la valeur de la racine
    TYPE reduire(); // enlève la racine, puis tamise
    void tamiser(int); //organiser les élémeent du haut vers le bas
    void percoler(int); // organiser les éléments du bas vers le haut
    void construire(TYPE[],int); // construction de la file dynamique de priorité
    bool getVide(); // accesseur en lecture de (bool vide)
    void afficher(); // afficher la liste

Source

  • #define TAILLE_MAX 524288
  • /**
  • * @author Mehdi El Masaodui
  • *
  • */
  • template <typename TYPE>
  • class FilePrioDyn{
  • private:
  • bool vide;
  • int longueur;
  • TYPE sommet;
  • TYPE elements[TAILLE_MAX]; // éléments de la liste
  • public:
  • FilePrioDyn(TYPE[],int); // le constructeur vide est désactivé
  • void ajouter(TYPE); // ajouter un element
  • bool fileVide(); // etat de la file, vide ou non
  • TYPE premier(); // retourne la valeur de la racine
  • TYPE reduire(); // enlève la racine, puis tamise
  • void tamiser(int); //organiser les élémeent du haut vers le bas
  • void percoler(int); // organiser les éléments du bas vers le haut
  • void construire(TYPE[],int); // construction de la file dynamique de priorité
  • bool getVide(); // accesseur en lecture de (bool vide)
  • void afficher(); // afficher la liste
  • };
  • /**
  • * @param TYPE temp : tableau à base duquel on va construire la file de priorité
  • * @param int taille : la taille du tableau, on la passe explicitement parceque on ne peut pas récuperer la taille du tableau sur l'objet tableau en C++
  • *
  • */
  • template <typename TYPE>
  • FilePrioDyn<TYPE>::FilePrioDyn(TYPE temp[],int taille){
  • construire(temp,taille);
  • }
  • /**
  • * @return L'état de la liste , true : vide , false : non-vide
  • *
  • */
  • template <typename TYPE>
  • bool FilePrioDyn<TYPE>::fileVide(){
  • return getVide();
  • }
  • /**
  • * @return L'état de la variable vide
  • *
  • */
  • template <typename TYPE>
  • bool FilePrioDyn<TYPE>::getVide(){
  • return vide;
  • }
  • /**
  • * @return Le sommet de la file de priorité
  • */
  • template <typename TYPE>
  • TYPE FilePrioDyn<TYPE>::premier(){
  • return elements[0];
  • }
  • /**
  • * @return l'élément qui a été supprimé
  • * @description retire un élément du sommet, réduit la taille de un et tamise
  • */
  • template <typename TYPE>
  • TYPE FilePrioDyn<TYPE>::reduire(){
  • TYPE temp;
  • if(!fileVide()){
  • elements[0]=elements[longueur];
  • longueur=longueur--;
  • tamiser(0);
  • }else{
  • /* la file est vide, aucun élément à retirer*/
  • }
  • return temp;
  • }
  • /**
  • * @param val élément à ajouter à la fin
  • * percoler à partir de l'élement ajouté
  • */
  • template <typename TYPE>
  • void FilePrioDyn<TYPE>::ajouter(TYPE val){
  • longueur++;
  • elements[longueur]=val;
  • percoler(val);
  • }
  • /**
  • * @param temp tableau à partir duquel on construit la file de priorité
  • * @param int taille taille du tableau
  • * on ajoute un élément à la fin à chaque itération, on percole après chaque élément ajouté
  • *
  • */
  • template <typename TYPE>
  • void FilePrioDyn<TYPE>::construire(TYPE temp[],int taille){
  • longueur=taille;
  • int i;
  • if(longueur>0){
  • i=0;
  • while(i<longueur){
  • elements[i]=temp[i];
  • percoler(i);
  • i++;
  • }
  • }
  • }
  • /**
  • * @param i , l'élémentt ajouté à partir duquel tamiser,
  • * on tamise vers la bas de la structure
  • *
  • */
  • template <typename TYPE>
  • void FilePrioDyn<TYPE>::tamiser(int i){
  • int k=i;
  • int j=0; /* correction */
  • while(j!=k){
  • j=k;
  • if(2*j<longueur && elements[2*j]>elements[k]){
  • k=2*j;
  • }
  • if(2*j<longueur && elements[2*j+1]>elements[k]){
  • k=2*j+1;
  • }
  • elements[j]=elements[k];
  • }
  • }
  • /**
  • * @int i element à partir duquel percoler
  • * percoler est le fait de parcourir la structure à partir du dernier élément ajouté
  • * pour verifier le principe de priorité ( ordre )
  • *
  • */
  • template <typename TYPE>
  • void FilePrioDyn<TYPE>::percoler(int i){
  • int k=i;
  • int j=0;
  • while(j!=k){
  • j=k;
  • if(j>1 && elements[j/2]<elements[k]){
  • k=j/2;
  • }
  • elements[j]=elements[k];
  • }
  • }
  • /**
  • * Affichage de la liste sous forme d'un arbre
  • */
  • template <typename TYPE>
  • void FilePrioDyn<TYPE>::afficher(){
  • int i=0;
  • while(elements[i]){
  • std::cout<<"|Element "<<i<<" : "<<elements[i]<<"";
  • i++;
  • }
  • }
#define TAILLE_MAX 524288
/**
* @author Mehdi El Masaodui
*
*/
template <typename TYPE>
class FilePrioDyn{

    private:
    bool vide;
    int longueur;
    TYPE sommet;
    TYPE elements[TAILLE_MAX]; // éléments de la liste

    public:
    FilePrioDyn(TYPE[],int); // le constructeur vide est désactivé
    void ajouter(TYPE); // ajouter un element
    bool fileVide(); // etat de la file, vide ou non
    TYPE premier(); // retourne la valeur de la racine
    TYPE reduire(); // enlève la racine, puis tamise
    void tamiser(int); //organiser les élémeent du haut vers le bas
    void percoler(int); // organiser les éléments du bas vers le haut
    void construire(TYPE[],int); // construction de la file dynamique de priorité
    bool getVide(); // accesseur en lecture de (bool vide)
    void afficher(); // afficher la liste
};
/**
* @param TYPE temp : tableau à base duquel on va construire la file de priorité
* @param int taille : la taille du tableau, on la passe explicitement parceque on ne peut pas récuperer la taille du tableau sur l'objet tableau en C++
*
*/
template <typename TYPE>
FilePrioDyn<TYPE>::FilePrioDyn(TYPE temp[],int taille){
    construire(temp,taille);
}
/**
* @return L'état de la liste , true : vide , false : non-vide
*
*/

template <typename TYPE>
bool FilePrioDyn<TYPE>::fileVide(){
    return getVide();
}
/**
* @return L'état de la variable vide
*
*/
template <typename TYPE>
bool FilePrioDyn<TYPE>::getVide(){
    return vide;
}

/**
* @return Le sommet de la file de priorité
*/
template <typename TYPE>
TYPE FilePrioDyn<TYPE>::premier(){
    return elements[0];
}
/**
* @return l'élément qui a été supprimé
* @description retire un élément du sommet, réduit la taille de un et tamise
*/

template <typename TYPE>
TYPE FilePrioDyn<TYPE>::reduire(){
    TYPE temp;
    if(!fileVide()){
        elements[0]=elements[longueur];
        longueur=longueur--;
        tamiser(0);
    }else{
        /* la file est vide, aucun élément à retirer*/
    }
    return temp;
}

/**
* @param val élément à ajouter à la fin
*        percoler à partir de l'élement ajouté
*/

template <typename TYPE>
void FilePrioDyn<TYPE>::ajouter(TYPE val){
    longueur++;
    elements[longueur]=val;
    percoler(val);
}

/**
* @param temp tableau à partir duquel on construit la file de priorité
* @param int taille taille du tableau
*        on ajoute un élément à la fin à chaque itération, on percole après chaque élément ajouté
*
*/
template <typename TYPE>
void FilePrioDyn<TYPE>::construire(TYPE temp[],int taille){
    longueur=taille;
    int i;
    if(longueur>0){
        i=0;
        while(i<longueur){
            elements[i]=temp[i];
            percoler(i);
            i++;
        }
    }

}

/**
* @param i , l'élémentt ajouté à partir duquel tamiser,
*           on tamise vers la bas de la structure
*
*/
template <typename TYPE>
void FilePrioDyn<TYPE>::tamiser(int i){

    int k=i;
    int j=0; /* correction */
    while(j!=k){
        j=k;
        if(2*j<longueur && elements[2*j]>elements[k]){
            k=2*j;
        }
        if(2*j<longueur && elements[2*j+1]>elements[k]){
            k=2*j+1;
        }
        elements[j]=elements[k];
    }
}

/**
* @int i element à partir duquel percoler
* percoler est le fait de parcourir la structure à partir du dernier élément ajouté
* pour verifier le principe de priorité ( ordre )
*
*/
template <typename TYPE>
void FilePrioDyn<TYPE>::percoler(int i){
   int k=i;
   int j=0;
   while(j!=k){
       j=k;
       if(j>1 && elements[j/2]<elements[k]){
           k=j/2;
       }
       elements[j]=elements[k];
   }
}

/**
* Affichage de la liste sous forme d'un arbre
*/
template <typename TYPE>
void FilePrioDyn<TYPE>::afficher(){
    int i=0;
    while(elements[i]){
    std::cout<<"|Element "<<i<<" : "<<elements[i]<<"";
    i++;
    }
}





 Historique

30 juin 2008 14:23:03 :
Ajout d'initialisations oubliés

 Sources du même auteur

ENSEMBLE DISJOINT
Source avec Zip CALCULER NOMBRE DE MERSENNE AVEC BIBLIOTHÈQUE DE GESTION DE ...
Source avec Zip RECHERCHER LE CHEMIN OPTIMALE DANS UN GRAPHE ( ALGORITHME DE...
CLASS TEMPLATE DES PRINCIPAUX TRIS DE TABLEAUX
Source avec Zip BIBLIOTHÈQUE DE GESTION DE GRANDS NOMBRES POSITIFS

 Sources de la même categorie

Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro
Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip JOUR DE NAISSANCE par fredg19

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ALGORITHME DE CRYPTAGE/DECRYPTAGE par besilent
Source avec Zip JEU DES PETIT CHEVAUX par flamt
Source avec Zip STRUCTURE DES FICHIERS DBF par Stanel
Source avec Zip Source avec une capture MODÉLISATION D'UNE SURFACE AVEC UN MAILLAGE MASE RESSORT OPE... par SebLinck
CALCULETTE (PEUT ÊTRE GRAPHIQUE UN JOURS ^^) par flamt

Commentaires et avis

Commentaire de Menuki le 30/06/2008 14:01:08

Ben, c'est juste que j'ai regardé en vitesse le code et j'ai trouvé des trucs bizarres...

1) Dans ajouter(), tu incrémentes le compteur avant d'ajouter l'élément. C'est bizarre :
On imagine qu'il y ait n éléments, on a donc des objets aux indices compris entre 0 et n-1.
Tu incrémentes d'abord longeur (qui est alors égal à n+1) et tu ajoutes l'objet à cet indice.
Il n'y a donc rien entre (n-1) et (n+1).

2) Dans retirer(), si la file est vide, tu renvoies une valeur qui n'a pas été initialisée (sauf cas de constructeur par défaut)...

3) Dans tamiser() et percoler(), tu utilises une variable j qui n'a pas été initialisée non plus.

4) A aucun moment, tu n'initialises la variable vide...

5) Dans afficher(), tu n'incrémentes jamais le compteur i. On a une boucle infinie...

Je ne sais pas pour quel langage c'est écrit mais en C++, les variables non initialisées, ça ne pardonne pas...

Voilà.
C'est pour être constructif que je dis ça.
J'espère avoir pu aider.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

equivalence dynamique entre deux structures [ par cassiopee ] bonjour, Voila, j'ai un petit soucis. (eh oui c'est pour ca que j'ecris)En fait, ce que je veux dire par "equivalence dynamique entre deux structures" structure ? [ par vero77lisa ] Bonjour, Je travaille avec Borland C++Builder 6 Je dois spliter les lignes d'un fichier, en fonction du séparateur point-virgule ; Les données si bleme avec les structures [ par djamine ] j'ai un bleme j'aimerais que tu m'aide avec les structuresTAF:en utilisant un tableau de structure Je dois ecrire un programme qui saisi les noms et l Question sur les tableaux de structures [ par Kleidp ] Bonjour,j'ai quelques probl&#232;mes avec les tableaux de structure. Tout d'abord voici une de mes structures:typedef struct{&nbsp;&nbsp;&nbsp; float structure dynamique [ par gdpasmini ] Hello !Je dois r&#233;cup&#233;rer des informations dans des paquets de type H225. Le probleme est que la taille et les champs de ces paquets sont tr& Utiliser des fonctions dans des structures [ par christophedlr ] Bonsoir,Dans mon programme en C++, je souhaite pouvoir utiliser une fonction d'initialisation dans ma structure.J'ai vu un programme d'exemple ici me tableau dynamique de structure en C ? [ par axl79 ] salutje voudrai faire un tableau dynamique de structures. voici ma structure: struct struct_arete { int sommet1; int sommet2; int quantite;} arete;com tableau dynamique de structures (niveau debutant) [ par SYL666 ] bonjour,j'ai un petit probleme: j'aimerai definir un tableau dynamique dont la taille n'est connu qu'a l'execution.voila mon code:{ long max; struct Règles d'alignement + structure + fichier [ par visualstar ] Bonsoir, J'ai fais un p'tit programme qui écris simplement des structures dans un fichier. Puis après je fais le dump du fichier en question et j'aura Strcpy entre deux structures [ par loic911 ] Salut, J'ai deux structures: Patients et Org. La premi&#232;re r&#233;pertorie un certain nombre de patient et l'autre copie leur num&#233;ros et leur


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,067 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales