begin process at 2010 02 10 04:51:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Liste chainée en C++ sans STL (ni vector ni template)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Liste chainée en C++ sans STL (ni vector ni template)

samedi 15 février 2003 à 18:43:58 | Liste chainée en C++ sans STL (ni vector ni template)

Tamahome

Bonjour,

je cherche un exemple de liste chainée (sans STL: ni vector ni template) en
C++ (pas en C) permettant de chainer des objets héterogenes (par exemple 2
classes A et B (B dérivant de A)).

Si quelqu'un a ca en stock ca m'aiderait bien (google me donne que du STL).

genre :

class A {...}
class B : public A {...}

et une classe de liste chainée
class ListeChainee
{
...

public:
void add(...);
}

int main (void)
{
ListeChainee *LC = new ListeChainee();
A a;
B b;
LC.add (a);
LC.add (b);
}

un truc dans le genre ca serait parfait. J'ai bien essayé de toutes les
facons possibles, mais je finirai suerment a l'asile avant d'avoir trouver
la moindre solution correcte (sans bidouille).

D'avance merci :o)
dimanche 16 février 2003 à 10:55:28 | Re : Liste chainée en C++ sans STL (ni vector ni template)

vieuxLion

Bonjour,
il y a sur ce site des exemples.
Parmi eux, le mien
http://www.cppfrance.com/article.aspx?Val=1104

ou il est question de construire une liste chainée en plusieurs étapes... seule la dernière étape (IV) introduit les templates
Le type de chaque élément est "Element", la classe liste est "Liste"... simple quoi !

-------------------------------
Réponse au message :
-------------------------------

> Bonjour,
>
> je cherche un exemple de liste chainée (sans STL: ni vector ni template) en
> C++ (pas en C) permettant de chainer des objets héterogenes (par exemple 2
> classes A et B (B dérivant de A)).
>
> Si quelqu'un a ca en stock ca m'aiderait bien (google me donne que du STL).
>
> genre :
>
> class A {...}
> class B : public A {...}
>
> et une classe de liste chainée
> class ListeChainee
> {
> ...
>
> public:
> void add(...);
> }
>
> int main (void)
> {
> ListeChainee *LC = new ListeChainee();
> A a;
> B b;
> LC.add (a);
> LC.add (b);
> }
>
> un truc dans le genre ca serait parfait. J'ai bien essayé de toutes les
> facons possibles, mais je finirai suerment a l'asile avant d'avoir trouver
> la moindre solution correcte (sans bidouille).
>
> D'avance merci :o)
>
dimanche 16 février 2003 à 11:01:31 | Re : Liste chainée en C++ sans STL (ni vector ni template)

trinitacs





-------------------------------
Réponse au message :
Tu veux donc une liste chaînée qui n'utilise pas la STL et qui soit template afin d'utiliser plusieurs types d'objets.

Des exemples de liste chaînées il y en a un bon nombre mais template beaucoup moins.

Vla un code de deux fichiers:

// Copyright J-f Mitchell, this litle peace of code is a great
// tutorial for swing begigner.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JavaApp {
JFrame frame1;
JButton command1;
JTextField text1; //Declaring variables in class to able to use it in the whole class.
JPanel panel1;
JButton command2;


public JavaApp() {

frame1 = new JFrame("Put your title here"); //Main frame
frame1.setSize(50, 50);
command1 = new JButton("Button 1"); // creating control from declared variable in the class
text1 = new JTextField(20);
panel1 = new JPanel();
command2 = new JButton("Button 2");


command1.setMnemonic(KeyEvent.VK_I); //This is an event listener without the implements in the class, I like this method!
command1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
text1.setText("Button 1!");
}
});


command2.setMnemonic(KeyEvent.VK_I); // listener for the second button
command2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
text1.setText("Button 2!");
}
});


panel1.setLayout(new FlowLayout());
panel1.add(text1);
panel1.add(command1); //adding components to pane, you need this to be able to see ure component,
panel1.add(command2);

frame1.getContentPane().add(panel1, BorderLayout.CENTER); //add my pane to my frame

// Exit when the window is closed.
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// show the frame!
frame1.pack();
frame1.setVisible(true);
}


public static void main(String[] args) {
// set the look and feel
try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName()); //getting the java swing look
} catch(Exception e) {}

JavaApp javaapp = new JavaApp(); // tell the program to show up the frame by calling my GUI function

}
}










// Fig. 15.3: listnd.h
// D?finition du mod?le NoeudDeListe
#ifndef LISTND_H
#define LISTND_H

template< class TYPENOEUD > class Liste; // D?claration ult?rieure.

template<class TYPENOEUD>
class NoeudDeListe {
friend class Liste< TYPENOEUD >; // Faire de Liste un ami.
public:
NoeudDeListe( const TYPENOEUD & ); // Constructeur.
TYPENOEUD obtenirDonnee() const; // Retour donnee du noeud.
private:
TYPENOEUD donnee; // Donn?e.
NoeudDeListe< TYPENOEUD > *ptrSuivant; // Noeud suivant dans liste.
};

// Constructeur.
template<class TYPENOEUD>
NoeudDeListe< TYPENOEUD >::NoeudDeListe( const TYPENOEUD &info )
: donnee( info ), ptrSuivant( 0 ) { }

// Retour d'une copie de la donn?e du noeud.
template< class TYPENOEUD >
TYPENOEUD NoeudDeListe< TYPENOEUD >::obtenirDonnee() const { return donnee; }

#endif








