Informatică, întrebare adresată de antoniopacica, 8 ani în urmă

pbinfo problema #3751 FInserareDupaQ

Se consideră o listă liniară dublu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:

struct nod{
int info;
nod * ant,*urm;
};
în care câmpul info memorează un număr întreg, câmpul ant memorează adresa elementului anterior al listei, iar campul urm memorează adresa elementului următor al listei.

Cerința

Să se scrie o funcție C++ cu următorul prototip:
void InserareDupaQ(nod *& prim,nod *& ultim, nod * q,int x);
care adaugă valoarea x după nodului de adresa q al listei pentru care primul element are adresa memorată în pointerul prim si ultimul element are adresa memorata in pointerul ultim.

Restricții și precizări

- numele funcției va fi InserareDupaQ;
- pointerul q poate fi prim si ultim;
- dacă lista nu conține niciun element, pointerul prim si ultim va avea valoarea NULL;
- în toate cazurile, la ieșirea din apel prim va memora adresa primului element al listei, iar ultim va memora adresa ultimului element al listei.

Important

Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Răspunsuri la întrebare

Răspuns de Addriss
1

Răspuns:

void InserareDupaQ(nod* &prim, nod* &ultim, nod* q, int x)

{

nod* newNode = new nod;

newNode->ant = NULL;

newNode->urm = NULL;

newNode->info = x;

nod* traverseNode = prim;

while (traverseNode)

{

 if (traverseNode == q)

 {

  // Cazul 1: q este de fapt primul nod

  if (q == prim)

  {

   prim->urm = newNode;

   newNode->ant = prim;

   newNode->urm = q->urm;

  }

  // Cazul 2: q este de fapt ultimul nod

  else if (q == ultim)

  {

   ultim->urm = newNode;

   newNode->ant = ultim;

   ultim = newNode;

  }

  // Cazul 3: q este la mijloc

  else

  {

   newNode->urm = q->urm;

   q->urm = newNode;

   newNode->ant = q;

  }

  break;

 }

 traverseNode = traverseNode->urm;

}

}

Explicație:


andrei750238: Probabil nu era inclusa biblioteca malloc.h, de asta ai primit eroare.
E recomandat sa folosesti new/delete unde se poate in C++ pentru ca e o varianta mult mai eleganta, cel putin daca ai aceasta posibilitate.
antoniopacica: Da, eu la clasa lucrez cu malloc si cu acesta m-am obisnuit cel mai bine. Nu am invatat inca sa lucrez in C++ cu biblioteca . Lucrez in C cu biblioteca .
antoniopacica: Poate in viitor o sa lucrez cu new si cu delete cum ai zis tu.
antoniopacica: c++ cu biblioteca iostream.h
antoniopacica: c cu biblioteca stdio.h
antoniopacica: scuze ca nu s-a vazut
antoniopacica: cred ca ti-ai dat seama
antoniopacica: c++ daca nu ma insel inseamna si programare pe obiecte , o sa fac mai tarziu prin clasa a 11-a..
andrei750238: Posibil, daca esti la info intensiv.
antoniopacica: Da exact sunt la info intensiv.
Alte întrebări interesante