A voir également:
- Liste en c++
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
- Liste site streaming illégal - Accueil - Services en ligne
6 réponses
Bonjour, qu'entends-tu par une liste chainée d'entiers ?
ElementW
Messages postés
4814
Date d'inscription
Statut
Contributeur
Dernière intervention
1 223
vous connaissez pas comment faire ça ? pouvez vous me montrer comment coder la première case et l'afficher ? si vous avez du temps
Je pense que le mieux est de faire une liste de pointeur vers des listes.
Par exemple :
std::list<std::list<int> *>
Je ne sais pas si std::list est le conteneur de la std qui te conviens mais tu vois l'idée comme ça.
Par exemple :
std::list<std::list<int> *>
Je ne sais pas si std::list est le conteneur de la std qui te conviens mais tu vois l'idée comme ça.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir SVP, j'ai écrit ce code (tableau de liste chaînées) pour un exemple d'un tableau statique de de taille 5 dont chaque case contient une liste chaînée de taille 2, dont le but que le programme me donne ça lors de l'execution:
1. remplir et afficher le tableau initialisé de liste.
2. remplir et afficher le tableau de liste après ajout.
1 // càd si je choisi 1
initialiser les différentes case:3
initialiser les différentes case:4
initialiser les différentes case:7
initialiser les différentes case:9
initialiser les différentes case:6
afficher:
3
4
7
9
6
2 // càd si je choisi 2
ajouter autres elements dans chaque celleule(liste) du tableau:5
ajouter autres elements dans chaque celleule(liste) du tableau:2
ajouter autres elements dans chaque celleule(liste) du tableau:1
ajouter autres elements dans chaque celleule(liste) du tableau:8
ajouter autres elements dans chaque celleule(liste) du tableau:4
afficher
3 5
4 2
7 1
9 8
6 4
Je teste mon code et je le corrige jusqu'à qu'il ne contient aucune erreur, mais nz je comprend pas pourquoi tous les fonctions d'initialisation, ajout et affichage ne fonctionnent pas! qui peut m'aider SVP !
1. remplir et afficher le tableau initialisé de liste.
2. remplir et afficher le tableau de liste après ajout.
1 // càd si je choisi 1
initialiser les différentes case:3
initialiser les différentes case:4
initialiser les différentes case:7
initialiser les différentes case:9
initialiser les différentes case:6
afficher:
3
4
7
9
6
2 // càd si je choisi 2
ajouter autres elements dans chaque celleule(liste) du tableau:5
ajouter autres elements dans chaque celleule(liste) du tableau:2
ajouter autres elements dans chaque celleule(liste) du tableau:1
ajouter autres elements dans chaque celleule(liste) du tableau:8
ajouter autres elements dans chaque celleule(liste) du tableau:4
afficher
3 5
4 2
7 1
9 8
6 4
Je teste mon code et je le corrige jusqu'à qu'il ne contient aucune erreur, mais nz je comprend pas pourquoi tous les fonctions d'initialisation, ajout et affichage ne fonctionnent pas! qui peut m'aider SVP !
#include <iostream>
using namespace std;
struct Node{
int num;
Node *nextNode;
Node *prevNode;
};
void initializeLists(Node* head, Node* Arraylist[], int MAX_INDEX);
void addNode(int num, int arrayIndex, Node* Arraylist[], int countArray[]);
void affiche_apres_initialisation (Node *p, Node* Arraylist[]);
void affiche_apres_ajout (Node *ptr, Node* Arraylist[]);
int main()
{
int MAX_INDEX(5);
Node* Arraylist[5];
int num;
int arrayIndex;
int countArray [2]; // taille de chaque list.
Node* head ;
head = NULL;
while (1){
int n;
cout << "1. remplir et afficher le tableau initialisé de liste." << endl;
cout << "2. remplir et afficher le tableau de liste apres ajout." << endl;
cin >> n;
if(n==1){
cout << "initialiser les differentes case: ";
cin >> num;
initializeLists( head, Arraylist, MAX_INDEX);
cout << "afficher:";
affiche_apres_initialisation (head, Arraylist);
}
else if (n==2){
cout << "ajouter autres elements dans chaque celleule(liste) du tableau: ";
cin >> Arraylist[arrayIndex]->num;
addNode( num, arrayIndex, Arraylist, countArray);
cout << "afficher:";
affiche_apres_ajout (head, Arraylist);
}
else{
cout << "BY"<< endl;
break;
}
return 0;
}
}
void initializeLists(Node* head, Node* Arraylist[], int MAX_INDEX) {
int idx;
int num;
for (idx = 0; idx < MAX_INDEX; idx++) { //pour chaque liste du tableau.
Node* newNode = new Node; //créer un nouveau noeud.
Arraylist[idx] = newNode; //affecter ce noeud à un indice du tableau.
head = newNode; //affecter ce noeud à la tete de la liste.
newNode->nextNode = NULL; //initialiser à null.
newNode->prevNode = NULL; //initialiser à null.
newNode->num = num; //donner la valeur initial de la tete de chaque liste.
}
return;
}
void addNode(int num, int arrayIndex, Node* Arraylist[], int countArray[]) {
int MAX_INDEX;
for (arrayIndex = 0; arrayIndex < MAX_INDEX; arrayIndex++) {
Node* newNode = new Node; //créer un nouveau noeud.
Node* head = Arraylist[arrayIndex]; //affecter la tete de la liste à chaque case du tableau
if (head->num == NULL) {
head->num = num;
}
else {
newNode->nextNode = head->nextNode; // inserer un noeud à une liste.
head->nextNode = newNode;
newNode->prevNode = head;
if (newNode->nextNode != NULL) {
newNode->nextNode->nextNode = newNode;
}
newNode->num = num;
}
countArray[arrayIndex]++; //incrementer le compteur de la liste.
}
return;
}
void affiche_apres_initialisation (Node *p, Node* Arraylist[])
{
int MAX_INDEX(5);
for (int idx = 0; idx < MAX_INDEX; idx++){
while (p != NULL){
cout << Arraylist[idx]->num << endl ;
p = p->nextNode;
p = p->prevNode;
}
}
}
void affiche_apres_ajout (Node *ptr, Node* Arraylist[])
{
int arrayIndex (5);
while (ptr != NULL){
cout << ptr->num << endl << endl;
Arraylist[arrayIndex]->nextNode;
ptr = ptr->nextNode;
ptr = ptr->prevNode;
}
}
Bonjour je vais probablement faire du hors sujet sur un forum C++ je m'en excuse d'avance mais, comme je vois qu'il a du mal à comprendre certains mécanismes, je vais donc proposer une approche en langage C pour représenter à peu près son schéma et surtout son exercice.
Ton conteneur doit jouer le rôle d'un tableau de pointeur, en résumé c'est un moyen économique de référencer tout l'ensemble de tes listes en une seule structure afin de les manipule aisément.
Pour que tu puisses comprendre ce que j'avance je poste le code en langage C ci-dessous
bien entendu j'invite les expert à me corrigé si j'ai émis des erreurs.
Cordialement
Ton conteneur doit jouer le rôle d'un tableau de pointeur, en résumé c'est un moyen économique de référencer tout l'ensemble de tes listes en une seule structure afin de les manipule aisément.
Pour que tu puisses comprendre ce que j'avance je poste le code en langage C ci-dessous
bien entendu j'invite les expert à me corrigé si j'ai émis des erreurs.
Cordialement
#include <stdio.h> #include <stdlib.h> /* Macro Bool */ typedef enum{false,true}bool; /*** * Structure Simple d'une Pile ***/ typedef struct _Pile{ unsigned int iVal; struct _Pile *pPrec; }ts_Pile; /*** * Fonction vérification * de la pile ***/ bool f_isEmpty(ts_Pile **pIn){ return ( (*pIn == NULL ) ? true : false ); } /*** * Fonction qui ajoute un élement * dans la Pile ***/ void f_addPile(ts_Pile **pIn, unsigned int const iVal){ ts_Pile *tmp = malloc( sizeof( ts_Pile ) ); if( !tmp ){ perror( "Erreur interne d'allocation\n" ); exit( 1 ); } /* Ajout de l'élément */ tmp->iVal = iVal; tmp->pPrec = *pIn; *pIn = tmp; } /*** * fonction qui retire un élement * de la Pile ***/ unsigned const int f_PopPile(ts_Pile **pIn){ unsigned int iVal = 0; ts_Pile *tmp = NULL; if( !*pIn ) return ( -1 ); tmp = (*pIn)->pPrec; iVal = (*pIn)->iVal; free( *pIn ); *pIn = tmp; return ( iVal ); } /*** * Fonction qui libère * la mémoire allouer ***/ void f_FreeAlloc( ts_Pile **pIn){ ts_Pile *tmp = NULL; if( f_isEmpty( pIn ) != true ){ while( *pIn ){ tmp = (*pIn)->pPrec; free ( *pIn ); *pIn = tmp; } *pIn = NULL; tmp = NULL; } } /*** * Fonction principale ***/ int main( void ) { int i = 0; /* Déclaration des piles & initialisation */ ts_Pile *pile_1 = NULL; /* Pile (1) */ ts_Pile *pile_2 = NULL; /* Pile (2) */ ts_Pile *pile_3 = NULL; /* Pile (3) */ /* tableau de Pointeur */ ts_Pile (*pTabAddr[3]) = { &pile_1, &pile_2, &pile_3 }; /* Ajouts des valeurs à la pile */ for(; i < 20 ; i++){ f_addPile( pTabAddr[0], i ); f_addPile( pTabAddr[1], (i*2) ); f_addPile( pTabAddr[2], (i*4) ); } /* Affichage des Piles */ for(i = 0; i < 20 ; i++) printf("Pile (1)\t= %d\n", f_PopPile(&pile_1) ); for(i = 0; i < 20 ; i++) printf("Pile (2)\t= %d\n", f_PopPile(&pile_2) ); for(i = 0; i < 20 ; i++) printf("Pile (3)\t= %d\n", f_PopPile(&pile_3) ); /* Désalocation mémoire */ f_FreeAlloc( pTabAddr[0] ); f_FreeAlloc( pTabAddr[1] ); f_FreeAlloc( pTabAddr[2] ); return ( 0 ); }
Oui, mais bon il a un peu du mal donc j'ai opté pour le langage C et on plus je me suis littéralement cracké (https://forums.commentcamarche.net/forum/affich-30519286-ecrasement-d-adresse#3) sur mon premier poste j'avais des doutes sur mon tableau de pointeur sans compter que j'ai été incapable d'installer un compilateur sur MAC (-_-)
Cependant, s'il n'a pas compris les principes des conteneur et pointeur il n'avancera pas tellement
à bientôt
Cependant, s'il n'a pas compris les principes des conteneur et pointeur il n'avancera pas tellement
à bientôt