Si tu veux tu peux regarder ma source qui utilise des listes chaînées (mais pas template). Tu auras des exemple des manipulations pour déplacer un noeud vers la fin ou au début etc....
-------------------------------

> Bonjour,
>
> je cherche un exemple de liste chainée (sans STL: ni vector ni template) en
> C++ (pas en C) permettant de chainer des objets héterogenes (par exemple 2
> classes A et B (B dérivant de A)).
>
> Si quelqu'un a ca en stock ca m'aiderait bien (google me donne que du STL).
>
> genre :
>
> class A {...}
> class B : public A {...}
>
> et une classe de liste chainée
> class ListeChainee
> {
> ...
>
> public:
> void add(...);
> }
>
> int main (void)
> {
> ListeChainee *LC = new ListeChainee();
> A a;
> B b;
> LC.add (a);
> LC.add (b);
> }
>
> un truc dans le genre ca serait parfait. J'ai bien essayé de toutes les
> facons possibles, mais je finirai suerment a l'asile avant d'avoir trouver
> la moindre solution correcte (sans bidouille).
>
> D'avance merci :o)
>
dimanche 16 février 2003 à 11:03:54 | Re : Liste chainée en C++ sans STL (ni vector ni template)

trinitacs





-------------------------------
Réponse au message :
J'ai foiré dans la première source, je te la redonne:

// Fig. 15.3: Liste.h
// D?finition du mod?le de classe Liste.
#ifndef LISTE_H
#define LISTE_H

#include <iostream.h>
#include <assert.h>
#include "listnd.h"

template< class TYPENOEUD >
class Liste {
public:
Liste(); // Constructeur.
~Liste(); // Destructeur.
void insererEnTete( const TYPENOEUD & );
void insererEnQueue( const TYPENOEUD & );
bool retirerDeTete( TYPENOEUD & );
bool retirerDeQueue( TYPENOEUD & );
bool estVide() const;
void afficher() const;
private:
NoeudDeListe< TYPENOEUD > *ptrPremier; // Pointeur vers premier noeud.
NoeudDeListe< TYPENOEUD > *ptrDernier; // Pointeur vers dernier noeud.

// Fonction utilitaire d'allocation d'un nouveau noeud.
NoeudDeListe< TYPENOEUD > *obtenirNouveauNoeud( const TYPENOEUD & );
};

// Constructeur par défaut.
template< class TYPENOEUD >
Liste< TYPENOEUD >::Liste() : ptrPremier( 0 ), ptrDernier( 0 ) { }

// Destructeur.
template< class TYPENOEUD >
Liste< TYPENOEUD >::~Liste()
{
if ( !estVide() ) { // La liste n'est pas vide.
cout << "Destruction des noeuds ...\n";

NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier, *ptrTemp;

while ( ptrCourant != 0 ) { // D?truire les noeuds restants.
ptrTemp = ptrCourant;
cout << ptrTemp->donnee << '\n';
ptrCourant = ptrCourant->ptrSuivant;
delete ptrTemp;
}
}

cout << "Tous les noeuds sont d?truits.\n\n";
}

// Ins?rer un noeud en t?te de la liste.
template< class TYPENOEUD >
void Liste< TYPENOEUD >::insererEnTete( const TYPENOEUD &valeur )
{
NoeudDeListe< TYPENOEUD > *nouveauPtr = obtenirNouveauNoeud( valeur );

if ( estVide() ) // La liste est vide.
ptrPremier = ptrDernier = nouveauPtr;
else { // La liste n'est pas vide.
nouveauPtr->ptrSuivant = ptrPremier;
ptrPremier = nouveauPtr;
}
}

// Ins?rer un noeud ? la queue de la Liste
template< class TYPENOEUD >
void Liste< TYPENOEUD >::insererEnQueue( const TYPENOEUD &valeur )
{
NoeudDeListe< TYPENOEUD > *nouveauPtr = obtenirNouveauNoeud( valeur );

if ( estVide() ) // La liste est vide.
ptrPremier = ptrDernier = nouveauPtr;
else { // La liste n'est pas vide.
ptrDernier->ptrSuivant = nouveauPtr;
ptrDernier = nouveauPtr;
}
}

// Supprimer un noeud de la t?te de la liste.
template< class TYPENOEUD >
bool Liste< TYPENOEUD >::retirerDeTete( TYPENOEUD &valeur )
{
if ( estVide() ) // La liste est vide.
return false; // chec suppression.
else {
NoeudDeListe< TYPENOEUD > *ptrTemp = ptrPremier;

if ( ptrPremier == ptrDernier )
ptrPremier = ptrDernier = 0;
else
ptrPremier = ptrPremier->ptrSuivant;

valeur = ptrTemp->donnee; // Donn?e en cours de suppression.
delete ptrTemp;
return true; // R?ussite suppression.
}
}

// Supprimer un noeud de la queue de la liste.
template< class TYPENOEUD >
bool Liste< TYPENOEUD >::retirerDeQueue( TYPENOEUD &valeur )
{
if ( estVide() )
return false; // chec de la suppression.
else {
NoeudDeListe< TYPENOEUD > *ptrTemp = ptrDernier;

if ( ptrPremier == ptrDernier )
ptrPremier = ptrDernier = 0;
else {
NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier;

while ( ptrCourant->ptrSuivant != ptrDernier )
ptrCourant = ptrCourant->ptrSuivant;

ptrDernier = ptrCourant;
ptrCourant->ptrSuivant = 0;
}

valeur = ptrTemp->donnee;
delete ptrTemp;
return true; // R?ussite suppression.
}
}

