P. 1
Liste simplu inlantuite

Liste simplu inlantuite

|Views: 15|Likes:
Published by Arlind Lika
SDA
SDA

More info:

Categories:Types, School Work
Published by: Arlind Lika on Mar 20, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

02/26/2014

pdf

text

original

/* - varianta cu liste simplu inlantuite */ #include #include #include #include <stdio.h> <stdlib.h> <conio.h> <string.

h>

struct nod { int cv[15]; int val; int buc; int vnd;

// // // //

codul produsului valoarea nr bucati pe stoc nr bucati vandute

struct nod *urm; // urmatorul element } *v; // varful listei // Capatul (sfarsitul) listei a fost considerat acel element // care are valoarea pointerului 'c->urm' = NULL // redefinirea functiei pow(n,exp) -- ridicarea lui n la puterea exp long pow (int n, int exp) { int i, val = 1; for (i=0; i<exp; i++) val *= n; return val; } // functie de conversie din baza 2 in baza 10 int bin2dec (int bin[15]) { int i, dec = 0; for (i=0; i<15 && bin[i]!=-1; i++) dec += pow(2, bin[i]); return dec; } // functie de afisare a produselor din stoc void afisare (struct nod *v) { int i; struct nod *c = v; printf("\n\nProduse in stoc:\n"); while (c) { if (c->buc > 0) { for (i=0; (i<15) && (c->cv[i] != -1); i++) printf("%d", c->cv[i]);

1

c->val. c = (struct nod*)malloc(sizeof(struct nod)). (i<15) && (c->cv[i] != -1). gets(codtemp). } // functie de afisare a produselor vandute void afisarev (struct nod *v) { int i. } printf("\t%d\t%d\n". printf("\n\nProduse vandute:\n"). i++) if (codtemp[i]!='0' && codtemp[i]!='1') valid = 0. i<len. c = c->urm. while (c) { if (c->vnd > 0) { for (i=0. c->cv[i]). printf("\n\nAdaugare produs nou:\n"). do { printf("Cod: "). } while (len==0 || len>15 || valid==0). len. } printf("\nApasati o tasta pentru a continua. getch(). char codtemp[15]. c = c->urm. } printf("\nApasati o tasta pentru a continua. c->val. int cod[15]. i=0."). getch(). c->vnd). i++) printf("%d". valid=1. valid = 1. for (i=0."). *n. } // functie de adaugare de noi produse void adaugare (void) { struct nod *c. c->buc). struct nod *c = v. 2 .} printf("\t%d\t%d\n". *m. len = strlen(codtemp).

// codul nu poate sa depaseasca 15 caractere printf("Valoare: "). 3 . i<len. printf("Bucati: "). m = m->urm. // adaugarea elementului in lista propriu-zisa // -. scanf("%d". &c->vnd). n = v. i++) { c->cv[i] = codtemp[i]-'0'. v->urm = NULL. i<15. inseram inaintea lui m n = m. i++) c->cv[i] = -1. printf("Bucati candute: "). for (i=0.crearea legaturilor -m = v. // am folosit n pt a retine elementul anterior lui m // este necesar pt a introduce pe c intre n si m } n m c if (m == v) { if (!v) // v == NULL { v = c. scanf("%d". while (m) // m != NULL { if ( bin2dec(c->cv) < bin2dec(m->cv) ) break. } else { n = v. &c->val). scanf("%d". // daca se indeplineste conditia. } for (i=len. &c->buc).

len. int i=0. } if (good) { 4 . } while (len>15). i<15. for (i=0.v = c. } // golirea buffer-ului pt citire noua // functie de stergere a unui element void stergere (void) { struct nod *c. c->urm = m. gets(codtemp). if (good) break. c = c->urm. len = strlen(codtemp). do { printf("Cod: "). good = 0. m = c. i++) if (c->cv[i] != cod[i]) good = 0. } gets(codtemp). i<15. char codtemp[15]. i++) cod[i] = -1. } else { } n->urm = c. // codul nu poate sa depaseasca 15 caractere for (i=0. *m. while (c) { good = 1. printf("\n\nStergere produs:\n"). cod[15]. i++) { cod[i] = codtemp[i]-'0'. c = v. } for (i=len. i<len. v->urm = n.

