Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
358 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
#include<iostream> | ||
|
||
struct Avion { | ||
char* model; | ||
int anFabricatie; | ||
}; | ||
|
||
struct nodSimplu { | ||
Avion info; | ||
nodSimplu*next; | ||
}; | ||
|
||
struct nodDublu { | ||
Avion info; | ||
nodDublu*next; | ||
nodDublu*prev; | ||
}; | ||
|
||
struct LDI { | ||
nodDublu*prim; | ||
nodDublu*ult; | ||
}; | ||
|
||
|
||
Avion creareAvion(char*model, int an) { | ||
Avion avion; | ||
avion.model = (char*)malloc(sizeof(char)*(strlen(model) + 1)); | ||
strcpy_s(avion.model, strlen(model) + 1, model); | ||
avion.anFabricatie = an; | ||
return avion; | ||
} | ||
|
||
nodDublu* creareNod(Avion info, nodDublu*next, nodDublu*prev) { | ||
nodDublu* nodNou = (nodDublu*)malloc(sizeof(nodDublu)); | ||
nodNou->info = creareAvion(info.model, info.anFabricatie); | ||
nodNou->next = next; | ||
nodNou->prev = prev; | ||
return nodNou; | ||
} | ||
|
||
nodSimplu* creareNod(Avion info, nodSimplu*next) { | ||
nodSimplu*nodNou = (nodSimplu*)malloc(sizeof(nodSimplu)); | ||
nodNou->info = creareAvion(info.model, info.anFabricatie); | ||
nodNou->next = next; | ||
return nodNou; | ||
} | ||
|
||
nodSimplu*inserareSfarsit(nodSimplu* cap, Avion info) { | ||
if (cap) { | ||
nodSimplu*p = cap; | ||
while (p->next) { | ||
p = p->next; | ||
} | ||
nodSimplu* nodNou = creareNod(info, NULL); | ||
p->next = nodNou; | ||
return cap; | ||
} | ||
else { | ||
return creareNod(info, NULL); | ||
} | ||
} | ||
|
||
LDI inserareInceput(Avion info, LDI lista) { | ||
nodDublu* nodNou = creareNod(info, lista.prim, NULL); | ||
if (lista.prim) { | ||
lista.prim->prev = nodNou; | ||
lista.prim = nodNou; | ||
} | ||
else { | ||
lista.prim = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
return lista; | ||
} | ||
|
||
|
||
LDI inserareSfarsit(Avion info, LDI lista) { | ||
nodDublu* nodNou = creareNod(info,NULL,lista.ult); | ||
if (lista.ult) { | ||
lista.ult->next = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
else { | ||
lista.prim = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
return lista; | ||
} | ||
|
||
void afisareAvion(Avion a) { | ||
printf("Avionul %s a fost fabricat in anul %d\n", a.model, a.anFabricatie); | ||
} | ||
|
||
void afisareDeLaInceput(LDI lista) { | ||
while (lista.prim) { | ||
afisareAvion(lista.prim->info); | ||
lista.prim = lista.prim->next; | ||
} | ||
} | ||
|
||
void afisareDeLaSfarsit(LDI lista) { | ||
while (lista.ult) { | ||
afisareAvion(lista.ult->info); | ||
lista.ult = lista.ult->prev; | ||
} | ||
} | ||
|
||
LDI stergereLista(LDI lista) { | ||
while (lista.prim) { | ||
free(lista.prim->info.model); | ||
nodDublu*aux = lista.prim; | ||
lista.prim = lista.prim->next; | ||
free(aux); | ||
} | ||
lista.ult = NULL; | ||
return lista; | ||
} | ||
|
||
LDI inserarePePozitie(Avion info, LDI lista, int pozitie) { | ||
if (lista.prim) { | ||
nodDublu*p = lista.prim; | ||
while (p && pozitie > 1) { | ||
p = p->next; | ||
pozitie--; | ||
} | ||
if (p) { | ||
nodDublu*nodNou = creareNod(info, p, p->prev); | ||
p->prev = nodNou; | ||
if (nodNou->prev) { | ||
nodNou->prev->next = nodNou; | ||
} | ||
else { | ||
lista.prim = nodNou; | ||
} | ||
} | ||
else { | ||
//lista = inserareSfarsit(info, lista); | ||
nodDublu*nodNou = creareNod(info, NULL, lista.ult); | ||
|
||
lista.ult->next = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
} | ||
else | ||
{ | ||
nodDublu*nodNou = creareNod(info, NULL, NULL); | ||
lista.prim = lista.ult = nodNou; | ||
} | ||
return lista; | ||
} | ||
|
||
nodSimplu* filtrareAvioane(LDI lista, int anLimita) { | ||
nodSimplu*cap = NULL; | ||
if (lista.prim) { | ||
nodDublu* p = lista.prim; | ||
while (p) { | ||
if (p->info.anFabricatie >= anLimita) { | ||
cap = inserareSfarsit(cap, p->info); | ||
} | ||
p = p->next; | ||
} | ||
} | ||
|
||
return cap; | ||
} | ||
|
||
void main() { | ||
LDI lista; | ||
lista.prim = NULL; | ||
lista.ult = NULL; | ||
|
||
lista = inserarePePozitie(creareAvion("B535", 2008), lista,1); | ||
lista = inserarePePozitie(creareAvion("B424", 2010), lista,1); | ||
lista = inserarePePozitie(creareAvion("B373", 2016), lista,2); | ||
|
||
afisareDeLaInceput(lista); | ||
|
||
|
||
nodSimplu* cap = filtrareAvioane(lista, 2011); | ||
|
||
printf("\n\n"); | ||
while (cap) { | ||
afisareAvion(cap->info); | ||
|
||
nodSimplu*temp = cap; | ||
cap = cap->next; | ||
free(temp->info.model); | ||
free(temp); | ||
} | ||
|
||
lista = stergereLista(lista); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
#include<iostream> | ||
|
||
struct test{ | ||
char* materie; | ||
float notaMaxima; | ||
}; | ||
struct nodSimplu{ | ||
test info; | ||
nodSimplu* next; | ||
}; | ||
|
||
struct nodDublu{ | ||
test info; | ||
nodDublu* next; | ||
nodDublu* prev; | ||
}; | ||
|
||
struct LDI{ | ||
nodDublu* prim; | ||
nodDublu* ult; | ||
}; | ||
|
||
test creareTest(char*materie, float nota){ | ||
test t; | ||
t.materie = (char*)malloc(sizeof(char)*(strlen(materie) + 1)); | ||
strcpy(t.materie, materie); | ||
t.notaMaxima = nota; | ||
return t; | ||
} | ||
|
||
nodDublu* creareNodDublu(test info, nodDublu* next, nodDublu* prev){ | ||
nodDublu* nodNou = (nodDublu*)malloc(sizeof(nodDublu)); | ||
nodNou->info = creareTest(info.materie,info.notaMaxima); | ||
nodNou->next = next; | ||
nodNou->prev = prev; | ||
return nodNou; | ||
} | ||
|
||
LDI inserareInceput(LDI lista, test info){ | ||
nodDublu* nodNou = creareNodDublu(info, lista.prim, NULL); | ||
if (lista.prim){ | ||
lista.prim->prev = nodNou; | ||
lista.prim = nodNou; | ||
} | ||
else{ | ||
lista.prim = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
return lista; | ||
} | ||
|
||
LDI inserareSfarsit(LDI lista, test info){ | ||
nodDublu* nodNou = creareNodDublu(info, NULL, lista.ult); | ||
if (lista.ult){ | ||
lista.ult->next = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
else{ | ||
lista.prim = nodNou; | ||
lista.ult = nodNou; | ||
} | ||
return lista; | ||
} | ||
|
||
void afisareTest(test t){ | ||
printf("Testul la materia %s are nota maxima %5.2f\n", t.materie, t.notaMaxima); | ||
} | ||
void afisareCapCoada(LDI lista){ | ||
nodDublu* p = lista.prim; | ||
while (p){ | ||
afisareTest(p->info); | ||
p = p->next; | ||
} | ||
} | ||
|
||
void afisareCoadaCap(LDI lista){ | ||
nodDublu* p = lista.ult; | ||
while (p){ | ||
afisareTest(p->info); | ||
p = p->prev; | ||
} | ||
} | ||
|
||
void stergereLista(LDI* lista){ | ||
while (lista->prim) | ||
{ | ||
nodDublu* aux = lista->prim; | ||
lista->prim = lista->prim->next; | ||
free(aux->info.materie); | ||
free(aux); | ||
} | ||
lista->ult = NULL; | ||
} | ||
|
||
LDI inserarePePozitie(LDI lista, test info, int pozitie){ | ||
if (lista.prim){ | ||
int k = 1; | ||
nodDublu*p = lista.prim; | ||
while (p && k < pozitie){ | ||
p = p->next; | ||
k++; | ||
} | ||
if (p){ | ||
nodDublu* nodNou = creareNodDublu(info, p, p->prev); | ||
p->prev = nodNou; | ||
if (nodNou->prev){ | ||
nodNou->prev->next = nodNou; | ||
} | ||
else{ | ||
lista.prim = nodNou; | ||
} | ||
} | ||
else{ | ||
lista = inserareSfarsit(lista, info); | ||
} | ||
} | ||
else{ | ||
lista = inserareSfarsit(lista, info); | ||
} | ||
|
||
return lista; | ||
} | ||
|
||
nodSimplu* inserareInceput(nodSimplu* cap, test info){ | ||
nodSimplu*nodNou = (nodSimplu*)malloc(sizeof(nodSimplu)); | ||
nodNou->info = creareTest(info.materie, info.notaMaxima); | ||
nodNou->next = cap; | ||
return nodNou; | ||
} | ||
|
||
nodSimplu* ExtragereTeste(LDI lista, char* materieLimita){ | ||
nodSimplu*cap = NULL; | ||
while (lista.prim){ | ||
if (stricmp(lista.prim->info.materie, materieLimita) <= 0){ | ||
cap = inserareInceput(cap, lista.prim->info); | ||
} | ||
lista.prim = lista.prim->next; | ||
} | ||
return cap; | ||
} | ||
|
||
void main(){ | ||
LDI lista; | ||
lista.prim = lista.ult = NULL; | ||
|
||
lista = inserarePePozitie(lista, creareTest("Structuri", 10),1); | ||
lista = inserarePePozitie(lista, creareTest("Statistica", 11),4); | ||
lista = inserarePePozitie(lista, creareTest("Java", 9),3); | ||
|
||
afisareCapCoada(lista); | ||
|
||
nodSimplu* cap = ExtragereTeste(lista, "Statistica"); | ||
|
||
printf("\n"); | ||
|
||
while (cap){ | ||
afisareTest(cap->info); | ||
nodSimplu* aux = cap; | ||
cap = cap->next; | ||
free(aux->info.materie); | ||
free(aux); | ||
} | ||
|
||
|
||
stergereLista(&lista); | ||
} |