// La liste est-elle vide ?
template< class TYPENOEUD >
bool Liste< TYPENOEUD >::estVide() const
{ return ptrPremier == 0; }

// Retourner un pointeur vers un noeud nouvellement allou?.
template< class TYPENOEUD >
NoeudDeListe< TYPENOEUD > *Liste< TYPENOEUD >::obtenirNouveauNoeud(
const TYPENOEUD &valeur )
{
NoeudDeListe< TYPENOEUD > *ptr =
new NoeudDeListe< TYPENOEUD >( valeur );
assert( ptr != 0 );
return ptr;
}

// Afficher le contenu de la liste.
template< class TYPENOEUD >
void Liste< TYPENOEUD >::afficher() const
{
if ( estVide() ) {
cout << "La liste est vide.\n\n";
return;
}

NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier;

cout << "La liste contient : ";

while ( ptrCourant != 0 ) {
cout << ptrCourant->donnee << ' ';
ptrCourant = ptrCourant->ptrSuivant;
}

cout << "\n\n";
}

#endif

-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message :
> Tu veux donc une liste chaînée qui n'utilise pas la STL et qui soit template afin d'utiliser plusieurs types d'objets.
>
> Des exemples de liste chaînées il y en a un bon nombre mais template beaucoup moins.
>
> Vla un code de deux fichiers:
>
> // Copyright J-f Mitchell, this litle peace of code is a great
> // tutorial for swing begigner.
>
>
> import java.awt.*;
> import java.awt.event.*;
> import javax.swing.*;
>
> public class JavaApp {
> JFrame frame1;
> JButton command1;
> JTextField text1; //Declaring variables in class to able to use it in the whole class.
> JPanel panel1;
> JButton command2;
>
>
> public JavaApp() {
>
> frame1 = new JFrame("Put your title here"); //Main frame
> frame1.setSize(50, 50);
> command1 = new JButton("Button 1"); // creating control from declared variable in the class
> text1 = new JTextField(20);
> panel1 = new JPanel();
> command2 = new JButton("Button 2");
>
>
> command1.setMnemonic(KeyEvent.VK_I); //This is an event listener without the implements in the class, I like this method!
> command1.addActionListener(new ActionListener() {
> public void actionPerformed(ActionEvent e) {
> text1.setText("Button 1!");
> }
> });
>
>
> command2.setMnemonic(KeyEvent.VK_I); // listener for the second button
> command2.addActionListener(new ActionListener() {
> public void actionPerformed(ActionEvent e) {
> text1.setText("Button 2!");
> }
> });
>
>
> panel1.setLayout(new FlowLayout());
> panel1.add(text1);
> panel1.add(command1); //adding components to pane, you need this to be able to see ure component,
> panel1.add(command2);
>
> frame1.getContentPane().add(panel1, BorderLayout.CENTER); //add my pane to my frame
>
> // Exit when the window is closed.
> frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>
> // show the frame!
> frame1.pack();
> frame1.setVisible(true);
> }
>
>
> public static void main(String[] args) {
> // set the look and feel
> try {
> UIManager.setLookAndFeel(
> UIManager.getCrossPlatformLookAndFeelClassName()); //getting the java swing look
> } catch(Exception e) {}
>
> JavaApp javaapp = new JavaApp(); // tell the program to show up the frame by calling my GUI function
>
> }
> }
>
>
>
>
>
>
>
>
>
>
> // Fig. 15.3: listnd.h
> // D?finition du mod?le NoeudDeListe
> #ifndef LISTND_H
> #define LISTND_H
>
> template< class TYPENOEUD > class Liste; // D?claration ult?rieure.
>
> template<class TYPENOEUD>
> class NoeudDeListe {
> friend class Liste< TYPENOEUD >; // Faire de Liste un ami.
> public:
> NoeudDeListe( const TYPENOEUD & ); // Constructeur.
> TYPENOEUD obtenirDonnee() const; // Retour donnee du noeud.
> private:
> TYPENOEUD donnee; // Donn?e.
> NoeudDeListe< TYPENOEUD > *ptrSuivant; // Noeud suivant dans liste.
> };
>
> // Constructeur.
> template<class TYPENOEUD>
> NoeudDeListe< TYPENOEUD >::NoeudDeListe( const TYPENOEUD &info )
> : donnee( info ), ptrSuivant( 0 ) { }
>
> // Retour d'une copie de la donn?e du noeud.
> template< class TYPENOEUD >
> TYPENOEUD NoeudDeListe< TYPENOEUD >::obtenirDonnee() const { return donnee; }
>
> #endif
>
>
>
>
>
>
>
>
> Si tu veux tu peux regarder ma source qui utilise des listes chaînées (mais pas template). Tu auras des exemple des manipulations pour déplacer un noeud vers la fin ou au début etc....
> -------------------------------
>
> > Bonjour,
> >
> > je cherche un exemple de liste chainée (sans STL: ni vector ni template) en
> > C++ (pas en C) permettant de chainer des objets héterogenes (par exemple 2
> > classes A et B (B dérivant de A)).
> >
> > Si quelqu'un a ca en stock ca m'aiderait bien (google me donne que du STL).
> >
> > genre :
> >
> > class A {...}
> > class B : public A {...}
> >
> > et une classe de liste chainée
> > class ListeChainee
> > {
> > ...
> >
> > public:
> > void add(...);
> > }
> >
> > int main (void)
> > {
> > ListeChainee *LC = new ListeChainee();
> > A a;
> > B b;
> > LC.add (a);
> > LC.add (b);
> > }
> >
> > un truc dans le genre ca serait parfait. J'ai bien essayé de toutes les
> > facons possibles, mais je finirai suerment a l'asile avant d'avoir trouver
> > la moindre solution correcte (sans bidouille).
> >
> > D'avance merci :o)
> >
>
dimanche 16 février 2003 à 14:45:54 | Re : Liste chainée en C++ sans STL (ni vector ni template)

