11.3.4. Stergerea unui nod dintr-o lista circulara simplu inlantuita (LCSI)

2020/03/06 in Programare in C

Functia csnci de mai jos permite stergerea unui nod precizat printr-o cheie de tip int dintr-o LSCI.

In cazul in care variabila ptrnod pointeaza chiar spre nodul care se sterge, convenim ca ptrnod sa pointeze spre nodul precedent celui sters, daca lista nu a devenit vida. In acest ultim caz, lui ptrnod i se atribuie valoarea 0.

Nodurile listei au tipul TNOD indicat in paragraful 11.3.2.

Dupa modelul de mai jos, se pot defini si alte functii pentru a sterge noduri dintr-o LCSI.

void TNOD *csnci(int c) {
/* strege nodul pentru care cheie = c. */
   
   extern TNOD *ptrnod;
   TNOD *p, *p1;
   int n;

   if (ptrnod == 0)
   return; /* lista vida */

   p = ptrnod;
   do {
      p1 = p;
      p = p -> urm;
      if (p -> cheie == c)
         break;
   } while (q != ptrnod);
   
   if (p -> cheie != c) {
      printf("nu exista un nod de cheie = %d\n", c);
      return;
   }
   
   if (p == p -> urm) { /* lista are un singur nod */
      ptrnod = 0;
   }
   else {
      p1 -> urm = p -> urm;
      if (p == ptrnod) /* se sterge nodul spre care pointeaza ptrnod */
         ptrnod = p1;
   }
   elibnod(p);
}

11.3.5. Stergerea unei LCSI