Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.2-3
la disciplina Structuri de date și Algoritmi
A efectuat:
st. gr. AI-181 A.Ciumac
A verificat:
S. Botnaru
Lucrare de laborator 2-3
O listă simplu înlănţuită este o colecţie de noduri aşezate într-o ordine liniară (dar
NU în locaţii succesive din memorie - aşa cum se întâmplă la vectori). Fiecare nod
are cel puţin un pointer către următorul nod, pe care îl vom numi next. Primul nod
se numeşte head,. Lista se numeşte simplu înlănţuită deoarece fiecare nod
memorează un singur pointer către următorul nod. Spre deosebire de vectori, lista
nu are o mărime fixă. Poate fi redimensionată prin adăugarea sau ştergerea
nodurilor. Un nod este ca un obiect (item) care conţine atât informaţia pe care vreţi
s-o stocaţi cât şi legătura către următorul obiect.
Datorită faptului ca elementele listei sunt stocate în diferite părți ale memoriei
calculatorului sunt ușurate anumite operații cu lista, de exemplu inserarea sau
ștergerea unui element al listei nu necesită mișcarea celorlalte elemente pentru a
face loc sau pentru a strînge lista, așa cum se întîmplă la vectori de exemplu.
masina* head=NULL;
int create(int n)
{
int i;
masina *c,*p;
for(i=0;i<n;i++)
{
c=(masina*)malloc(sizeof(masina));
if(c == NULL) return 0;
if(i == 0)
{
head=c;
p=c;
}
else
{
p->next=c;
p=c;
}
}
p->next=NULL;
return 1;
}
void read()
{
masina *c=head;
int i=0;
while(c)
{
printf("\n****************************************\n\n");
printf("Introdu datele masinii %d\n",i+1);
printf("Marca: ");
scanf("%s",&c->marca);
printf("Model: ");
scanf("%s",&c->model);
printf("Originea: ");
scanf("%s",&c->origine);
printf("Anul de productie: ");
scanf("%d",&c->anu);
printf("Pretul($): ");
scanf("%f",&c->pret);
c=c->next;
i++;
}
}
void show_search(char* s)
{
masina *c=head;
int i=0,k=0;
while(c)
{
if((strcmp(s,c->marca)==0) || (strcmp(s,c->model)==0 ) || (strcmp(s,c-
>origine)==0))
{
printf("****************************************\n\n");
printf("Datele masinii: %d\n",i+1);
printf("Marca: %s\n",c->marca);
printf("Model: %s\n",c->model);
printf("Originea: %s\n",c->origine);
printf("Anul de productie: %d\n",c->anu);
printf("Pretul($): %.2f\n\n",c->pret);
k++;
}
c=c->next;
i++;
}
if(k==0)
printf("Elementul nu a fost gasit!\n");
}
masina* search(char* s)
{
masina* c=head;
int k=0;
while(c)
{
if(strcmp(s,c->marca)==0 || strcmp(s,c->model)==0 || strcmp(s,c-
>origine)==0)
{
return c;
k++;
}
c=c->next;
}
if(k==0)
{
printf("Nu exista asa masini!\n");
}
return NULL;
}
int lenght()
{
masina *c=head;
int i=0;
while(c)
{
i++;
c=c->next;
}
return i;
}
void sort()
{
masina *a,*b;
int i,k,l;
l=lenght();
for(i=0;i<l-1;i++)
{
a=head;
b=a->next;
for(k=0;k<l-1-i;k++)
{
if(a->pret < b->pret)
{
swap(a,b);
}
a=a->next;
b=b->next;
}
}
}
masina* end()
{
masina* c;
c=head;
while(c->next)
{
c=c->next;
}
return c;
}
void add_to_end(){
masina *c=head,*p;
while(c){
if(c->next == NULL){
p=c;
c=(masina*)malloc(sizeof(masina));
printf("\n****************************************\n\n");
printf("Introdu datele masinii\n");
printf("Marca: ");
scanf("%s",&c->marca);
printf("Model: ");
scanf("%s",&c->model);
printf("Originea: ");
scanf("%s",&c->origine);
printf("Anul de productie: ");
scanf("%d",&c->anu);
printf("Pretul($): ");
scanf("%f",&c->pret);
p->next=c;
c->next=NULL;
break;
}
c=c->next;
}
}
void freem()
{
masina *c=head,*p;
while(c)
{
p=c;
c=c->next;
free(p);
if(c == NULL)
{
break;
}
}
head=NULL;
}
default:
system("cls");
printf("Ati introdus o tasta incorecta!\a\n");
m=1;
system("pause");
break;
}
}
}
return 0;
}
Concluzii:
1. Au fost obținute deprinderi de creare a unei baze de date abstractizate utilizînd
lista simplu înlănțuită în limbajul C.
2. Au fost obținute deprinderi de prelucrare a listei simplu înlănțuite, adaugarea
elementelor, stergerea, afisarea, sortarea, cautarea, interschimbarea etc.
3. Au fost obținute deprinderi de salvare a datelor în fișiere și citirea datelor din
ele.
4. Au fost obținute deprinderi de creare a fișierelor antet cu extensia .h, fișierelor
cu funcții cu extensia .c și includerea lor în proiect.