Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3043 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Implémenter un tas en tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Implémenter un tas en tableau

n°1727794
Glycerin
Posté le 02-05-2008 à 20:07:29  profilanswer
 

Hello les gens,
je suis en train d'implémenter un tas en tableau pour un cours de Java. Le truc c'est que ma fonction ExtraireMax ne tourne pas. Les 2-3 premieres valeurs que j'extraie sont bien les maximum mais après j'obtiens des valeurs inférieures à celles restantes. Voilà mon code :
 

Code :
  1. public class Tastab implements Tas {
  2. private int tab[];
  3. private int cpt;
  4. /**----------------------------------------------------------------
  5.  * Constructeur
  6.  */
  7. public Tastab() {
  8.  super();
  9.  cpt=0;
  10.  tab = new int[10];
  11. }
  12. /**----------------------------------------------------------------
  13.  * Fonction permettant d'obtenir l'élément maximum du tas
  14.  * @return Retourne le maximum du tas
  15.  */
  16. public Integer max() {
  17.  return new Integer(tab[0]);
  18. }
  19. /**----------------------------------------------------------------
  20.  * La fonction d'insertion
  21.  * @param nb Le nombre à insérer.
  22.  */
  23. public void inserer(int nb) {
  24.  tab[cpt]=nb;
  25.  int i=cpt;
  26.  while(i!=0 && tab[i/2]<tab[i]){
  27.   echanger(i,i/2);
  28.   i=i/2;
  29.  }
  30.  cpt++;
  31. }
  32. /**----------------------------------------------------------------
  33.  * Fonction permettant d'échanger deux éléments du tas
  34.  * @param i Le premier nombre à échanger.
  35.  * @param j Le second nombre à échanger.
  36.  */
  37. public void echanger(int i, int j) {
  38.  int tmp=tab[i];
  39.  tab[i]=tab[j];
  40.  tab[j]=tmp;
  41. }
  42. /**----------------------------------------------------------------
  43.  * Méthode itérative d'affichage.
  44.  * @param i Le noeud à partir duquel on souhaire afficher.
  45.  */
  46. public void affichage()
  47. {
  48.  for(int i=0;i<cpt;i++)
  49.  {
  50.   int fd=2*(i+1)+1;
  51.   int fg=2*(i+1);
  52.   if(fd>cpt&&fg>cpt){
  53.    System.out.println(tab[i]+" est une feuille." );
  54.   }
  55.   else{
  56.    if(fd<cpt && fg<cpt) System.out.println(tab[i]+" est le pere de "+tab[fg-1]+" et de "+tab[fd-1]+"." );
  57.    else
  58.    {
  59.     if(fd<cpt) System.out.println(tab[i] +" est le pere de " +tab[fd-1]+ "." );
  60.     if(fg<cpt) System.out.println(tab[i] +" est le pere de " +tab[fg-1]+"." );
  61.    }
  62.   }
  63.  }
  64. }
  65. /**----------------------------------------------------------------
  66.  * La fonction toString()
  67.  * @return la chaine décrivant le tas
  68.  */
  69. public String toString()
  70. {
  71.  String tmp = "";
  72.  for(int i=1;i<=cpt;i++){
  73.   tmp+=tab[i-1]+" ";
  74.  }
  75.  return tmp;
  76. }
  77. /**----------------------------------------------------------------
  78.  * Méthode retournant le nombre d'éléments du tas.
  79.  * @return Le compteur d'éléments qu'on souhaite retourner.
  80.  */
  81. public int getCpt() {
  82.  return cpt;
  83. }
  84. /**----------------------------------------------------------------
  85.  * Méthode permettant d'extraire l'élément maximum du tas.
  86.  * @return L'élément maximum qui a été retiré.
  87.  */
  88. public Integer extraireMax() {
  89.  int tmp=tab[0];
  90.  int i,j;
  91.  boolean stop=false;
  92.  i=1;
  93.  while((2*i+1)<cpt && !stop)
  94.  {
  95.   j=2*i;
  96.   if((2*i+1)<=cpt && tab[2*i]>tab[2*i-1])
  97.   {
  98.    j=2*i+1;
  99.   }
  100.   if(tab[i-1]>tab[j-1]) stop=true;
  101.   else{
  102.    echanger(i-1, j-1);
  103.    i=j;
  104.   }
  105.  }
  106.  return new Integer(tmp);
  107. }
  108. public int[] getTab() {
  109.  return tab;
  110. }
  111. public void setCpt(int cpt) {
  112.  this.cpt = cpt;
  113. }
  114. public void setTab(int[] tab) {
  115.  this.tab = tab;
  116. }
  117. public boolean estFeuille(int i)
  118. {
  119.  if((2*i+1)>cpt) return true;
  120.  return false;
  121. }
  122. }

mood
Publicité
Posté le 02-05-2008 à 20:07:29  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Implémenter un tas en tableau

 

Sujets relatifs
[Résolu]remplir un tableau 2D[Résolu] problème de déclaration de tableau
parcourir un tableau 2D en diagonale Recherche d'élément dans un tableau
Déclaration dynamique d'un tableau de chaine de caractèressauvegarde et chargement d'un tableau d'objets (class)
Template et Tableau DynamiqueComment trier des chaines de caractère dans un tableau ?
tableau en VB .netUtiliser WorksheetFunction avec tableau objet
Plus de sujets relatifs à : Implémenter un tas en tableau


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)