Tableau de listes chainées
Fermé
zarganomi
Messages postés
30
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
13 juillet 2014
-
4 juil. 2014 à 22:06
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 21 juil. 2014 à 14:13
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 21 juil. 2014 à 14:13
A voir également:
- Afficher une liste en c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Afficher mot de passe wifi android - Guide
- Liste de diffusion whatsapp - Guide
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
6 réponses
yougy2
Messages postés
444
Date d'inscription
jeudi 19 novembre 2009
Statut
Membre
Dernière intervention
11 avril 2016
126
4 juil. 2014 à 22:49
4 juil. 2014 à 22:49
Bonjour, qu'entends-tu par une liste chainée d'entiers ?
zarganomi
Messages postés
30
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
13 juillet 2014
6 juil. 2014 à 01:15
6 juil. 2014 à 01:15
c à dire un tableau comme suit:
zarganomi
Messages postés
30
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
13 juillet 2014
7 juil. 2014 à 01:53
7 juil. 2014 à 01:53
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
zarganomi
Messages postés
30
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
13 juillet 2014
Modifié par zarganomi le 11/07/2014 à 23:55
Modifié par zarganomi le 11/07/2014 à 23:55
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;
}
}
zarganomi
Messages postés
30
Date d'inscription
mercredi 11 juin 2014
Statut
Membre
Dernière intervention
13 juillet 2014
Modifié par zarganomi le 13/07/2014 à 02:42
Modifié par zarganomi le 13/07/2014 à 02:42
gravgun, Flexy4, yougy2, pouvez vous m'aider SVP ? j'ai vérifié et je n'ai pas détecté ou est l'erreur dans les fonctions !
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
18 juil. 2014 à 14:22
18 juil. 2014 à 14:22
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 ); }
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 226
21 juil. 2014 à 11:16
21 juil. 2014 à 11:16
Tu est moins a coté de la plaque que tu ne le penses: il a dit C++ mais n'utilise rien des conteneurs de la STL et préfère implémenter sa liste lui même (donc bugs garantis ;) ), de même son code n'utilise pas grandement les fonctionnalités du C++
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
21 juil. 2014 à 14:13
21 juil. 2014 à 14:13
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
4 juil. 2014 à 22:56