printf("\n"). printf("\nProdusul precizat nu exista. printf(" 4. break. printf(" 1. do { clrscr(). Afisare produse vandute\n"). break.")."). } else printf("\nProdusul precizat a fost sters. printf(" 0. free(c). printf(" Optiune: "). break. printf(" 2. 5 . switch (opt) { case '1': case '2': case '3': case '4': } } while (opt!='0'). m c printf("\nApasati o tasta pentru a continua. getch(). } void main() { char opt. stergere(). } afisare(v). break. Stergere\n"). adaugare()."). m->urm = c->urm. Iesire\n"). Afisare produse in stoc\n"). Adaugare\n"). opt = getche(). printf("\n"). afisarev(v). printf(" 3.if (v == c) v = v->urm.

// // // // codul produsului valoarea nr bucati pe stoc nr bucati vandute ant inf urm struct nod *urm. while (c) { if (c->buc > 0) { for (i=0.exp) -. for (i=0./* .ridicarea lui n la puterea exp long pow (int n. i++) dec += pow(2. 6 .h> <stdlib. printf("\n\nProduse in stoc:\n"). c->cv[i]).h> <conio. struct nod *c = v. bin[i]). // elementul anterior } *v. for (i=0. } // functie de conversie din baza 2 in baza 10 int bin2dec (int bin[15]) { int i. int exp) { int i.varianta cu liste dublu inlantuite */ #include #include #include #include <stdio. int val. val = 1. i<exp. int buc. return dec.h> struct nod { int cv[15]. i++) val *= n. int vnd.h> <string. dec = 0. } // functie de afisare a produselor din stoc void afisare (struct nod *v) { int i. i<15 && bin[i]!=-1. i++) printf("%d". // varful listei // Capatul (sfarsitul) listei a fost considerat acel element // care are valoarea pointerului 'c->urm' = NULL // redefinirea functiei pow(n. (i<15) && (c->cv[i] != -1). // elementul urmator struct nod *ant. return val.

printf("\n\nAdaugare produs nou:\n"). valid = 1. gets(codtemp). i++) if (codtemp[i]!='0' && codtemp[i]!='1') valid = 0. } printf("\nApasati o tasta pentru a continua. valid=1. (i<15) && (c->cv[i] != -1). struct nod *c = v. while (c) { if (c->vnd > 0) { for (i=0. printf("\n\nProduse vandute:\n"). *m.printf("\t%d\t%d\n". do { printf("Cod: "). } // functie de adaugare de noi produse void adaugare (void) { struct nod *c. } printf("\nApasati o tasta pentru a continua. c->buc). } c = c->urm. c->val. for (i=0. *n."). getch(). int cod[15]. len."). 7 . char codtemp[15]. c = (struct nod*)malloc(sizeof(struct nod)). } c = c->urm. c->val. i++) printf("%d". c->vnd). c->cv[i]). } // functie de afisare a produselor vandute void afisarev (struct nod *v) { int i. i<len. i=0. len = strlen(codtemp). getch(). good=0. printf("\t%d\t%d\n".

c->ant = NULL. scanf("%d". } for (i=len. c->urm = m. scanf("%d". 8 . m->ant = c.} while (len==0 || len>15 || valid==0). &c->buc). printf("Bucati candute: ").crearea legaturilor -m = v. while (v && m->urm) { good = 0. break. i++) c->cv[i] = -1. } // daca se indeplineste conditia. for (i=0. // codul nu poate sa depaseasca 15 caractere printf("Valoare: "). // adaugarea elementului in lista propriu-zisa // -. i<15. printf("Bucati: "). i++) { c->cv[i] = codtemp[i]-'0'. i<len. inseram inaintea lui m } m = m->urm. // v != NULL && m->urm != NULL if ( bin2dec(c->cv) < bin2dec(m->cv) ) { good = 1. scanf("%d". &c->val). n m c if (good) { if (m == v) { v = c. &c->vnd).

