11.4.1. Crearea unei liste dublu inlantuite (LDI)

2020/03/09 in Programare in C

Definim mai jos functia dcrelist utilizata pentru a crea o LDI.
Ea este analoaga cu functia crelist definita la paragraful 11.1.1.

Functiile incnod si elibnod au aceeasi semnificatie si utilizare ca in cazul functiei crelist.

int dcrelist() {
/* - creaza o lista dublu inlantuita; 
   - returneaza:
      -  0 - la eroare;
      - -1 - creare normala. */
  extern TNOD *prim, *ultim;
  int i, n;
  TNOD *p;

  n = sizeof(TNOD);
  prim = ultim = 0;

  while (((p = (TNOD *)malloc(n)) != 0) && ((i = incnod(p)) == 1))
    if (prim == 0) {
      prim = ultim = p;
      p -> prec = p -> urm = 0;
  }
  else {
    ultim -> urm = p;
    p -> prec = ultim;
    p -> urm = 0;
    ultim = p;
  }

  if (p == 0) {
    printf("memorie insuficienta\n");
    exit(1);
  }
  elibnod(p);
  return i;
}

11.4.2. Inserarea unui nod LDI