-6
votes

Comment reconnaître la signification d'une fonction de liste liée en C ++

Je suis actuellement coincé sur certaines fonctions opérant sur des listes associées à une structure en C ++.

Je suis censé savoir quelles sont ces fonctions sans compiler, mais je ne peux pas sembler avoir compris la théorie derrière elle complètement, car mes suppositions sont toutes trop génériques. P>

y a-t-il un moyen de Devinez la raison derrière l'existence de ces fonctions simplement en les regardant? Et que font-ils? P>

aussi, que se passera-t-il si j'appelle Q (LA, LB) si LA = (2, 3, 4, 5, 1, 6) et LB = (3, 4 , 5)? P>

bool u(List l, int x) {
  if (l=nullptr) return false;
  if (l->info == x) return true;
  return u(l->next, x);
}

void v(List& l, int x) {
  List tmp = new (cell);
  tmp->info = x;
  tmp -> next = l;
  l = tmp;
}

List q(List l1, List l2) {
  List aux = nullptr;
  while (l1!=nullptr) {
    if (!u(l2,l1->info)) v(aux,l1->info);
    l1=l1->next;
  }
  return aux;
}


4 commentaires

Bien sûr, il y a une manière non seulement "de deviner la raison de la présente activité de la fonction juste en les regardant", mais de le déterminer de manière concluante. Cela se fait en lisant chaque code de la fonction, en l'analysant et en déterminant quelle est la fonction. Par exemple, si la seule chose que la fonction contient est a = b; Vous pouvez conclure fièrement que l'objectif de la fonction est d'attribuer B à A . De même, en examinant le code de chaque fonction, on peut facilement déterminer ce qu'il fait. Toutes ces fonctions sont des opérations de liste liées de base et ne sont pas très compliquées.


u va toujours planter comme il définit l sur nullptr et invitionnellement latérérences il.


Vous pouvez essayer de dessiner les listes sur le papier à gratter ou un tableau blanc, puis tracez le code. Notez que u utilise la récursion pour traverser la liste. q Utilise une itération à la place, et il utilise les deux u et v . Une fois que vous comprenez ce que ces fonctions font, compréhension q devrait être assez simple.


@Botje: Très bien. Je pense que cela est clairement destiné à être == au lieu de = .


3 Réponses :


0
votes

La fonction xxx

vérifie si la liste l contient la valeur x dans le champ info . La fonction xxx

ajoute la valeur x à la liste l . La fonction xxx

vérifie chaque valeur dans la liste l1 s'il s'agit également d'un élément de la liste l2 . Si la valeur est élément de la liste l2 , la valeur est ajoutée à la liste AUX . La liste AUX est renvoyée.

Il y a des erreurs dans le code. La ligne xxx

ne se compare pas mais assigne. AUX est un pointeur sur le dernier élément de la liste et non à la tête.


2 commentaires

Cela ne répond pas à la question qui n'était pas "quelles sont ces fonctions?", Mais "Comment reconnaître ce qu'ils font?"


Plus que cela, c'est une mauvaise question et de mauvaises questions ne doivent pas être récompensées par des réponses.



0
votes

Commençons par la première fonction xxx

la touche consiste à comprendre le type probable de la liste . De l'expérience avec des listes liées et du code, il semble que nous ayons quelque chose comme xxx

ainsi, u () prend une liste l et une valeur x . Si la liste dirigée par l est vide ( l == nullptr ), il renvoie false . Sinon, le nœud info est égal à x il renvoie vrai . Sinon, il s'appelle de manière récursive avec L remplacé par l-> suivant .

Ainsi, u (l, x) retourne vrai si et seulement si au moins l'un des nœuds de la liste liée contient la valeur x comme info . Un nom plus approprié pour cette fonction aurait été contient () avec l'implémentation plus simple xxx

Vous pouvez utiliser cette même logique maintenant pour trouver la signification des autres fonctions.


0 commentaires

2
votes

Vous pouvez prendre une conjecture raisonnable quant à ce que ces fonctions pouvaient faire à partir des déclarations.

List (List, List)


0 commentaires