Implémenter un tas en tableau

Implémenter un tas en tableau - Java - Programmation

Marsh Posté le 02-05-2008 à 20:07:29    

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. }

Reply

Marsh Posté le 02-05-2008 à 20:07:29   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed