11.3.3. Inserarea unui nod intr-o lista circulara simplu inlantuita (LCSI)
2020/03/05 in Programare in C
Consideram doua operatii de inserare a unui nod intr-o LCSI:
- inserarea unui nod inaintea unuia precizat printr-o cheie numerica de tip int;
- inserarea unui nod dupa un nod precizat printr-o cheie numerica de tip int.
Se pot defini si alte functii, similare cu cele prezentate in continuare.
11.3.3.1. Inserarea unui nod inaintea unuia precizat printr-o cheie numerica de tip int
Nodurile listei au tipul TNOD indicat in paragraful 11.3.2.
TNOD *cinici(int c) {
/* - inserarea unui nod inaintea unuia precizat printr-o cheie numerica de tip int;
- returneaza pointerul spre nodul inserat, sau 0 daca inserarea nu are loc. */
extern TNOD *ptrnod;
TNOD *p, *q, *q1;
int n;
if (ptrnod == 0)
return 0; /* lista vida */
q = ptrnod;
do {
q1 = q;
q = q -> urm;
if (q -> cheie == c)
break; /* s-a gasit nodul inaintea caruia se va face inserarea */
} while (q != ptrnod);
if (q -> cheie != c) {
printf("nu exista un nod de cheie = %d\n", c);
return 0; /* nu s-a facut nicio inserare */
}
/* rezerva zona pentru nod si incarca datele in nodul respectiv */
n = sizeof(TNOD);
if (((p = (TNOD *)malloc(n)) != 0) && (incnod(p) == 1)) {
q1 -> urm = p;
p -> urm = q;
return p;
}
if (p == 0) {
printf("memorie insuficienta\n");
exit(1);
}
elibnod(p);
return 0;
}
11.3.3.2. Inserarea unui nod dupa un nod precizat printr-o cheie numerica de tip int
Tipul TNOD se defineste ca in paragraful 11.3.2.
TNOD *cindci(int c) {
/* - inserarea unui nod dupa un nod precizat printr-o cheie numerica de tip int; */
extern TNOD *ptrnod;
TNOD *p, *q;
int n;
if (ptrnod == 0)
return 0; /* lista vida */
q = ptrnod;
do {
if (q -> cheie == c)
break;
q = q -> urm;
} while (q != ptrnod);
if (q -> cheie != c) {
printf("nu exista un nod de cheie = %d\n", c);
return 0; /* nu s-a facut nicio inserare */
}
/* se face inserarea dupa nodul spre care pointeaza q */
n = sizeof(TNOD);
if (((p = (TNOD *)malloc(n)) != 0) && (incnod(p) == 1)) {
p -> urm = q -> urm;
q -> urm = p;
return p;
}
if (p == 0) {
printf("memorie insuficienta\n");
exit(1);
}
elibnod(p);
return 0;
}