Liste simplu inlantuite //program care realizeaza o lista simplu inlantuita ale carei noduri sunt campurile Cod, Cantitate,Pret si Valorea(pret*cantitate)
#include #include #include struct nod { float cod, cant, pret; struct nod* next; };
nod
Cod Cantitate pret next
void crearelista(nod **cap, int n) { nod *p, *q; float cod1, cant1, pret1; printf("\n"); printf("Codul="); scanf("%f", &cod1); printf("Cantitatea="); scanf("%f", &cant1); printf("Pretul="); scanf("%f", &pret1); (*cap) = (nod*)malloc(sizeof(nod)); (*cap)->cod = cod1; (*cap)->cant = cant1; (*cap)->pret = pret1; (*cap)->next = NULL; p = (*cap); for (int i = 1; i
next este pointerul care retine adresa unei structuri de tip nod
q->cod = cod1; q->cant = cant1; q->pret = pret1; q->next = NULL; p->next = q; p = q; } }
Cod=1 Cod1 Cantitate=20 Pret=5
Cant1
Pret1
**cap
*cap
0x00979b88
Cod1 (1) Cant1 (20) Pret1 (5) next
NULL
Primul element al listei **cap
*cap
*p 0x00979b88
Cod1 (1) Cant1 (20) Pret1 (5) next
Adaugarea urmatorului nod:
Cod1
Cod=1 Cantitate=20
Cant1
Pret=5 Cod=2
Pret1
Cantitate=25 Pret=10
0x00979b88
*q
Cod1 (2) Cant1 (25) Pret1 (10) next
NULL
Cum se face legatura dintre cele doua noduri ale listei? **cap
0x0018fad8
*cap
*p
Cod1 (1) Cant1 (20) Pret1 (5) next
*q
*p
Cod1 (2) Cant1 (25) Pret1 (10) next
NULL
void traversare(nod *cap) { nod *p; float val = 0; printf("\nCod Cantitate Pret Valoare"); p = cap; while (p) //p nu este NULL { printf("\n%5.2f %5.2f %5.2f %5.2f", p->cod, p->cant, p->pret, (p>cant)*(p->pret)); val += (p->cant)*(p->pret); p = p->next; } printf("\nValoare totala=%5.2f", val); }
int main(void) { nod *cap; int n; printf("Numar produse="); scanf("%d", &n); crearelista(&cap, n); traversare(cap); _getch(); return 0; }
1. Creati o lista simplu inlantuita care sa contina campurile :Cod_student, Nota_romana, Nota_mate,Nota_fizica si calculeaza media de Bac pt fiecare student.
#include #include #include //creez un nod de tip struct care contine campurile: Cod_student, Nota_romana, Nota_mate, Nota_fizica struct nod { int Cod_student; float Nota_romana; float Nota_mate; float Nota_fizica; struct nod* next; }; //creez lista simplu inlantuita void crearelista(nod **cap, int n) { nod *p, *q; int Cod1; float Nota_rom1, Nota_mate1, Nota_fiz1; printf("\nCod_student="); scanf("%d", &Cod1); printf("\nNota_romana="); scanf("%f", &Nota_rom1); printf("\nNota_mate="); scanf("%f", &Nota_mate1); printf("\nNota_fizica="); scanf("%f", &Nota_fiz1); (*cap) = (nod*)malloc(sizeof(nod)); (*cap)->Cod_student = Cod1; (*cap)->Nota_romana = Nota_rom1; (*cap)->Nota_mate = Nota_mate1; (*cap)->Nota_fizica = Nota_fiz1; (*cap)->next = NULL; p = (*cap); for (int i = 1; i < n; i++) { q = (nod*)malloc(sizeof(nod)); printf("\nCod_student="); scanf("%d", &Cod1); printf("\nNota_romana="); scanf("%f", &Nota_rom1); printf("\nNota_mate="); scanf("%f", &Nota_mate1); printf("\nNota_fizica="); scanf("%f", &Nota_fiz1); q->Cod_student = Cod1; q->Nota_romana = Nota_rom1; q->Nota_mate = Nota_mate1; q->Nota_fizica = Nota_fiz1; q->next = NULL; p->next = q; p = q; }
} void traversarelista(nod *cap) { nod *p; printf("\nCod_student Nota_romana Nota_mate Nota_fizica Media_BAC"); printf("\n"); p = cap; while (p) { printf("\n%d %5.2f %5.2f %5.2f %5.2f", p->Cod_student, p>Nota_romana, p->Nota_mate, p->Nota_fizica,((p->Nota_romana)+(p->Nota_mate)+(p>Nota_fizica))/3); p = p->next; } } void main() { int n; nod *cap; printf("Introduceti numarul de studenti="); scanf("%d", &n); crearelista(&cap, n); traversarelista(cap); _getch(); }
#include #include #include struct produs { int cod; float cantitate; float pret; };
nod
struct nod { produs inf; struct nod* next; };
inf next
cod cant pret
nod* crearelista(nod *cap, int n) { nod *p, *q; cap = (nod*)malloc(sizeof(nod)); printf("\n"); printf("Codul="); scanf("%d", &cap->inf.cod); printf("Cantitatea="); scanf("%f", &cap->inf.cantitate); printf("Pretul="); scanf("%f", &cap->inf.pret); cap->next = NULL; p = cap;
*cap
*p
inf next
cod cant pret
NULL
NULL
for (int i = 1; iinf.cod); printf("Cantitatea="); scanf("%f", &q->inf.cantitate); printf("Pretul="); scanf("%f", &q->inf.pret); q->next = NULL; p->next = q; p = q; } return cap; }
*q
inf next
NULL
cod cant pret
*cap
inf next
*q
*p
cod inf
pret
next
cant cod cant pret
NULL
void traversare(nod *cap) { nod *p; float val = 0; printf("\nCod Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %5.2f %5.2f %5.2f", p->inf.cod, p->inf.cantitate, p>inf.pret, (p->inf.cantitate)*(p->inf.pret)); val += (p->inf.cantitate)*(p->inf.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); } void main() { nod *cap = NULL; int n; printf("Numar produse="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); _getch(); }
#include #include #include //structura de tip student struct student { int Cod_student;
float Nota_romana; float Nota_mate; float Nota_fizica; }; //nod struct nod { student info; struct nod *next; }; //creare lista nod* crearelista(nod *cap, int n) { nod *p, *q; cap = (nod*)malloc(sizeof(nod)); printf("Cod_student="); scanf("%d", &cap->info.Cod_student); printf("Nota_romana="); scanf("%f", &cap->info.Nota_romana); printf("Nota_mate="); scanf("%f", &cap->info.Nota_mate); printf("Nota_fizica="); scanf("%f", &cap->info.Nota_fizica); cap->next = NULL; p = cap; for (int i = 1; i < n; i++) { q = (nod*)malloc(sizeof(nod)); printf("Cod_student="); scanf("%d", &q->info.Cod_student); printf("Nota_romana="); scanf("%f", &q->info.Nota_romana); printf("Nota_mate="); scanf("%f", &q->info.Nota_mate); printf("Nota_fizica="); scanf("%f", &q->info.Nota_fizica); q->next = NULL; p->next = q; p = q; } return cap; } void traversare(nod *cap) { nod *p; printf("\nCod_student Nota_romana Nota_mate Nota_fizica Medie_BAC"); printf("\n"); p = cap; while (p) { printf("\n%d %5.2f %5.2f %5.2f %5.2f", p->info.Cod_student, p>info.Nota_romana, p->info.Nota_mate,p->info.Nota_fizica,((p->info.Nota_mate)+(p>info.Nota_mate)+(p->info.Nota_fizica))/3 ); p = p->next; }
} void main() { int n; nod *cap=NULL; printf("Introduceti numarul de studenti="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); _getch(); }
//program care calculeaza valoarea pt fiecare produs si valoarea totala, iar articolul are campurile cod, denumire, cantitate si pret.(lista simplu inlantuita) #include #include #include #include struct produs { //4x4 = 16B int cod; char *denumire; float cantitate; float pret; }; struct nod { produs inf;
struct nod* next; }; nod* crearelista(nod *cap, int n) { nod *p, *q; char buffer[20]; cap=(nod*)malloc(sizeof(nod)); printf("\n"); printf("Codul="); scanf("%d",&cap->inf.cod); printf("Denumirea="); scanf("%s",buffer); cap->inf.denumire=(char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(cap->inf.denumire,buffer); printf("Cantitatea="); scanf("%f",&cap->inf.cantitate); printf("Pretul="); scanf("%f",&cap->inf.pret); cap->next=NULL; p=cap; for (int i=1;iinf.cod); printf("Denumirea="); scanf("%s",buffer); q->inf.denumire=(char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(q->inf.denumire,buffer); printf("Cantitatea="); scanf("%f",&q->inf.cantitate); printf("Pretul="); scanf("%f",&q->inf.pret); q->next=NULL; p->next=q; p=q; } return cap; } void traversare(nod *cap) { nod *p; float val=0; printf("\nCod Denumire Cantitate Pret Valoare"); p=cap; while(p) { printf("\n%d %s %5.2f %5.2f %5.2f",p->inf.cod, p->inf.denumire, p>inf.cantitate, p->inf.pret,(p->inf.cantitate)*(p->inf.pret)); val+=(p->inf.cantitate)*(p->inf.pret); p=p->next; } printf("\nValoare totala=%5.2f",val); } void main() { nod *cap=NULL; int n; printf("Numar produse=");
scanf("%d",&n); cap=crearelista(cap,n); traversare(cap); getch(); }
#include #include #include #include //structura de tip student struct student { int Cod_student; char *Nume_student; float Nota_romana; float Nota_mate; float Nota_fizica; }; //nod pt articolul student struct nod { student info; struct nod *next; }; //creare lista
nod* crearelista(nod *cap, int n) { nod *p, *q; char buffer[25]; cap = (nod*)malloc(sizeof(nod)); printf("Cod_student="); scanf("%d", &cap->info.Cod_student); printf("Nume_student="); scanf("%s", buffer); cap->info.Nume_student = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); strcpy(cap->info.Nume_student, buffer); printf("Nota_romana="); scanf("%f", &cap->info.Nota_romana); printf("Nota_mate="); scanf("%f", &cap->info.Nota_mate); printf("Nota_fizica="); scanf("%f", &cap->info.Nota_fizica); cap->next = NULL; p = cap; for (int i = 1; i < n; i++) { q = (nod*)malloc(sizeof(nod)); printf("Cod_student="); scanf("%d", &q->info.Cod_student); printf("Nume_student="); scanf("%s", buffer); q->info.Nume_student = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); strcpy(q->info.Nume_student, buffer); printf("Nota_romana="); scanf("%f", &q->info.Nota_romana); printf("Nota_mate="); scanf("%f", &q->info.Nota_mate); printf("Nota_fizica="); scanf("%f", &q->info.Nota_fizica); q->next = NULL; p->next = q; p = q; } return cap; } //traversam articolul student void traversare(nod *cap) { nod *p; printf("\nCod_student Nume_student Nota_romana Nota_mate Nota_fizica Medie_BAC"); printf("\n"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f %5.2f", p->info.Cod_student, p>info.Nume_student, p->info.Nota_romana, p->info.Nota_romana, p->info.Nota_fizica, ((p->info.Nota_romana) + (p->info.Nota_mate) + (p->info.Nota_fizica)) / 3); p = p->next; } } void main() {
nod *cap=NULL; int n; printf("Introduceti numarul de studenti="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); _getch(); }
//lista simplu inlantuita care are campurile cod, denumire, cantitate, pret. In aceasta lista simplu inlantuita se adauga un nod nou si se afiseaza din nou lista
#include #include #include #include struct produs { int cod; char *denumire; float cantitate; float pret; }; struct nod {
produs inf; struct nod* next; }; nod* crearelista(nod *cap, int n) { nod *p, *q; char buffer[20]; cap = (nod*)malloc(sizeof(nod)); printf("\n"); printf("Codul="); scanf("%d", &cap->inf.cod); printf("Denumirea="); scanf("%s", buffer); cap->inf.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(cap->inf.denumire, buffer); printf("Cantitatea="); scanf("%f", &cap->inf.cantitate); printf("Pretul="); scanf("%f", &cap->inf.pret); cap->next = NULL; p = cap; for (int i = 1; iinf.cod); printf("Denumirea="); scanf("%s", buffer); q->inf.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(q->inf.denumire, buffer); printf("Cantitatea="); scanf("%f", &q->inf.cantitate); printf("Pretul="); scanf("%f", &q->inf.pret); q->next = NULL; p->next = q; p = q; } return cap; }
//inseram noul nod la sfarsitul listei, vom avea doua capete pt lista, p copiind adresa la care se afla lista si fiind temporar, pentru ca el va lua pe rand adresa fiecarui nod pana se va pozitiona pe ultimul nod din lista, dupa care se va face legatura intre ultimul nod al listei si nodul nou inserat. void inserare(nod *cap, produs prod) { nod *p; nod *q = (nod*)malloc(sizeof(nod)); //q->inf.cod=prod.cod; //q->inf.denumire=prod.denumire; //q->inf.cantitate=prod.cantitate; //q->inf.pret=prod.pret; q->inf = prod; q->next = NULL; for (p = cap; p->next; p = p->next); p->next = q; } void traversare(nod *cap)
{ nod *p; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", p->inf.cod, p->inf.denumire, p>inf.cantitate, p->inf.pret, (p->inf.cantitate)*(p->inf.pret)); val += (p->inf.cantitate)*(p->inf.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); } void main() { nod *cap = NULL; int n; printf("Numar produse="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); //inseram un nou produs, introducand valori de la tastatura pentru fiecare camp produs pnou; char buffer[20]; printf("\nCodul nou="); scanf("%d", &pnou.cod); printf("Denumirea noua="); scanf("%s", buffer); pnou.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(pnou.denumire, buffer); printf("Cantitatea noua="); scanf("%f", &pnou.cantitate); printf("Pretul nou="); scanf("%f", &pnou.pret);
Cod M
A
Denumire * Cantitate Pret
inserare(cap, pnou); traversare(cap); _getch(); }
Creati o lista simplu inlantuita si inserati un nod nou la inceputul listei. #include #include #include
\n
#include struct produs { int cod; char *denumire; float cantitate; float pret; }; struct nod { produs inf; struct nod* next; }; nod* crearelista(nod *cap, int n) { nod *p, *q; char buffer[20]; cap = (nod*)malloc(sizeof(nod)); printf("\n"); printf("Codul="); scanf("%d", &cap->inf.cod); printf("Denumirea="); scanf("%s", buffer); cap->inf.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(cap->inf.denumire, buffer); printf("Cantitatea="); scanf("%f", &cap->inf.cantitate); printf("Pretul="); scanf("%f", &cap->inf.pret); cap->next = NULL; p = cap; for (int i = 1; iinf.cod); printf("Denumirea="); scanf("%s", buffer); q->inf.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(q->inf.denumire, buffer); printf("Cantitatea="); scanf("%f", &q->inf.cantitate); printf("Pretul="); scanf("%f", &q->inf.pret); q->next = NULL; p->next = q; p = q; } return cap; }
//inseram noul nod la inceputul listei //cream un nod nou in care vom pune informatia introdusa de la tastatura din //programul principal, facem legatura dintre nodul nou creat si capul listei, dupa care noul cap al listei va avea adresa //nodului nou creat si se va returna capul listei nod* inserare(nod *cap, produs prod) {
nod *q; q = (nod*)malloc(sizeof(nod)); //q->inf.cod=prod.cod; //q->inf.denumire=prod.denumire; //q->inf.cantitate=prod.cantitate; //q->inf.pret=prod.pret; q->inf = prod; q->next = cap; cap = q; return cap; } void traversare(nod *cap) { nod *p; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", p->inf.cod, p->inf.denumire, p>inf.cantitate, p->inf.pret, (p->inf.cantitate)*(p->inf.pret)); val += (p->inf.cantitate)*(p->inf.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); } void main() { nod *cap = NULL; int n; printf("Numar produse="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); //inseram un nou produs, introducand valori de la tastatura pentru fiecare camp produs pnou; char buffer[20]; printf("\nCodul nou="); scanf("%d", &pnou.cod); printf("Denumirea noua="); scanf("%s", buffer); pnou.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(pnou.denumire, buffer); printf("Cantitatea noua="); scanf("%f", &pnou.cantitate); printf("Pretul nou="); scanf("%f", &pnou.pret); cap=inserare(cap, pnou); traversare(cap); _getch(); }
Inserati un nod nou dupa primul element dintr-o lista simpla inlantuita. #include #include #include #include using namespace std; struct produs { int cod; char *denumire; float cantitate; float pret; }; struct nod { produs inf; struct nod* next; }; nod* crearelista(nod *cap, int n) { nod *p, *q; char buffer[20]; cap = (nod*)malloc(sizeof(nod)); printf("\n"); printf("Codul="); scanf("%d", &cap->inf.cod); printf("Denumirea="); scanf("%s", buffer); cap->inf.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(cap->inf.denumire, buffer); printf("Cantitatea="); scanf("%f", &cap->inf.cantitate);
printf("Pretul="); scanf("%f", &cap->inf.pret); cap->next = NULL; p = cap; for (int i = 1; iinf.cod); printf("Denumirea="); scanf("%s", buffer); q->inf.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(q->inf.denumire, buffer); printf("Cantitatea="); scanf("%f", &q->inf.cantitate); printf("Pretul="); scanf("%f", &q->inf.pret); q->next = NULL; p->next = q; p = q; } return cap; }
//inseram noul nod dupa primul element nod* inserare(nod *cap, produs prod) { //cream un nod nou si ii alocam memorie, il vom folosi ca sa memoram primul nod cu informatie din lista nod *q; q=(nod*)malloc(sizeof(nod)); //cream un nod spec care va avea adresa de memorie a capului listei nod *spec; spec = (nod*)malloc(sizeof(nod)); //spec va avea adresa de memorie a lui cap spec = cap; //facem legatura intre nodul care urmeaza dupa nodul nou inserat in void main si al treilea nod din lista q->next = spec->next; //punem in q informatia pe care am inserat-o q->inf = prod; //facem legatura intre primul nod si nodul q=nou cap->next = q; return spec; } pt n=2(noduri)
cap
inf1 next
inf2 next
NULL
----------------------------------------------------------------
cap
spec
inf1
inf2
next
next
NULL
----------------------------------------------------------------
q ----------------------------------------------------
inf2 inf3 next next spec
NULL
cap q
inf1
inf3
inf2
next
next
next
NULL
void traversare(nod *cap) { nod *p; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", p->inf.cod, p->inf.denumire, p>inf.cantitate, p->inf.pret, (p->inf.cantitate)*(p->inf.pret)); val += (p->inf.cantitate)*(p->inf.pret); p = p->next; } printf("\nValoare totala=%5.2f", val);
} void main() { nod *cap = NULL; nod *spec = NULL; int n; printf("Numar produse="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); //inseram un nou produs, introducand valori de la tastatura pentru fiecare camp produs pnou; char buffer[20]; printf("\nCodul nou="); scanf("%d", &pnou.cod); printf("Denumirea noua="); scanf("%s", buffer); pnou.denumire = (char*)malloc(strlen(buffer)+1)*sizeof(char)); strcpy(pnou.denumire, buffer); printf("Cantitatea noua="); scanf("%f", &pnou.cantitate); printf("Pretul nou="); scanf("%f", &pnou.pret); spec= inserare(cap, pnou); printf("gata"); traversare(cap); _getch(); }
Liste dublu inlantuite(next, prev)
1.Creati o lista dublu inlantuita care sa aiba noduri in care informatia contine: cod, denumire, cantitate, pret. #include #include #include #include //cream o structura pt informatia pe care vrem sa o punem in fiecare nod din lista struct produs { int cod; char *denumire; float cantitate; float pret; }; //cream nodul care va contine informatia de tip produs si 2 pointeri de legatura cu nodul anterior respectiv urmator struct nod { produs info; nod *next, *prev; }; //cream lista dublu inlantuita, cap va retine adresa intregii liste, il folosim pentru a gasi lista nod *crearelista(nod *cap, int n) { nod *p, *q; //variabile care sa ne preia din consola valoarea pe care o introducem int cod1; float cant1; float pret1; //avem nevoie de un vector de caractere, in fiecare elem al lui va fi o litera a denumirii char buffer[20]; //introducem informatia pentru nod printf("Codul=");
scanf("%d", &cod1); printf("Denumirea="); scanf("%s", buffer); printf("Cantitatea="); scanf("%f", &cant1); printf("Pretul="); scanf("%f", &pret1); //cream primul nod al listei si punem informatia cap = (nod*)malloc(sizeof(nod)); cap->info.cod = cod1; cap->info.denumire = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); strcpy(cap->info.denumire, buffer); cap->info.cantitate = cant1; cap->info.pret = pret1; cap->next =NULL; cap->prev =NULL; //ii facem o copie lui cap p = cap; //pana acum am creat primul nod al listei //cream al doilea nod al listei for (int i = 1; i < n; i++) { q = (nod*)malloc(sizeof(nod)); printf("Codul="); scanf("%d", &cod1); printf("Denumirea="); scanf("%s", buffer); printf("Cantitatea="); scanf("%f", &cant1); printf("Pretul="); scanf("%f", &pret1); //punem ce am introdus in informatia nodului q->info.cod = cod1; q->info.denumire = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); //copiem din buffer in informatia din nodul q corespunzatoare pt denumire strcpy(q->info.denumire, buffer); q->info.cantitate = cant1; q->info.pret = pret1; //facem legatura intre primul si al doilea nod, dar folosim copia pe care am facut-o lui cap, cap retine adresa inlantuirii de noduri p->next = q; //noul nostru p va fi q q->next = NULL; q->prev = p; p = q; } return cap; //retine adresa intregii liste } //traversam lista pentru a o afisa pe ecran void traversare(nod *cap) { nod *p; float val = 0; //in val vom retine valoarea totala a produselor printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", p->info.cod, p->info.denumire, p>info.cantitate, p->info.pret, (p->info.cantitate)*(p->info.pret));
val = val + (p->info.cantitate)*(p->info.pret); //ne mutam pe urmatorul nod p = p->next; } printf("\nValoarea totala este %5.2f", val); } void main() { nod *cap = NULL; int n; printf("Introduceti nr de produse="); scanf("%d", &n); cap = crearelista(cap, n); traversare(cap); _getch(); }
Creati o lista dublu inlantuita in care sa inserati valorile introduse de la tastatura in structura care este de fapt informatia nodului din lista. Lista avand informatia :cod, cantitate, pret, denumire.
-introducem de la tastatura valori pt structura noastra (produs inf)
inf
cod
------------------
denumire cantitate pret
-inseram informatia inf in informatia nodului ( produs prod) nou
cap
<---------------------------------------------------------------------------------
prod prev next
NULL
-il facem pe nou primul nod
nou
prod NULL
prev NULL next
p
cap
nou prod NULL
prev next
prod
prev next
NULL se plaseaza pe urmatorul nod
#include #include #include #include //cream o structura care sa aiba cod, denumire, cantitate, pret, aceasta structura va fi informatia din nodul nostru struct produs { int cod; char *denumire; float cant; float pret; }; //facem un nod care are informatia de tipul structurii produs struct nod { produs pr; struct nod *prev, *next; }; nod* inserare(nod* cap, produs prod)
{ nod* nou; nou = (nod*)malloc(sizeof(nod)); nou->pr = prod; nou->next = NULL;
if (cap == NULL) { nou->prev = NULL; return nou; } nod* p; for (p = cap; p->next; p = p->next); p->next = nou; nou->prev = p; return cap; } //traversam lista dublu inlantuita si o afisam pe ecran void traversare(nod *cap) { nod *p; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", p->pr.cod, p->pr.denumire, p>pr.cant, p->pr.pret, (p->pr.cant)*(p->pr.pret)); val += (p->pr.cant)*(p->pr.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); } void main() { nod *cap = NULL; int n; char buffer[20]; produs inf; printf("Numar produse="); scanf("%d", &n); //introducem valorile pt structura inf for (int i = 0; i
}
Scrieti un program care creeaza o lista dublu inlantuita in care informatia contine campurile : cod, denumire, cantitate, pret ca pointeri (int *, char *, float *, float *). #include #include #include #include struct produs { int *cod; char *denumire; float *cant; float *pret; }; struct nod { produs pr; struct nod *prev, *next; }; nod* inserare(nod* cap, produs prod) { nod* nou; nou = (nod*)malloc(sizeof(nod)); nou->pr = prod; nou->next = NULL; if (cap == NULL) { nou->prev = NULL; return nou;
} nod* p; for (p = cap; p->next; p = p->next); p->next = nou; nou->prev = p; return cap; } void traversare(nod *cap) { nod *p, *q; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", *p->pr.cod, p->pr.denumire, *p>pr.cant, *p->pr.pret, (*p->pr.cant)*(*p->pr.pret)); val += (*p->pr.cant)*(*p->pr.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); //dezalocare memorie //se face mai intai dezalocarea fiecarui vector in care am retinut valoarea pt campul respectiv, si apoi se face dezalocarea pointerului care retine adresa nodului in care avem informatia respectiva p = cap; while (p) { q = p->next; free(p->pr.cod); free(p->pr.denumire); free(p->pr.cant); free(p->pr.pret); free(p); p = q; } } void main() { nod *cap = NULL; int n; char buffer[20]; produs inf; printf("Numar produse="); scanf("%d", &n); for (int i = 0; i
cap = inserare(cap, inf); } traversare(cap); _getch(); }
//vectori pt lista dublu inlantuita #include #include #include #include struct produs { int *cod; char *denumire; float *cant; float *pret; }; struct nod { produs pr; struct nod *prev, *next; }; nod* conversie(produs *v, int n, nod* cap) { nod* nou = (nod*)malloc(sizeof(nod)); nou->pr = v[0]; nou->next = NULL; nou->prev = NULL; cap = nou; nod* p = cap; for (int i = 1; ipr = v[i];
nou->next = NULL; nou->prev = p; p->next = nou; p = nou; } return cap; } void traversare(nod *cap) { nod *p, *q; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", *p->pr.cod, p->pr.denumire, *p>pr.cant, *p->pr.pret, (*p->pr.cant)*(*p->pr.pret)); val += (*p->pr.cant)*(*p->pr.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); //dezalocare memorie /*p=cap; while(p) { q=p->next; free(p->pr.cod); free(p->pr.denumire); free(p->pr.cant); free(p->pr.pret); free(p); p=q; }*/ } void main() { nod* cap = NULL; produs *v; int i, n; char buffer[20]; printf("Nr. de elemente ale vectorului="); scanf("%d", &n); v = (produs*)malloc(n*sizeof(produs)); for (i = 0; i
cap = conversie(v, n, cap); traversare(cap); //dezalocare memorie for (i = 0; i
produs
pointer1
cod (vector)
pointer2
pointer3
denumire(vector)
pointer 4
cantitate(vector)
pret(vector)
cap
pr
prev next
Informatia care se pune in nod este de tip vector: (ex n=2) v[0]
v[0].cod
v[1]
v[0].denumire
v[0].cant
v[0].pret
nou
p
cap
punem in informatie primul element al vectorului in care am introdus informatie, acesta va fi primul nod al listei, cap va retine adresa inlantuirii de noduri, il folosim pe nou ca sa facem introducem urmatoarele elem din vector
v[0] prev
NULL
next
NULL
cap=nou p=cap alocam memorie pt nou pentru a introduce urmatorul element din vector nou
v[1] prev
next
NULL
p=nou => se pozitioneaza pe urmatorul nod cap
NULL
p
v[0]
v[1]
prev
prev
next
next NULL
//alta metoda de a face o lista dublu inlantuita sub forma unei matrici si folosind conversia dupa matrice cu doua linii si o coloana
j i a[0][0].cod a[0][1].denumire
a[1][0]
a[1][1]
a[0][2].cant
a[1][2]
a[0][3].pret
a[1][3]
pointer care retine adresa matricii (a)
#include #include #include #include struct produs { int *cod; char *denumire; float *cant; float *pret; }; struct nod { produs pr; struct nod *prev, *next; }; nod* conversie(nod *cap, produs **a, int nrlin, int nrcol) { nod *p; for (int i = 0; ipr=a[i][j];
nou->pr.cod = (int*)malloc(sizeof(int)); nou->pr.denumire = (char*)malloc((strlen(a[i][j].denumire) + 1)*sizeof(char)); nou->pr.cant = (float*)malloc(sizeof(float)); nou->pr.pret = (float*)malloc(sizeof(float)); *nou->pr.cod = *a[i][j].cod; strcpy(nou->pr.denumire, a[i][j].denumire); *nou->pr.cant = *a[i][j].cant; *nou->pr.pret = *a[i][j].pret; if (cap == NULL) { nou->next = NULL; nou->prev = NULL; cap = nou; } else { for (p = cap; p->next; p = p->next); p->next = nou; nou->prev = p; nou->next = NULL; p = nou; } } return cap; } void traversare(nod *cap) { nod *p, *q; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", *p->pr.cod, p->pr.denumire, *p>pr.cant, *p->pr.pret, (*p->pr.cant)*(*p->pr.pret)); val += (*p->pr.cant)*(*p->pr.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); //dezalocare memorie p = cap; while (p) { q = p->next; free(p->pr.cod); free(p->pr.denumire); free(p->pr.cant); free(p->pr.pret); free(p); p = q; } } void main() { nod* cap = NULL; produs **a; int n, m, i, j; char buffer[20]; printf("\nNr. linii=");
scanf("%d", &n); printf("\nNr. coloane="); scanf("%d", &m); a = (produs**)malloc(n*sizeof(produs*)); for (i = 0; i
a[0]
prev
prev
a[0][0].cod
a[0][1].cod
a[0][0].den
a[0][1].den
a[0][0].cant
a[0][1].cant
a[0][0].pret
a[0][1].pret
next
next
a[1]
prev
prev
a[1][0].cod
a[1][1].cod
a[1][0].den
a[1][1].den
a[1][0].cant
a[1][1].cant
a[1][0].pret
a[1][1].pret
next
next
cap
NULL
prev
prev
prev
prev
a[0][0].cod
a[0][1].cod
a[1][0].cod
a[1][1].cod
a[0][0].den
a[0][1].den
a[1][0].den
a[1][1].den
a[0][0].cant
a[0][1].cant
a[1][0].cant
a[1][1].cant
a[0][0].pret
a[0][1].pret
a[1][0].pret
a[1][1].pret
next
next
next
next
NULL
//lista circulara #include #include #include #include struct produs { int *cod; char *denumire; float *cant; float *pret; }; struct nod { produs pr; struct nod *prev, *next; }; nod* inserare(nod* cap, produs prod) { nod* nou; nou=(nod*)malloc(sizeof(nod)); if (cap==NULL) { nou->pr=prod; nou->next=nou; nou->prev=nou; return nou; } nod* p=cap; while (p->next!=cap) p=p->next; nou->pr=prod; p->next=nou; nou->prev=p; nou->next=cap; cap->prev=nou; return cap; } void traversare(nod *cap) { nod *p,*q; float val=0; printf("\nCod Denumire Cantitate Pret Valoare"); p=cap; while(p->next!=cap) { printf("\n%d %s %5.2f %5.2f %5.2f",*p->pr.cod, p->pr.denumire, *p>pr.cant, *p->pr.pret, (*p->pr.cant)*(*p->pr.pret)); val+=(*p->pr.cant)*(*p->pr.pret); p=p->next; } printf("\n%d %s %5.2f %5.2f %5.2f",*p->pr.cod, p->pr.denumire, *p->pr.cant, *p->pr.pret, (*p->pr.cant)*(*p->pr.pret)); val+=(*p->pr.cant)*(*p->pr.pret); printf("\nValoare totala=%5.2f",val);
//dezalocare memorie p=cap; while(p->next!=cap) { q=p->next; free(p->pr.cod); free(p->pr.denumire); free(p->pr.cant); free(p->pr.pret); free(p); p=q; } free(p->pr.cod); free(p->pr.denumire); free(p->pr.cant); free(p->pr.pret); free(p); } void main() { nod *cap=NULL; int n; char buffer[20]; produs inf; printf("Numar produse="); scanf("%d",&n); for (int i=0;i
Creati o lista dublu inlantuita care are in informatie: cod, denumire, cantitate, pret (vectori) si insereaza la inceputul listei un nod nou. #include #include #include #include struct produs { int *cod; char *denumire; float *cant; float *pret; }; struct nod { produs pr; struct nod *prev, *next; }; nod* inserare(nod* cap, produs prod) { nod* nou; nou = (nod*)malloc(sizeof(nod)); nou->pr = prod; nou->next = NULL; if (cap == NULL) { nou->prev = NULL; return nou; } nod* p; for (p = cap; p->next; p = p->next); p->next = nou; nou->prev = p; return cap; }
inserare din structura intr-o lista, urmatoarea inserare se face la sfarsitul listei
inserare nod nou la inceputul listei nod* inserare_inainte(nod* cap, produs prod) { nod* nou; nou = (nod*)malloc(sizeof(nod)); nou->pr = prod; nou->prev = NULL; nou->next = cap; cap->prev = nou; cap = nou; return cap; } void traversare(nod *cap) { nod *p, *q; float val = 0; printf("\nCod Denumire Cantitate Pret Valoare"); p = cap; while (p) { printf("\n%d %s %5.2f %5.2f %5.2f", *p->pr.cod, p->pr.denumire, *p>pr.cant, *p->pr.pret, (*p->pr.cant)*(*p->pr.pret)); val += (*p->pr.cant)*(*p->pr.pret); p = p->next; } printf("\nValoare totala=%5.2f", val); //dezalocare memorie /*p=cap; while(p) { q=p->next; free(p->pr.cod); free(p->pr.denumire); free(p->pr.cant); free(p->pr.pret); free(p); p=q; }*/ } void main() { nod *cap = NULL; int n; char buffer[20]; produs inf, k; printf("Numar produse="); scanf("%d", &n); for (int i = 0; i
scanf("%f", inf.pret); cap = inserare(cap, inf); } traversare(cap); printf("\nProdusul de inserat:"); printf("\nCodul="); k.cod = (int*)malloc(sizeof(int)); scanf("%d", k.cod); printf("Denumirea="); scanf("%s", buffer); k.denumire = (char*)malloc((strlen(buffer) + 1)*sizeof(char)); strcpy(k.denumire, buffer); printf("Cantitatea="); k.cant = (float*)malloc(sizeof(float)); scanf("%f", k.cant); printf("Pretul="); k.pret = (float*)malloc(sizeof(float)); scanf("%f", k.pret); cap = inserare_inainte(cap, k); traversare(cap); _getch(); }
inserare la inceputul listei
nou
prod
prev NULL
next
cap
NULL
pr1
pr2
prev
prev
next
next
NULL