c->urm = NULL. } else { } } } m->urm = c. c->ant = m. c->ant = n. c->urm = m. 9 . v->urm = m. m->ant = c. } else { } if (m == v) { if (!v) // v == NULL { // lista este vida // nodul inserat devine primul din lista v = c.} else { n = m->ant. len. v->urm = NULL. gets(codtemp). v->ant = NULL. n->urm = c. } else { // nodul inserat devine varful listei v = c. int i=0. } // golirea buffer-ului pt citire noua c // functie de stergere a unui element void stergere (void) { struct nod *c. good = 0. char codtemp[15]. cod[15]. v->ant = NULL.

} void main() { char opt. c = v. if (good) break. // codul nu poate sa depaseasca 15 caractere for (i=0. i++) { cod[i] = codtemp[i]-'0'. i<15. } else printf("\nProdusul precizat nu exista. i++) cod[i] = -1. i<15. do 10 . printf("\nApasati o tasta pentru a continua. getch(). for (i=0."). do { printf("Cod: "). c->ant->urm = c->urm. gets(codtemp). len = strlen(codtemp). } c = c->urm."). printf("\nProdusul precizat a fost sters. } for (i=len. while (c) { good = 1.printf("\n\nStergere produs:\n"). } while (len>15). if (good) { if (v == c) v = v->urm. free(c). i<len. i++) if (c->cv[i] != cod[i]) good = 0.").

break. printf(" 0. opt = getche(). stergere(). break. printf("\n"). break. printf("\n"). break. 11 . Iesire\n"). printf(" Optiune: "). Stergere\n"). adaugare(). printf(" 2. printf(" 1. printf(" 3. afisarev(v). Afisare produse in stoc\n"). printf(" 4.{ clrscr(). } afisare(v). Adaugare\n"). switch (opt) { case '1': case '2': case '3': case '4': } } while (opt!='0'). Afisare produse vandute\n").

// daca nu exista nodul respectiv se creeaza fizic // si se adauga legaturile (fara valoare) if (v == NULL) { v = (struct nod*)malloc(sizeof(struct nod)). val. } // nodul respectiv este pe pozitia dorita si se // scrie informatia nodului daca e cazul if (poz==len) { // valoarea nodului nu este nula => codul mai e folosit // se ignora cea de-a doua valoare if (c->val!=-1) return 0. } *v. buc. c->val = val. int cv[15]. int len) { struct nod *n.h> <string. } 12 . // valoarea // nr bucati pe stoc // nr bucati vandute // left // right // varful listei struct nod *l. v->r = NULL.h> <conio. v->val = -1. int buc. c->vnd = vnd. v->l = NULL.h> <stdlib. // functie recursiva de inserare in arbore int insert_arb (struct nod *c. int vnd. return 1. int poz. vnd. c = v./* . c->buc = buc.varianta cu arbori */ #include #include #include #include <stdio. struct nod *r.h> struct nod { int val.

&val). len). for (i=0. poz+1. } else { if (c->l == NULL) // daca nu exista nodul din stanga { // se creaza fizic (alocare+legaturi) n = (struct nod*)malloc(sizeof(struct nod)). n->l = NULL. do { v 1 printf("Cod: "). } while (len==0 || len>15 || valid==0). c->r = n. // codul nu poate sa depaseasca 15 caractere printf("Valoare: "). n->val = -1. n->l = NULL. } insert_arb(c->l. n->r = NULL. printf("\n\nAdaugare produs nou:\n"). i=0. len). scanf("%d". gets(codtemp). c->l = n. 0 valid = 1. len.// daca pozitia curenta din cod este 1 se merge // pe partea dreapta a arborelui if (cv[poz]==1) { if (c->r == NULL) // daca nu exista nodul din dreapta { // se creaza fizic (alocare+legaturi) n = (struct nod*)malloc(sizeof(struct nod)). len = strlen(codtemp). 13 . n->val = -1. n->r = NULL. i<len. char codtemp[15]. i++) if (codtemp[i]!='0' && codtemp[i]!='1') valid = 0. valid=1. } insert_arb(c->r. poz+1. } } // functie de adaugare produs nou void adaugare (void) { int cod[15].

\n\n"). i++) { cv[i] = codtemp[i]-'0'.0. else printf("\nProdusul exista deja in baza de date. v->vnd). // adaugarea elementului in lista propriu-zisa // -. %d\n". int x) { if (v != NULL) { if (v->val != -1) if (x == 0) printf("%d %d else if (v->vnd>0) printf("%d if (v->l != NULL) afis_rec (v->l.printf("Bucati: "). getch(). %d %d\n". if (v->r != NULL) afis_rec (v->r. scanf("%d".len) == 1) printf("\nProdusul a fost introdus cu succes.x). scanf("%d". for (i=0.\n\n").crearea legaturilor -if (insert_arb(v. &buc). v->val. } for (i=len. i++) cv[i] = -1. } // functie recursiva pentru afisare // x == 0 => afisare toate produsele // x == 1 => afisare produsele vandute int afis_rec (struct nod *v. } } // functia de afisare void afisare (struct nod *v) { printf("\n\nProduse in stoc:\n"). // golirea buffer-ului pt citire noua printf("\nApasati o tasta pentru a continua. v->vnd). &vnd). v->val. v->buc. gets(codtemp). printf("Bucati candute: "). i<15. v->buc."). i<len. 14 .x).

