IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

comment creer une pile et l'initialiser ?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Par défaut comment creer une pile et l'initialiser ?
    bonsoir à tous !
    Je suis debutante en java, je souhaite initialiser une pile à vide je connais pas la syntaxe, quelqu'un peut m'aider?

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Tu peux utiliser la classe Stack (de java.util) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Stack<Integer> test = new Stack<Integer>();
    test.push(1);
    //...
    Il y a également les méthodes empty() et pop().

    Voir la javadoc : http://java.sun.com/j2se/1.4.2/docs/...til/Stack.html

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Par défaut Classe pile en java
    bonjour !
    j'ai crée une classe pile qui permet de convertir une expression arithmetique infixée à postfixé.
    j'arrive pas à caster la valeur du le sommet de la pile qui est un objet en int pour avoir le résultat de l'expression.
    je vous poste le bout du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
      public static int evaluation(String E){
    		  int n = E.length(); /*N est la longueur du tableau tab*/
    		  Pile s = new Pile(n); /*création d'une pile de taille n*/
    		  int val_sommet_pile;
    		  int val_sommet_pile1;
    		  int val_sommet_pile2;
    		  int fact=0;
    		  int res = 0;
    		  int t;
    		  char st;
    		  int t2;
    		  for (int i=0; i<(n); i++){
    			  if ((E.charAt(i) >= '0') && (E.charAt(i) <= '9')){
    				  t=(int)E.charAt(i)-48;
    			      String tmp= "" + t;
    				  s.empiler(tmp);
    			  }
    			  else
    				  if(E.charAt(i)=='!'){
    					  val_sommet_pile=E.charAt(s.sommet);
    					  s.depiler();
    					  fact = factorielle(val_sommet_pile);
    					  String tmp = "" + fact;
    					  s.empiler(tmp);
    				  }
    				  else
    					  if((E.charAt(i)=='+')||(E.charAt(i)=='-')||(E.charAt(i)=='*')||(E.charAt(i)=='/')||(E.charAt(i)=='^')){
    						  st=s.v[s.sommet-1];
    						  val_sommet_pile1=st;
    						  s.depiler();
    						  t=(int)E.charAt(s.sommet-1)-48;
    						  val_sommet_pile2=t;
    						  s.depiler();
    						  if(E.charAt(i)=='+')
    							 res = val_sommet_pile2 + val_sommet_pile1;
    						  else if (E.charAt(i)=='-')
    							  	   res = val_sommet_pile2 - val_sommet_pile1;
    						  else if (E.charAt(i)=='*')
    							       res = val_sommet_pile2 * val_sommet_pile1;
    						  else if (E.charAt(i)=='/')
    							       res = val_sommet_pile2 / val_sommet_pile1;
    						  else if (E.charAt(i)=='^')
    							       res = val_sommet_pile2 ^ val_sommet_pile1;
    						  String tmp = "" + res;
    						  s.empiler(tmp);
    					  }
    		  }
    		  //t2=(int)E.charAt(s.sommet-1)-48;
    		  return res;
    	  }

  4. #4
    Membre émérite
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Par défaut
    J'ai fait une pile LIFO si tu veux (sans Stack).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    public class PileLifo {
     
    	private int nb;
    	private int[] pile;
     
    	public PileLifo(int taille){
    		nb=0;
    		pile=new int[taille];
    	}
     
    	public void empiler(int elt){
    		pile[nb]=elt;
    		nb++;
    	}
     
    	public int depiler(){
    		if (!estvide())
    			return pile[nb--  -1];
    		else
    			return -999;
    	}
     
    	public boolean estvide(){
    		return (nb<=0);
    	}
     
    	public int nbelt(){
    		return nb;
    	}
     
    	public int sommet(){
    		if(!estvide())
    			return pile[nb-1];
    		else
    			return -888;
    	}
     
    	public static void main(String[] args) {
    		PileLifo p = new PileLifo(10);
    		p.empiler(2);
    		p.empiler(7);
    		p.empiler(5);
    		p.empiler(9);
    		p.empiler(1);
    		System.out.println(p.sommet());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.nbelt());
    		p.empiler(14);
    		System.out.println(p.sommet());
    		System.out.println(p.estvide());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.depiler());
    		System.out.println(p.sommet());
    		System.out.println(p.estvide());
    	}
    }
    Je ne sais pas si tu trouveras ton bonheur là-dedans ...

    Sinon : http://java.developpez.com/faq/java/...LLECTIONS_pile

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 193
    Par défaut
    j'ai déja crée la pile, par contre je voudrer evaluer une expression arithmetique genre (3+2)*6 en postfixée = 3 2 + 6 * =30. mon code est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    public class Pile {
     
    	private Object[] v;
    	 private int taillemax=1000;
    	 private int sommet;
     
    	 public Pile(){
    	     v=new Object[taillemax];
    	     sommet=0;
    	 }
     
    	 public Pile(int n){
    	     taillemax=n;
    	     v=new Object[taillemax];
    	     sommet=0;
    	 }
     
    	  public boolean estVide(Pile v){
    		 return sommet==0;
    	  }
     
    	  public Object depiler(){
    		 v[sommet-1]=null;
    	     return v[--sommet];
    	  }
     
    	  public void empiler(Object o){
    	     v[sommet++]=o;
    	  }
     
    	  public static int  factorielle(int n){
    		  if(n == 0) {
    			  return 1;
    		  } 
    		  else {
    			  return n*factorielle(n-1);
    		  }
    	  }
     
    	public static String Inf2Post(String args) {
     
    		     int N = args.length();
    		     Pile s = new Pile(N);
    		     String res="";
    		     for (int i = 0; i < N; i++) {
    		         if (args.charAt(i) == ')'){
    		        	 int som = s.sommet-1;
    		             res = res + s.v[som] +" ";
    		             s.depiler();}
    		         if (args.charAt(i) == '(') continue;
    		         if(args.charAt(i)==' ')continue;
    		         if ((args.charAt(i) == '+') || (args.charAt(i) == '*')|| (args.charAt(i) == '-')|| (args.charAt(i) == '/'))
    		             s.empiler(args.charAt(i));
    		         if (args.charAt(i) == '!'){};
     
    		         if((args.charAt(i) >= '0') && (args.charAt(i) <= '9')){
    		             while ((args.charAt(i) >= '0') && (args.charAt(i) <= '9'))
    		                 res =res+args.charAt(i++);
    		             i--;
    		             res=res+" ";
     
    		         }
    		     }
     
     
    		     return res;
    		 }
     
    	  public static int evaluation(String E){
    		  int n = E.length(); //N est la longueur de la chaine
    		  Pile s = new Pile(n); //création d'une pile de taille n
    		  int val_sommet_pile;
    		  int val_sommet_pile1;
    		  int val_sommet_pile2;
    		  int fact=0;
    		  int res = 0;
    		  int t;
    		  char st;
    		  int t2;
    		  for (int i=0; i<(n); i++){
    			  if ((E.charAt(i) >= '0') && (E.charAt(i) <= '9')){
    				  t=(int)E.charAt(i)-48;
    			      String tmp= "" + t;
    				  s.empiler(tmp);
    			  }
    			  else
    				  if(E.charAt(i)=='!'){
    					  val_sommet_pile=E.charAt(s.sommet);
    					  s.depiler();
    					  fact = factorielle(val_sommet_pile);
    					  String tmp = "" + fact;
    					  s.empiler(tmp);
    				  }
    				  else
    					  if((E.charAt(i)=='+')||(E.charAt(i)=='-')||(E.charAt(i)=='*')||(E.charAt(i)=='/')||(E.charAt(i)=='^')){
    						  st=s.v[s.sommet-1];
    						  val_sommet_pile1=st;
    						  s.depiler();
    						  t=(int)E.charAt(s.sommet-1)-48;
    						  val_sommet_pile2=t;
    						  s.depiler();
    						  if(E.charAt(i)=='+')
    							 res = val_sommet_pile2 + val_sommet_pile1;
    						  else if (E.charAt(i)=='-')
    							  	   res = val_sommet_pile2 - val_sommet_pile1;
    						  else if (E.charAt(i)=='*')
    							       res = val_sommet_pile2 * val_sommet_pile1;
    						  else if (E.charAt(i)=='/')
    							       res = val_sommet_pile2 / val_sommet_pile1;
    						  else if (E.charAt(i)=='^')
    							       res = val_sommet_pile2 ^ val_sommet_pile1;
    						  String tmp = "" + res;
    						  s.empiler(tmp);
    					  }
    		  }
    		  //t2=(int)E.charAt(s.sommet-1)-48;
    		  return res;
    	  }
     
     
    	public static void main(String[] args) {
    		String i = ConsoleG.lireString() ; 
    		 System.out.println("lexpression est:"+i );
    		 Pile p = new Pile();
    		  System.out.print("postfixee : ");
    		  String e=p.Inf2Post(i);
    		  System.out.println(e);
    		 // System.out.println(p.evaluation(e));
    	}
     
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/07/2006, 14h28
  2. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55
  3. Réponses: 1
    Dernier message: 11/04/2005, 09h59
  4. Comment creer une bande bootable ?
    Par sdeb dans le forum Administration système
    Réponses: 7
    Dernier message: 13/01/2004, 17h26
  5. [TP]comment creer une disquette bootable (les fichiers)
    Par ludovic5532 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/10/2003, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo