Documente Academic
Documente Profesional
Documente Cultură
Laborator 23
Laborator 23
RAPORT
Lucrarea de laborator nr.2-3
la disciplina Structuri de date si Algoritmi
A efectuat:
st. gr. C-171 F.Minzat
A verificat:
dr., conf.univ., catedra IA M. Kulev
Chişinău – 2018
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.
void add_to_end();
Functia de adaugare a elementelor la sfirsit de lista simplu
inlantuita necirculara.
void delete_id(int id);
Funcita de stergere a unui element din lista simplu inlantuita
necirculara.
void devide(int id,film** head2);
Functia care devizeaza lista in doua liste,are 2
parametri,primul ste o variabila de tip int care reprezinta
indicile deunde lista v-a fi devizata,ia al doilea este adresa
elementului care urmeaza sa fie capul listei 2*/
void join(film** head2);
Functia de unire a listei in doua,are ca parametru adresa
elementului care este capul listei 2.
void modif(int id);
Funcita de modificarea unui element din lista simplu inlantuita
necirculara,avind ca parametru o variabila de tip int care este
indicile elementului care urmeaza a fi modificat.
void save(char* s);
Funcitia de salvare a informatiei din lista simplu inlantuita
necirculara in fisier,are ca paramentru adresa la string-ul
introdus de utilizator care reprezinta numele fisierului.
void load(char* s);
Funcitia de incarcare a informatiei din fisier in lista simplu
inltantuita necirculare,are ca paramentru adresa la string-ul
introdus de utilizator care reprezinta numele fisierului.
void freem();
Funcita de eliberearea memoriei,distrugerea listei simplu
inlantuite necirculare.
typedef struct specialitate
{ char denumirea [50];
int credite ;
int ore ;
int semestru;
int nota;
struct specialitate*next;
} specialitate;
specialitate * head=NULL;
int create(int n)
{
int i;
specialitate *c,*p;
for(i=0;i<n;i++)
{
c=(specialitate*)malloc(sizeof(specialitate));
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()
{
specialitate *c=head;
int i=0;
while(c)
{
printf("\n****************************************\n\n");
printf("Introdu datele specialitateului %d\n",i+1);
printf("Denumirea: ");
scanf("%s",&c->denumirea);
printf("credite lansarii: ");
scanf("%d",&c->credite);
printf("ore: ");
scanf("%d",&c->ore);
printf("semestrul: ");
scanf("%d",&c->semestru);
printf("nota: ");
scanf("%d",&c->nota);
c=c->next;
i++;
}
}
void show_search(char* s)
{
specialitate *c=head;
int i=0,k=0;
while(c)
{
if(strcmp(s,c->denumirea)==0)
{
printf("****************************************\n\n");
printf("Datele specialitateului: %d\n",i+1);
printf("Denumirea: %s\n",c->denumirea);
printf("credite: %d\n",c->credite);
printf("ore: %d\n",c->ore);
printf("semestrul: %d\n",c->semestru);
printf("Nota: %d\n\n",c->nota);
k++;
}
c=c->next;
i++;
}
if(k==0)
printf("Elementul nu a fost gasit!\n");
}
specialitate* search(char* s)
{
specialitate* c=head;
int k=0;
while(c)
{
if(strcmp(s,c->denumirea)==0)
{
return c;
k++;
}
c=c->next;
}
if(k==0)
{
printf("Nu exista asa specialitate!\n");
}
return NULL;
}
int lenght()
{
specialitate *c=head;
int i=0;
while(c)
{
i++;
c=c->next;
}
return i;
}
void sort()
{
specialitate *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->nota < b->nota)
{
swap(a,b);
}
a=a->next;
b=b->next;
}
}
}
specialitate* end()
{
specialitate* c;
c=head;
while(c->next)
{
c=c->next;
}
return c;
}
void add_to_end(){
specialitate *c=head,*p;
while(c){
if(c->next == NULL){
p=c;
c=(specialitate*)malloc(sizeof(specialitate));
printf("\n****************************************\n\n");
printf("Introdu datele specialitateului\n");
scanf("%s",&c->denumirea);
printf("credite: ");
scanf("%d",&c->credite);
printf("ore: ");
scanf("%d",&c->ore);
printf("semestrul: ");
scanf("%d",&c->semestru);
printf("Nota: ");
scanf("%d",&c->nota);
p->next=c;
c->next=NULL;
break;
}
c=c->next;
}
}
default:
printf("Ati introdus o tasta incorecta!\a\n");
break;
}
}
return 0;
Citirea din fisier:
Divizarea listei:
Salvarea listei in fisier:
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.
Bibliografie:
1. Conspectul prelegerilor cursului Structuri de date și Algoritmi. Lector dr.,
conf. univ. M. Kulev. Chișinău: UTM, 2018.