Travailler avec des graphiques en ce moment et jolie sur la création d'une gamme de listes liées (liste d'adjacents), j'ai essayé quelques variations, mais cette erreur a obtenu cette erreur:
[erreur] Aucune correspondance pour 'Opérateur >>' (Types d'opérande sont 'std :: istream {aka stdd :: basic_istream}' et "noeud *") p> blockQuote>
xxx pré> p>
3 Réponses :
Je n'interviendrai que sur l'erreur de compilation que vous avez et non sur votre besoin de créer une liste liée car votre demande n'est pas claire.
Vous devez surcharger l'opérateur >> code> pour votre classe avant de pouvoir l'utiliser:
Seul le nœud et le graphique (Listik) sont définis.
sur cette étape, l'erreur peut être corrigée: p>
#include <iostream> using namespace std; class node { public: int data; node* next; node (int x) { data = x; next = NULL; } }; void SS_in () { int nver; std::cout << "vvedite kolvo vershin"; std::cin >> nver; node** listik = new node * [nver]; int tempData; for (int i = 0; i < nver; i++) { cout << "V" << i << ": "; cin >> tempData; listik[i] = new node(tempData); } } void main () { SS_in (); }
Ce code: est faux de deux manières. p> 1) 2) puisque Maintenant pour votre vraie question: P> ... Création d'une gamme de listes liées ... p>
blockQuote> N'oubliez pas qu'une liste liée commence par un élément de tête qui est un "pointeur vers un nœud". Donc, pour obtenir une gamme de listes liées, vous avez besoin d'un tableau de "pointeur sur noeud". P> par exemple: p> sera un tableau avec 20 "pointeur au nœud". Et donc quelque chose que vous pouvez utiliser comme une matrice de 20 liste liée. P> ou dans un style plus c ++ comme style: p> ou avec une allocation dynamique afin que Vous pouvez contrôler la taille de la matrice à l'exécution: p> Lors de la lecture de données de l'utilisateur, vous aurez besoin de deux informations: p> 1) la valeur de données pour que le nœud soit ajouté p> 2) lequel des énumérations liées (par exemple 20) pour ajouter le nœud à. p> comme: p> listik code> est ininitialisé et par conséquent, donc
listik [i] code>. En d'autres termes - vous essayez de lire en mémoire que votre programme (le plus probable) ne possède pas. P>
listik code> est un "pointeur sur le pointeur sur le nœud" ,
listik [i] code> est un "pointeur au nœud". Demander à un utilisateur de taper une valeur de pointeur est sans signification et qui vous a chanceux - vous avez une erreur de compilation qui vous dise que. P>
Comment vous attendez-vous à pouvoir lire dans un
noeud * code>?
Vous essayez de lire dans un pointeur. Il serait étrange de s'attendre à ce que l'utilisateur tapisse une adresse mémoire!
Quel est le noeud
** listik; code> supposé d'être? Utilisez
std :: vecteur code> pour une matrice de taille dynamique de pointeurs et
std :: vecteur> code> pour un tableau 2D. BTW dans votre code, vous ne créez jamais un seul noeud
code>. Tout ce que vous avez, c'est des pointeurs
Je recommande de s'asseoir avec un stylo et du papier et de tirer de la manière dont vous souhaitez que la matrice de listes liées soit représentée en mémoire.
Les pointeurs bien sont mon point faible. Je n'ai pas encore lu sur les vecteurs, je voudrais le faire en utilisant des pointeurs (pour devenir mieux en eux au lieu de mélanger des vecteurs). Fondamentalement Cin >> Listik [I] signifie que j'essaie de taper une adresse, oui? Mais je dois utiliser ** pointeur, car j'ai un tableau de listes, non?
Holtez maintenant tout ce qui est délicat avec des pointeurs en ce moment et assurez-vous de bien comprendre l'allocation dynamique. Une fois que vous avez compris que vous serez dans un meilleur endroit pour lutter contre des objets avec des pointeurs.
Je le vois comme ça ibb.co/fdk3nqn
L'étape la plus importante pour devenir meilleur avec les pointeurs est de savoir comment les éviter. Utilisez le bon outil pour le bon travail. C'est un peu triste, mais trouver un bon travail pour un pointeur cru est vraiment difficile de nos jours
S'il s'agit d'un exercice d'apprentissage, alors plus de pouvoir, mais si vous souhaitez simplement mettre en œuvre sans avoir à vous soucier des tripes, envisagez d'utiliser le tableau code> stl code> (ou
vecteur code > Pour dimensionnement dynamique) et
forward_list code> (pour une liste individuelle) ou
Liste code> (pour une liste doublement liée).
@Stanislav sur le dessin qui est assez proche de ce que vous voulez, mais ce sera un identifiant un peu plus descriptif, vous incluez la manière dont les listes liées sont liées ensemble. Ce petit bit, l'obtention et la maintenance de la liaison valable, va probablement vous prendre plus de travail pour obtenir directement dans le code que toute autre chose dans le programme.