0
votes

Mise en œuvre d'une gamme de listes liées

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 *") xxx


10 commentaires

Comment vous attendez-vous à pouvoir lire dans un noeud * ?


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; supposé d'être? Utilisez std :: vecteur pour une matrice de taille dynamique de pointeurs et std :: vecteur > pour un tableau 2D. BTW dans votre code, vous ne créez jamais un seul noeud . 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 stl (ou vecteur Pour dimensionnement dynamique) et forward_list (pour une liste individuelle) ou Liste (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.


3 Réponses :


1
votes

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 >> pour votre classe avant de pouvoir l'utiliser: xxx


0 commentaires

0
votes

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 ();
}


0 commentaires

0
votes

Ce code: xxx

est faux de deux manières.

1) listik est ininitialisé et par conséquent, donc listik [i] . En d'autres termes - vous essayez de lire en mémoire que votre programme (le plus probable) ne possède pas.

2) puisque listik est un "pointeur sur le pointeur sur le nœud" , listik [i] 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.

Maintenant pour votre vraie question:

... Création d'une gamme de listes liées ...

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".

par exemple: xxx

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.

ou dans un style plus c ++ comme style: xxx

ou avec une allocation dynamique afin que Vous pouvez contrôler la taille de la matrice à l'exécution: xxx

Lors de la lecture de données de l'utilisateur, vous aurez besoin de deux informations:

1) la valeur de données pour que le nœud soit ajouté

2) lequel des énumérations liées (par exemple 20) pour ajouter le nœud à.

comme: xxx


0 commentaires