vieuxLion

j'espère que c'est une blague trinitacs?
on demande du code C++ sans templates
et tu réponds du code Java avec templates (alors que Java ne les supporte d'ailleurs pas)


-------------------------------
Réponse au message :
-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message :
> J'ai foiré dans la première source, je te la redonne:
>
> // Fig. 15.3: Liste.h
> // D?finition du mod?le de classe Liste.
> #ifndef LISTE_H
> #define LISTE_H
>
> #include <iostream.h>
> #include <assert.h>
> #include "listnd.h"
>
> template< class TYPENOEUD >
> class Liste {
> public:
> Liste(); // Constructeur.
> ~Liste(); // Destructeur.
> void insererEnTete( const TYPENOEUD & );
> void insererEnQueue( const TYPENOEUD & );
> bool retirerDeTete( TYPENOEUD & );
> bool retirerDeQueue( TYPENOEUD & );
> bool estVide() const;
> void afficher() const;
> private:
> NoeudDeListe< TYPENOEUD > *ptrPremier; // Pointeur vers premier noeud.
> NoeudDeListe< TYPENOEUD > *ptrDernier; // Pointeur vers dernier noeud.
>
> // Fonction utilitaire d'allocation d'un nouveau noeud.
> NoeudDeListe< TYPENOEUD > *obtenirNouveauNoeud( const TYPENOEUD & );
> };
>
> // Constructeur par défaut.
> template< class TYPENOEUD >
> Liste< TYPENOEUD >::Liste() : ptrPremier( 0 ), ptrDernier( 0 ) { }
>
> // Destructeur.
> template< class TYPENOEUD >
> Liste< TYPENOEUD >::~Liste()
> {
> if ( !estVide() ) { // La liste n'est pas vide.
> cout << "Destruction des noeuds ...\n";
>
> NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier, *ptrTemp;
>
> while ( ptrCourant != 0 ) { // D?truire les noeuds restants.
> ptrTemp = ptrCourant;
> cout << ptrTemp->donnee << '\n';
> ptrCourant = ptrCourant->ptrSuivant;
> delete ptrTemp;
> }
> }
>
> cout << "Tous les noeuds sont d?truits.\n\n";
> }
>
> // Ins?rer un noeud en t?te de la liste.
> template< class TYPENOEUD >
> void Liste< TYPENOEUD >::insererEnTete( const TYPENOEUD &valeur )
> {
> NoeudDeListe< TYPENOEUD > *nouveauPtr = obtenirNouveauNoeud( valeur );
>
> if ( estVide() ) // La liste est vide.
> ptrPremier = ptrDernier = nouveauPtr;
> else { // La liste n'est pas vide.
> nouveauPtr->ptrSuivant = ptrPremier;
> ptrPremier = nouveauPtr;
> }
> }
>
> // Ins?rer un noeud ? la queue de la Liste
> template< class TYPENOEUD >
> void Liste< TYPENOEUD >::insererEnQueue( const TYPENOEUD &valeur )
> {
> NoeudDeListe< TYPENOEUD > *nouveauPtr = obtenirNouveauNoeud( valeur );
>
> if ( estVide() ) // La liste est vide.
> ptrPremier = ptrDernier = nouveauPtr;
> else { // La liste n'est pas vide.
> ptrDernier->ptrSuivant = nouveauPtr;
> ptrDernier = nouveauPtr;
> }
> }
>
> // Supprimer un noeud de la t?te de la liste.
> template< class TYPENOEUD >
> bool Liste< TYPENOEUD >::retirerDeTete( TYPENOEUD &valeur )
> {
> if ( estVide() ) // La liste est vide.
> return false; // chec suppression.
> else {
> NoeudDeListe< TYPENOEUD > *ptrTemp = ptrPremier;
>
> if ( ptrPremier == ptrDernier )
> ptrPremier = ptrDernier = 0;
> else
> ptrPremier = ptrPremier->ptrSuivant;
>
> valeur = ptrTemp->donnee; // Donn?e en cours de suppression.
> delete ptrTemp;
> return true; // R?ussite suppression.
> }
> }
>
> // Supprimer un noeud de la queue de la liste.
> template< class TYPENOEUD >
> bool Liste< TYPENOEUD >::retirerDeQueue( TYPENOEUD &valeur )
> {
> if ( estVide() )
> return false; // chec de la suppression.
> else {
> NoeudDeListe< TYPENOEUD > *ptrTemp = ptrDernier;
>
> if ( ptrPremier == ptrDernier )
> ptrPremier = ptrDernier = 0;
> else {
> NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier;
>
> while ( ptrCourant->ptrSuivant != ptrDernier )
> ptrCourant = ptrCourant->ptrSuivant;
>
> ptrDernier = ptrCourant;
> ptrCourant->ptrSuivant = 0;
> }
>
> valeur = ptrTemp->donnee;
> delete ptrTemp;
> return true; // R?ussite suppression.
> }
> }
>
> // La liste est-elle vide ?
> template< class TYPENOEUD >
> bool Liste< TYPENOEUD >::estVide() const
> { return ptrPremier == 0; }
>
> // Retourner un pointeur vers un noeud nouvellement allou?.
> template< class TYPENOEUD >
> NoeudDeListe< TYPENOEUD > *Liste< TYPENOEUD >::obtenirNouveauNoeud(
> const TYPENOEUD &valeur )
> {
> NoeudDeListe< TYPENOEUD > *ptr =
> new NoeudDeListe< TYPENOEUD >( valeur );
> assert( ptr != 0 );
> return ptr;
> }
>
> // Afficher le contenu de la liste.
> template< class TYPENOEUD >
> void Liste< TYPENOEUD >::afficher() const
> {
> if ( estVide() ) {
> cout << "La liste est vide.\n\n";
> return;
> }
>
> NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier;
>
> cout << "La liste contient : ";
>
> while ( ptrCourant != 0 ) {
> cout << ptrCourant->donnee << ' ';
> ptrCourant = ptrCourant->ptrSuivant;
> }
>
> cout << "\n\n";
> }
>
> #endif
>
> -------------------------------
>
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > Tu veux donc une liste chaînée qui n'utilise pas la STL et qui soit template afin d'utiliser plusieurs types d'objets.
> >
> > Des exemples de liste chaînées il y en a un bon nombre mais template beaucoup moins.
> >
> > Vla un code de deux fichiers:
> >
> > // Copyright J-f Mitchell, this litle peace of code is a great
> > // tutorial for swing begigner.
> >
> >
> > import java.awt.*;
> > import java.awt.event.*;
> > import javax.swing.*;
> >
> > public class JavaApp {
> > JFrame frame1;
> > JButton command1;
> > JTextField text1; //Declaring variables in class to able to use it in the whole class.
> > JPanel panel1;
> > JButton command2;
> >
> >
> > public JavaApp() {
> >
> > frame1 = new JFrame("Put your title here"); //Main frame
> > frame1.setSize(50, 50);
> > command1 = new JButton("Button 1"); // creating control from declared variable in the class
> > text1 = new JTextField(20);
> > panel1 = new JPanel();
> > command2 = new JButton("Button 2");
> >
> >
> > command1.setMnemonic(KeyEvent.VK_I); //This is an event listener without the implements in the class, I like this method!
> > command1.addActionListener(new ActionListener() {
> > public void actionPerformed(ActionEvent e) {
> > text1.setText("Button 1!");
> > }
> > });
> >
> >
> > command2.setMnemonic(KeyEvent.VK_I); // listener for the second button
> > command2.addActionListener(new ActionListener() {
> > public void actionPerformed(ActionEvent e) {
> > text1.setText("Button 2!");
> > }
> > });
> >
> >
> > panel1.setLayout(new FlowLayout());
> > panel1.add(text1);
> > panel1.add(command1); //adding components to pane, you need this to be able to see ure component,
> > panel1.add(command2);
> >
> > frame1.getContentPane().add(panel1, BorderLayout.CENTER); //add my pane to my frame
> >
> > // Exit when the window is closed.
> > frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> >
> > // show the frame!
> > frame1.pack();
> > frame1.setVisible(true);
> > }
> >
> >
> > public static void main(String[] args) {
> > // set the look and feel
> > try {
> > UIManager.setLookAndFeel(
> > UIManager.getCrossPlatformLookAndFeelClassName()); //getting the java swing look
> > } catch(Exception e) {}
> >
> > JavaApp javaapp = new JavaApp(); // tell the program to show up the frame by calling my GUI function
> >
> > }
> > }
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > // Fig. 15.3: listnd.h
> > // D?finition du mod?le NoeudDeListe
> > #ifndef LISTND_H
> > #define LISTND_H
> >
> > template< class TYPENOEUD > class Liste; // D?claration ult?rieure.
> >
> > template<class TYPENOEUD>
> > class NoeudDeListe {
> > friend class Liste< TYPENOEUD >; // Faire de Liste un ami.
> > public:
> > NoeudDeListe( const TYPENOEUD & ); // Constructeur.
> > TYPENOEUD obtenirDonnee() const; // Retour donnee du noeud.
> > private:
> > TYPENOEUD donnee; // Donn?e.
> > NoeudDeListe< TYPENOEUD > *ptrSuivant; // Noeud suivant dans liste.
> > };
> >
> > // Constructeur.
> > template<class TYPENOEUD>
> > NoeudDeListe< TYPENOEUD >::NoeudDeListe( const TYPENOEUD &info )
> > : donnee( info ), ptrSuivant( 0 ) { }
> >
> > // Retour d'une copie de la donn?e du noeud.
> > template< class TYPENOEUD >
> > TYPENOEUD NoeudDeListe< TYPENOEUD >::obtenirDonnee() const { return donnee; }
> >
> > #endif
> >
> >
> >
> >
> >
> >
> >
> >
> > Si tu veux tu peux regarder ma source qui utilise des listes chaînées (mais pas template). Tu auras des exemple des manipulations pour déplacer un noeud vers la fin ou au début etc....
> > -------------------------------
> >
> > > Bonjour,
> > >
> > > je cherche un exemple de liste chainée (sans STL: ni vector ni template) en
> > > C++ (pas en C) permettant de chainer des objets héterogenes (par exemple 2
> > > classes A et B (B dérivant de A)).
> > >
> > > Si quelqu'un a ca en stock ca m'aiderait bien (google me donne que du STL).
> > >
> > > genre :
> > >
> > > class A {...}
> > > class B : public A {...}
> > >
> > > et une classe de liste chainée
> > > class ListeChainee
> > > {
> > > ...
> > >
> > > public:
> > > void add(...);
> > > }
> > >
> > > int main (void)
> > > {
> > > ListeChainee *LC = new ListeChainee();
> > > A a;
> > > B b;
> > > LC.add (a);
> > > LC.add (b);
> > > }
> > >
> > > un truc dans le genre ca serait parfait. J'ai bien essayé de toutes les
> > > facons possibles, mais je finirai suerment a l'asile avant d'avoir trouver
> > > la moindre solution correcte (sans bidouille).
> > >
> > > D'avance merci :o)
> > >
> >
>
mercredi 19 février 2003 à 14:06:19 | Re : Liste chainée en C++ sans STL (ni vector ni template)

trinitacs





-------------------------------
Réponse au message :
Merde j'avais cru que c'était avec template :(
Et pour le code java j'ai foiré lors d'un copier collé. Mais sinon le reste est du C++.

c'est de ma faute j'avais mal lu :(
-------------------------------

> j'espère que c'est une blague trinitacs?
> on demande du code C++ sans templates
> et tu réponds du code Java avec templates (alors que Java ne les supporte d'ailleurs pas)
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > J'ai foiré dans la première source, je te la redonne:
> >
> > // Fig. 15.3: Liste.h
> > // D?finition du mod?le de classe Liste.
> > #ifndef LISTE_H
> > #define LISTE_H
> >
> > #include <iostream.h>
> > #include <assert.h>
> > #include "listnd.h"
> >
> > template< class TYPENOEUD >
> > class Liste {
> > public:
> > Liste(); // Constructeur.
> > ~Liste(); // Destructeur.
> > void insererEnTete( const TYPENOEUD & );
> > void insererEnQueue( const TYPENOEUD & );
> > bool retirerDeTete( TYPENOEUD & );
> > bool retirerDeQueue( TYPENOEUD & );
> > bool estVide() const;
> > void afficher() const;
> > private:
> > NoeudDeListe< TYPENOEUD > *ptrPremier; // Pointeur vers premier noeud.
> > NoeudDeListe< TYPENOEUD > *ptrDernier; // Pointeur vers dernier noeud.
> >
> > // Fonction utilitaire d'allocation d'un nouveau noeud.
> > NoeudDeListe< TYPENOEUD > *obtenirNouveauNoeud( const TYPENOEUD & );
> > };
> >
> > // Constructeur par défaut.
> > template< class TYPENOEUD >
> > Liste< TYPENOEUD >::Liste() : ptrPremier( 0 ), ptrDernier( 0 ) { }
> >
> > // Destructeur.
> > template< class TYPENOEUD >
> > Liste< TYPENOEUD >::~Liste()
> > {
> > if ( !estVide() ) { // La liste n'est pas vide.
> > cout << "Destruction des noeuds ...\n";
> >
> > NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier, *ptrTemp;
> >
> > while ( ptrCourant != 0 ) { // D?truire les noeuds restants.
> > ptrTemp = ptrCourant;
> > cout << ptrTemp->donnee << '\n';
> > ptrCourant = ptrCourant->ptrSuivant;
> > delete ptrTemp;
> > }
> > }
> >
> > cout << "Tous les noeuds sont d?truits.\n\n";
> > }
> >
> > // Ins?rer un noeud en t?te de la liste.
> > template< class TYPENOEUD >
> > void Liste< TYPENOEUD >::insererEnTete( const TYPENOEUD &valeur )
> > {
> > NoeudDeListe< TYPENOEUD > *nouveauPtr = obtenirNouveauNoeud( valeur );
> >
> > if ( estVide() ) // La liste est vide.
> > ptrPremier = ptrDernier = nouveauPtr;
> > else { // La liste n'est pas vide.
> > nouveauPtr->ptrSuivant = ptrPremier;
> > ptrPremier = nouveauPtr;
> > }
> > }
> >
> > // Ins?rer un noeud ? la queue de la Liste
> > template< class TYPENOEUD >
> > void Liste< TYPENOEUD >::insererEnQueue( const TYPENOEUD &valeur )
> > {
> > NoeudDeListe< TYPENOEUD > *nouveauPtr = obtenirNouveauNoeud( valeur );
> >
> > if ( estVide() ) // La liste est vide.
> > ptrPremier = ptrDernier = nouveauPtr;
> > else { // La liste n'est pas vide.
> > ptrDernier->ptrSuivant = nouveauPtr;
> > ptrDernier = nouveauPtr;
> > }
> > }
> >
> > // Supprimer un noeud de la t?te de la liste.
> > template< class TYPENOEUD >
> > bool Liste< TYPENOEUD >::retirerDeTete( TYPENOEUD &valeur )
> > {
> > if ( estVide() ) // La liste est vide.
> > return false; // chec suppression.
> > else {
> > NoeudDeListe< TYPENOEUD > *ptrTemp = ptrPremier;
> >
> > if ( ptrPremier == ptrDernier )
> > ptrPremier = ptrDernier = 0;
> > else
> > ptrPremier = ptrPremier->ptrSuivant;
> >
> > valeur = ptrTemp->donnee; // Donn?e en cours de suppression.
> > delete ptrTemp;
> > return true; // R?ussite suppression.
> > }
> > }
> >
> > // Supprimer un noeud de la queue de la liste.
> > template< class TYPENOEUD >
> > bool Liste< TYPENOEUD >::retirerDeQueue( TYPENOEUD &valeur )
> > {
> > if ( estVide() )
> > return false; // chec de la suppression.
> > else {
> > NoeudDeListe< TYPENOEUD > *ptrTemp = ptrDernier;
> >
> > if ( ptrPremier == ptrDernier )
> > ptrPremier = ptrDernier = 0;
> > else {
> > NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier;
> >
> > while ( ptrCourant->ptrSuivant != ptrDernier )
> > ptrCourant = ptrCourant->ptrSuivant;
> >
> > ptrDernier = ptrCourant;
> > ptrCourant->ptrSuivant = 0;
> > }
> >
> > valeur = ptrTemp->donnee;
> > delete ptrTemp;
> > return true; // R?ussite suppression.
> > }
> > }
> >
> > // La liste est-elle vide ?
> > template< class TYPENOEUD >
> > bool Liste< TYPENOEUD >::estVide() const
> > { return ptrPremier == 0; }
> >
> > // Retourner un pointeur vers un noeud nouvellement allou?.
> > template< class TYPENOEUD >
> > NoeudDeListe< TYPENOEUD > *Liste< TYPENOEUD >::obtenirNouveauNoeud(
> > const TYPENOEUD &valeur )
> > {
> > NoeudDeListe< TYPENOEUD > *ptr =
> > new NoeudDeListe< TYPENOEUD >( valeur );
> > assert( ptr != 0 );
> > return ptr;
> > }
> >
> > // Afficher le contenu de la liste.
> > template< class TYPENOEUD >
> > void Liste< TYPENOEUD >::afficher() const
> > {
> > if ( estVide() ) {
> > cout << "La liste est vide.\n\n";
> > return;
> > }
> >
> > NoeudDeListe< TYPENOEUD > *ptrCourant = ptrPremier;
> >
> > cout << "La liste contient : ";
> >
> > while ( ptrCourant != 0 ) {
> > cout << ptrCourant->donnee << ' ';
> > ptrCourant = ptrCourant->ptrSuivant;
> > }
> >
> > cout << "\n\n";
> > }
> >
> > #endif
> >
> > -------------------------------
> >
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > Tu veux donc une liste chaînée qui n'utilise pas la STL et qui soit template afin d'utiliser plusieurs types d'objets.
> > >
> > > Des exemples de liste chaînées il y en a un bon nombre mais template beaucoup moins.
> > >
> > > Vla un code de deux fichiers:
> > >
> > > // Copyright J-f Mitchell, this litle peace of code is a great
> > > // tutorial for swing begigner.
> > >
> > >
> > > import java.awt.*;
> > > import java.awt.event.*;
> > > import javax.swing.*;
> > >
> > > public class JavaApp {
> > > JFrame frame1;
> > > JButton command1;
> > > JTextField text1; //Declaring variables in class to able to use it in the whole class.
> > > JPanel panel1;
> > > JButton command2;
> > >
> > >
> > > public JavaApp() {
> > >
> > > frame1 = new JFrame("Put your title here"); //Main frame
> > > frame1.setSize(50, 50);
> > > command1 = new JButton("Button 1"); // creating control from declared variable in the class
> > > text1 = new JTextField(20);
> > > panel1 = new JPanel();
> > > command2 = new JButton("Button 2");
> > >
> > >
> > > command1.setMnemonic(KeyEvent.VK_I); //This is an event listener without the implements in the class, I like this method!
> > > command1.addActionListener(new ActionListener() {
> > > public void actionPerformed(ActionEvent e) {
> > > text1.setText("Button 1!");
> > > }
> > > });
> > >
> > >
> > > command2.setMnemonic(KeyEvent.VK_I); // listener for the second button
> > > command2.addActionListener(new ActionListener() {
> > > public void actionPerformed(ActionEvent e) {
> > > text1.setText("Button 2!");
> > > }
> > > });
> > >
> > >
> > > panel1.setLayout(new FlowLayout());
> > > panel1.add(text1);
> > > panel1.add(command1); //adding components to pane, you need this to be able to see ure component,
> > > panel1.add(command2);
> > >
> > > frame1.getContentPane().add(panel1, BorderLayout.CENTER); //add my pane to my frame
> > >
> > > // Exit when the window is closed.
> > > frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> > >
> > > // show the frame!
> > > frame1.pack();
> > > frame1.setVisible(true);
> > > }
> > >
> > >
> > > public static void main(String[] args) {
> > > // set the look and feel
> > > try {
> > > UIManager.setLookAndFeel(
> > > UIManager.getCrossPlatformLookAndFeelClassName()); //getting the java swing look
> > > } catch(Exception e) {}
> > >
> > > JavaApp javaapp = new JavaApp(); // tell the program to show up the frame by calling my GUI function
> > >
> > > }
> > > }
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > // Fig. 15.3: listnd.h
> > > // D?finition du mod?le NoeudDeListe
> > > #ifndef LISTND_H
> > > #define LISTND_H
> > >
> > > template< class TYPENOEUD > class Liste; // D?claration ult?rieure.
> > >
> > > template<class TYPENOEUD>
> > > class NoeudDeListe {
> > > friend class Liste< TYPENOEUD >; // Faire de Liste un ami.
> > > public:
> > > NoeudDeListe( const TYPENOEUD & ); // Constructeur.
> > > TYPENOEUD obtenirDonnee() const; // Retour donnee du noeud.
> > > private:
> > > TYPENOEUD donnee; // Donn?e.
> > > NoeudDeListe< TYPENOEUD > *ptrSuivant; // Noeud suivant dans liste.
> > > };
> > >
> > > // Constructeur.
> > > template<class TYPENOEUD>
> > > NoeudDeListe< TYPENOEUD >::NoeudDeListe( const TYPENOEUD &info )
> > > : donnee( info ), ptrSuivant( 0 ) { }
> > >
> > > // Retour d'une copie de la donn?e du noeud.
> > > template< class TYPENOEUD >
> > > TYPENOEUD NoeudDeListe< TYPENOEUD >::obtenirDonnee() const { return donnee; }
> > >
> > > #endif
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Si tu veux tu peux regarder ma source qui utilise des listes chaînées (mais pas template). Tu auras des exemple des manipulations pour déplacer un noeud vers la fin ou au début etc....
> > > -------------------------------
> > >
> > > > Bonjour,
> > > >
> > > > je cherche un exemple de liste chainée (sans STL: ni vector ni template) en
> > > > C++ (pas en C) permettant de chainer des objets héterogenes (par exemple 2
> > > > classes A et B (B dérivant de A)).
> > > >
> > > > Si quelqu'un a ca en stock ca m'aiderait bien (google me donne que du STL).
> > > >
> > > > genre :
> > > >
> > > > class A {...}
> > > > class B : public A {...}
> > > >
> > > > et une classe de liste chainée
> > > > class ListeChainee
> > > > {
> > > > ...
> > > >
> > > > public:
> > > > void add(...);
> > > > }
> > > >
> > > > int main (void)
> > > > {
> > > > ListeChainee *LC = new ListeChainee();
> > > > A a;
> > > > B b;
> > > > LC.add (a);
> > > > LC.add (b);
> > > > }
> > > >
> > > > un truc dans le genre ca serait parfait. J'ai bien essayé de toutes les
> > > > facons possibles, mais je finirai suerment a l'asile avant d'avoir trouver
> > > > la moindre solution correcte (sans bidouille).
> > > >
> > > > D'avance merci :o)
> > > >
> > >
> >
>
mercredi 19 février 2003 à 16:29:47 | Re : Liste chainée en C++ sans STL (ni vector ni template)

vieuxLion

... mais c'est sympa, ça m'a bien fait rire quand même



-------------------------------
Réponse au message :
-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message :
> Merde j'avais cru que c'était avec template :(
> Et pour le code java j'ai foiré lors d'un copier collé. Mais sinon le reste est du C++.
>
> c'est de ma faute j'avais mal lu :(
> -------------------------------
>
> > j'espère que c'est une blague trinitacs?
> > on demande du code C++ sans templates
> > et tu réponds du code Java avec templates (alors que Java ne les supporte d'ailleurs pas)
> >
> >
mercredi 19 février 2003 à 16:40:53 | Re : Liste chainée en C++ sans STL (ni vector ni template)

trinitacs





-------------------------------
Réponse au message :
Ça met de l'animation :)
-------------------------------

> ... mais c'est sympa, ça m'a bien fait rire quand même
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > Merde j'avais cru que c'était avec template :(
> > Et pour le code java j'ai foiré lors d'un copier collé. Mais sinon le reste est du C++.
> >
> > c'est de ma faute j'avais mal lu :(
> > -------------------------------
> >
> > > j'espère que c'est une blague trinitacs?
> > > on demande du code C++ sans templates
> > > et tu réponds du code Java avec templates (alors que Java ne les supporte d'ailleurs pas)
> > >
> > >
mercredi 19 février 2003 à 21:43:16 | Re : Liste chainée en C++ sans STL (ni vector ni template)

Tamahome

-------------------------------
Réponse au message :
-------------------------------

> j'espère que c'est une blague trinitacs?
> on demande du code C++ sans templates
> et tu réponds du code Java avec templates (alors que Java ne les supporte d'ailleurs pas)
>

Enfin merci qd meme, mais c'est vrai que ca me sert pas a grand chose ca :/


Cette discussion est classée dans : liste, template, vector, stl, chainée


Répondre à ce message

Sujets en rapport avec ce message

Du remord pour vector [ par guifr ] Bonjour à tous, Dans une application je dois utiliser des tableaux dynamiques. Ma première idée était de créer des listes chainées, mais j'hésite à i [STL] vector d'une classe [ par Fa7 ] Bonjour J'ai un probleme. j'ai un vecteur d'une classe que j'ai definie vector vectGraph; et quand je je veux ajouter un graphe dans le vecteur: Gra template- au secours [ par toddy_101 ] bonjour tout le monde, j'ai un probleme au niveau des templates, ca bloke au niveau du linkage!! voici la declaration de la classe , et des methodes: Liste STL sur une classe [ par zekicker ] Bonjour, Voilà, Je voudrai créer une liste chainée à l'aide de list de la STL. Chaque noeud doit être une classe. Je ne sais pas comment m'y prendre STL ou Liste chaines [ par Stebo ] Lu,je commence a programmer en C++(experiences de quelques mois) et un moment je pense on est tous passe par les lsite chainés (simple et double chanc STL vector et tableau [ par cybermax62 ] j'ai une petite question sur la classe template vector. je sais que c'est possible d'initiliser un vector avec un tableau point de vue C (char[]). j'a recherche dans une liste chainée [ par sossouha ] salut, J'ai à faire le recherche d'un caractère dans une liste chainée en langage C. voici la structure que j'utilise typedef struct arc { char va liste chainée [ par rastatouin ] en ce qui concerne la liste chainée, quelqu'un aurai un exemple bien expliquer concernant sa creation, l'ajout, la modif, laffiche, le tri svp STL et C++ [ par tanguy_laverdure ] Bonjour, Quelqu'un saurait me dire comment choisir entre les list, vector, map et deque de la STL.Je croix comprendre que les temps d'acces sont a peu liste chainée: type file d'attente [ par cunbreizh ] MAIDER! MAIDER!Votre texte ICIVotre texte ICIdébutant dans la prog en C. Je cherche à programmer de la manière la plus simple et basic possible une st


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,827 sec (3)

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