Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Lista liniara dublu inlantuita
O lista liniara dublu inlantuita are o structura de forma :
NULL |
inreg |
adr |
adr |
inreg |
adr |
adrn |
inregn |
NULL |
||||
adr |
adr |
adrn | ||||||||||
unde :
adr , adr , , adrn reprezinta adresele din memorie a n inregistrari;
inreg , inreg , , inregn reprezinta informatiile utile din cele n inregistrari.
Primul element din lista, la campul de adresa-stanga, si ultimul element din lista, respectiv, la campul de adresa-dreapta, contin cuvantul cheie NULL.
Operatiile care se pot face cu o lista dublu inlantuita sunt :
crearea listei;
adaugarea unei inregistrari la stanga listei;
adaugarea unei inregistrari la dreapta listei;
adaugarea unei inregistrari in interiorul listei (inserare);
afisarea listei de la stanga la dreapta;
afisarea listei de la dreapta la stanga;
modificarea unei inregistrari;
stergerea unei inregistrari.
In continuare, se prezinta programul lista_dublu_inlantuita care permite crearea unei liste si efectuarea de operatii cu aceasta.
/* Lista dublu inlantuita */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct nod_lista
*p, *u ;
nod_lista *creare_lista( void )
void tiparire_normala(void)
}
void tiparire_inversa(void)
}
nod_lista *adaug_dr(void)
nod_lista *adaug_stg(void)
void inserare(void)
}
while (!ok);
printf('Nr inregistrare adaugata:');
scanf('%d',&n);
adaug=(nod_lista *)malloc(sizeof(nod_lista));
adaug->nr=n;
adaug->adr_stg=c;
adaug->adr_dr=c->adr_dr;
c->adr_dr=adaug;
adaug->adr_dr->adr_stg=adaug;
}
void modif_inregistrare(void)
}
while (!ok);
printf('Nr nou=');scanf('%d',&n);
c->nr=n;
}
void sterge_nod(void)
}
while (!ok);
c->adr_stg->adr_dr=c->adr_dr;
c->adr_dr->adr_stg=c->adr_stg;
if (c == u) u=c->adr_stg;
if (c == p) p=c->adr_dr;
free(c);
}
void main(void)
else
break;
default: printf('nNumar
necorespunzator!');
getch();
}
}
while (!stop);
}
Politica de confidentialitate |
Copyright © 2024 - Toate drepturile rezervate