int poz. 1 c 15 . printf("\nApasati o tasta pentru a continua. getch(). } // functie recursiva de stergere int stergere_rec (struct nod *c.1). int len) { if (!c) // c == NULL return 0. c->buc = 0. cod[15]. len. int cod[15]. } // afisare produse vandute void afisarev (struct nod *v) { printf("\n\nProduse vandute:\n").len).poz+1.len). good = 0.cod. getch().afis_rec (v."). return 1. c->vnd = 0. c = 0.0)."). return 1. } } else { if (cod[poz]==1) stergere_rec (c->r. afis_rec (v. } else { // se anuleaza nodul (valorile) c->val = -1. if (poz == len) { // nodul nu mai are descendenti => stergere fizica if (c->l==NULL && c->r==NULL) { free(c). else stergere_rec (c->l.poz+1. printf("\nApasati o tasta pentru a continua. } } // functia de stergere void stergere (void) { int i=0.cod.

Iesire\n"). printf("\n\nStergere produs:\n"). Afisare produse in stoc\n"). gets(codtemp). getch(). break. i<len. adaugare(). stergere(). switch (opt) { case '1': case '2': case '3': case '4': } } while (opt!='0'). break. printf(" 2."). } void main() { char opt. else printf("\nProdusul precizat nu exista. printf(" 1. good = 1. i++) { cod[i] = codtemp[i]-'0'. // codul nu poate sa depaseasca 15 caractere si trebuie sa fie valid for (i=0. for (i=0. i++) if (codtemp[i]!='0' && codtemp[i]!='1') good = 0.len)) printf("\nProdusul precizat a fost sters. printf(" 3. Afisare produse vandute\n"). afisarev(v). } while (len==0 || len>15 || good==0)."). do { clrscr(). break.char codtemp[15]. printf(" 0. printf("\n"). Adaugare\n"). printf(" 4. Stergere\n"). opt = getche(). printf(" Optiune: "). printf("\n"). 16 .0. printf("\n\nApasati o tasta pentru a continua. } afisare(v)."). } if (stergere_rec(v. len = strlen(codtemp). i<len. do { printf("Cod: "). break.cod.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->