Sunteți pe pagina 1din 28

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT
Lucrarea de laborator nr.9
la disciplina Structuri de date și Algoritmi

A efectuat:
st. gr. AI-191 Tronciu
Alexandru

A verificat:
dr., conf.univ., catedra IA D.Moraru

Chişinău – 2020
Lucrare de laborator 2-3

Tema: Implementarea tipului de date abstract “Lista simplu inlantuita” in C

Scopul lucrarii: obtinerea deprinderilor practice de implementare a unui tip de


date abstract (TDA) in limbajul C si anume a TDA “Lista simplu inlantuita”

Sarcina de lucru: De scris trei fisiere in limbajul C pentru implementarea (2


fisiere) si utilizarea (1 fisier – program cu functia main ) a TDA “Lista simplu
inlantuita”:

1. Fișierul antet cu extensia .h care descrie structura de date a elementului


listei simplu inlantuite (conform variantei din lucrare precedenta) și
prototipurile funcțiilor care asigură operațiunile de prelucrare a listei simplu
inlantuite.

2. Fișier cu extensia .cpp (sau .c) care contine codurile (implementarile)


tuturor functiilor declarate în fișierul antet.

3. Fișierul utilizatorului - programul cu funcția main () pentru prelucrarea listei


simplu inlantuite cu afisarea meniului de optiuni pe ecran, si anume:
pentru lucrare de laborator 2- crearea listei simplu inlantuite in memoria
dinamica, introducerea informatiei despre elementele listei de la tastatura,
afisarea informatiei despre elementele listei pe ecran, cautarea elementului listei
dupa unui cimp informational, modificarea cimpurilor elementului listei,
interschimbarea a 2 elemente listei, determinarea lungimei listei, sortarea
elementelor listei dupa unui cimp, eliberarea memoriei dinamice alocate pntru
lista, ieșire din program;
pentru lucrare de laborator 3- adaugarea unui element nou la sfirsitul listei,
adaugarea unui element nou la începutul listei, inserarea unui element nou in lista
dupa elementul indicat, inserarea unui element nou in lista inainte elementul
indicat, stergerea unui element al listei, divizarea listei simplu inlantuite in doua
liste separate, unirea a 2 liste simlu inlantuite intr-o singura lista, scrierea
informatiei despre elementele listei in fisier, citirea informatiei despre elementele
listei din fișier, ieșire din program.
Mersul lucrării:

Noţiuni principale din teorie şi metode folosite:

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.

Exemplu de bază de date în formă de listă simplu înlănțuită:

typedef struct aeroport{


char ID_avionului[100];
char Statusul_avionului[100];
char Ora_de_plecare[100];
char Ora_de_aterizare[100];
int Pasageri;
struct aeroport *next;
Fisierul lista.h
typedef struct aeroport{
char ID_avionului[100];
char Statusul_avionului[100];
char Ora_de_plecare[100];
char Ora_de_aterizare[100];
int Pasageri;
struct aeroport *next;

int create(int n);


Functia de creare a listei simplu inlantuita necirculara,primenste ca
paramentru „n” care este numarul de elemente care urmeaza a fi
alocate.
void read();
Funcita de introducere a elementelor in lista simplu inlantuita
necirculara.
masina* search(char* s);
Functia de cautare in lista simplu inlantuita necirculara dupa
un cimp al structurii.Primeste ca parametru adresa la string-ul
introdus de utilizator si returneaza elementele gasite.
void show_search();
Funcita de afisare a elementelor cautate cu ajutorul functiei
search(char*);
void show(masina* head);
Funtia de afisarea tuturor elemente din lista simplu inlantuita
necirculara avind ca paramentru capul listei.
void swap(masina* a,masina* b);
Functia de interschimbare a a doua elemente intre ele in lista
simplu inlantuita necirculara avind 2 parametri fiind elemente a
listei.
void sort();
Functia de sortare dupa pret(cimp al structurii).
int length();
Functia care determina lungimea listei simplu inlantuite
necirculare returneaza o valoare de tip int care reprezinta
lungimea listei.
masina* end();
Funtia care determina care este ultimul elemente din lista
simplu inlantuita necirculara returnind adresa acestui element.
void add_after_id(int id);
Functia de adaugare a elementelor dupa indicele indicat de
utilizator in lista simplu inlantuita necirculara,are ca
paramentru indicele tastat de utilizator.
void add_before_id(int id);
Functia de adaugare a elementelor inainte de indicele indicat de
utilizator in lista simplu inlantuita necirculara,are ca
paramentru indicele tastat de utilizator.

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,masina** 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(masina** head2);
Functia de unire a listei in doua,are ca parametru adresa
elementului care este capul listei 2.
void modif(int id);
Funcita de modificare a 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.

Fisierul lista.c
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include "lista.h"
int createList(int n)
{
int i;
aeroport *c,*p;
for(i=0;i<n;i++)
{
c=(aeroport*)malloc(sizeof(aeroport));
if(c == NULL) return 0;
if(i == 0)
{
head=c;
p=c;
}
else
{
p->next=c;
p=c;
}
}
p->next=NULL;
return 1;
}

void readInfo(void)
{
aeroport *c=head;
int i=0;
while(c)
{
printf("\n");
printf("Introdu datele avionului %d\n",i+1);
printf("ID_avionului: ");
scanf("%s",&c->ID_avionului);
printf("Statuslui_avionlui: ");
scanf("%s",&c->Statusul_avionului);
printf("Ora_de_plecare: ");
scanf("%s",&c->Ora_de_plecare);
printf("Ora_de_aterizare: ");
scanf("%s",&c->Ora_de_aterizare);
printf("Pasageri: ");
scanf("%d",&c->Pasageri);
c=c->next;
i++;
}
}
void showInfo(void)
{
aeroport* c;
int i=0;
c=head;
while(c)
{
printf("Numarul avionului inregistrat: %d\n",i+1);
printf("ID_avionului: %s\n",c->ID_avionului);
printf("Statuslul_avionului: %s\n",c->Statusul_avionului);
printf("Ora_de_plecare: %s\n",c->Ora_de_plecare);
printf("Ora_de_aterizare: %s\n",c->Ora_de_aterizare);
printf("Pasageri: %d\n\n",c->Pasageri);
printf("Adresa curenta: %p\n",c);
printf("Adresa elementului urmator: %p\n",c->next);
c=c->next;
i++;
}
}
void showSearch(void)
{
aeroport *c=head;
char s[100];
int i=0,k=0;
puts("Dati denumirea cautata"); scanf("%s",&s);
while(c)
{
if(stricmp(s,c->ID_avionului)==0)
{
printf("Numarul avionului inregistrat: %d\n",i+1);
printf("ID_avionului: %s\n",c->ID_avionului);
printf("Statuslul_avionului: %s\n",c->Statusul_avionului);
printf("Ora_de_plecare: %s\n",c->Ora_de_plecare);
printf("Ora_de_aterizare: %s\n",c->Ora_de_aterizare);
printf("Pasageri: %d\n\n",c->Pasageri);
k++;
}
c=c->next;
i++;
}
if(k==0)
printf("Elementul nu a fost gasit!\n");
}

aeroport* searchInfo(char* s)
{
aeroport* c=head;
int k=0;
while(c)
{
if(stricmp(s,c->ID_avionului)==0 )
{
return c;
k++;
}
c=c->next;
}
if(k==0)
{
printf("Nu exista asa avion!\n");
}
return NULL;
}
void swapInfo(aeroport *a,aeroport *b)
{
aeroport t,*na,*nb;
na=a->next;
nb=b->next;
t=*a;
*a=*b;
*b=t;
a->next=na;
b->next=nb;
}
int lenghtList()
{
aeroport *c=head;
int i=0;
while(c)
{
i++;
c=c->next;
}
return i;
}
aeroport* lastElement(void)
{
aeroport *c;
if(head==NULL){return NULL;}
c=head;
while(c->next)
{
c=c->next; if (c->next==head){break;}
} return c;
}
void sortInfo(void)
{
aeroport *a,*b;
int i,k,l;
l=lenghtList();
for(i=0;i<l-1;i++)
{
a=head;
b=a->next;
for(k=0;k<l-1-i;k++)
{
if(a->Pasageri < b->Pasageri)
{
swapInfo(a,b);
}
a=a->next;
b=b->next;
}
}
}
aeroport* endInfo(void)
{
aeroport* c;
c=head;
while(c->next)
{
c=c->next;
}
return c;
}
void modifyInfo(int id)
{
aeroport* c=head;
int i=0;
while(c)
{
if(i+1 == id)
{
printf("Datele avionului %d pentru modificare:\n",i+1);
printf("ID_avionului: ");
scanf("%s",&c->ID_avionului);
printf("Statusul_avionului: ");
scanf("%s",&c->Statusul_avionului);
printf("Ora_de_plecare: ");
scanf("%s",&c->Ora_de_plecare);
printf("Ora_de_aterizare: ");
scanf("%s",&c->Ora_de_aterizare);
printf("Pasageri: ");
scanf("%d",&c->Pasageri);
}
c=c->next;
i++;
}
}
void add_after_id(int id)
{
aeroport *c=head,*p;
int i=0;
while(c){
if(i == id-1){
p=c;
c=(aeroport*)malloc(sizeof(aeroport));
printf("Introdu datele avionului %d\n",i+2);
printf("ID_avionului: ");
scanf("%s",&c->ID_avionului);
printf("Statusul_avionului: ");
scanf("%s",&c->Statusul_avionului);
printf("Ora_de_plecare: ");
scanf("%s",&c->Ora_de_plecare);
printf("Ora_de_aterizare: ");
scanf("%s",&c->Ora_de_aterizare);
printf("Pasageri: ");
scanf("%d",&c->Pasageri);
c->next=p->next;
p->next=c;
break;
}
i++;
c=c->next;
}
}
void add_before_id(int id)
{
aeroport *c=head,*p;
int i=0;
while(c){
if(i == id-1){
p=c;
c=(aeroport*)malloc(sizeof(aeroport));
printf("Introdu datele avionului %d\n",i-2);
printf("ID_avionului: ");
scanf("%s",&c->ID_avionului);
printf("Statusul_avionului: ");
scanf("%s",&c->Statusul_avionului);
printf("Ora_de_plecare: ");
scanf("%s",&c->Ora_de_plecare);
printf("Ora_de_aterizare: ");
scanf("%s",&c->Ora_de_aterizare);
printf("Pasageri: ");
scanf("%d",&c->Pasageri);
if(p == head){
c->next=head;
head=c;
break;
}
else {
c->next=p;
i=0;
p=head;
while(p){
if(i == id-2){
p->next=c;
}
i++;
p=p->next;
}
break;
}
}
i++;
c=c->next;
}
}
void add_to_end()
{
aeroport *c=head,*p;
while(c){
if(c->next == NULL){
p=c;
c=(aeroport*)malloc(sizeof(aeroport));
printf("Introdu datele avion\n");
printf("ID_avionului: ");
scanf("%s",&c->ID_avionului);
printf("Statusul_avionului: ");
scanf("%s",&c->Statusul_avionului);
printf("Ora_de_plecare: ");
scanf("%s",&c->Ora_de_plecare);
printf("Ora_de_aterizare: ");
scanf("%s",&c->Ora_de_aterizare);
printf("Pasageri: ");
scanf("%d",&c->Pasageri);
p->next=c;
c->next=NULL;
break;
}
c=c->next;
}
}
int prependInfo(void)
{
aeroport *c;
c=(aeroport*)malloc(sizeof(aeroport));
if (c==NULL) { return 0;}
printf("Introdu datele avion\n");
printf("ID_avionului: ");
scanf("%s",&c->ID_avionului);
printf("Statusul_avionului: ");
scanf("%s",&c->Statusul_avionului);
printf("Ora_de_plecare: ");
scanf("%s",&c->Ora_de_plecare);
printf("Ora_de_aterizare: ");
scanf("%s",&c->Ora_de_aterizare);
printf("Pasageri: ");
scanf("%d",&c->Pasageri);
c->next=head;
head=c;
return 1;
}

void delete_id(int id)


{
aeroport *c=head,*p;
int i=0;
while(c){
if(i == id-1){
if(c == head){
head=c->next;
free(c);
break;
} else if(c->next == NULL){
p=head;
while(p){
if(p->next == c){
free(c);
p->next=NULL;
break;
}
p=p->next;
}
} else {
p=head;
while(p){
if(p->next == c){
p->next=c->next;
free(c);
break;
}
p=p->next;
}
}
}
i++;
c=c->next;
}
}
void splitList (int id,aeroport** head2)
{ aeroport *c=head;
int i=0;
while(c)
{
if(i == id-1){
*head2=c->next;
c->next=NULL;
break;
}
i++;
c=c->next;
}
}
void join(aeroport** head2)
{
aeroport *c=head;
while(c){
if(c->next == NULL){
c->next=*head2;
break;
}
c=c->next;
}
*head2=NULL;
}

void freem()
{
aeroport *c=head,*p;
while(c)
{
p=c;
c=c->next;
free(p);
if(c == NULL)
{
break;
}
}
head=NULL;
}

void save(char* fname)


{
aeroport*c=head;
FILE *txt=fopen(fname,"wt");
while(c)
{
fprintf(txt,"%s %s %s %s %d",c->ID_avionului,c->Statusul_avionului,c-
>Ora_de_plecare,c->Ora_de_aterizare,c->Pasageri);
if(c->next != NULL)
{
fprintf(txt, "\n");
}
c=c->next;
}
fclose(txt);

}
void load(char* fname)
{
aeroport* c;
FILE *fp;
fp=fopen(fname,"r");
c=head;
while(c)
{
fscanf(fp,"%s",&c->ID_avionului);
fscanf(fp,"%s",&c->Statusul_avionului);
fscanf(fp,"%s",&c->Ora_de_plecare);
fscanf(fp,"%s",&c->Ora_de_aterizare);
fscanf(fp,"%d",&c->Pasageri);
c=c->next;
}
fclose(fp);
return 1;
}
Fisierul main.cpp

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "lista.h"
int flag=0;
int main()
{
aeroport *a=NULL;
aeroport *b=NULL;
aeroport*head2=NULL;
char a1[100];
char b1[100];
char savef[100];
char loadf[100];
int n;
int mod;
int id_devide;
int id_before;
int id_after;
int id_delete;

int choice;
printf("\tBun venit la baza de date 'AEROPORT' .\n\t Tastati Enter pentru a continua...\n");
getch();
head=NULL;
while(choice!=19)
{ printf("\nSelectati dintre variantele propuse:\n1.Alocarea memoriei\n2.Introducerea
informatiei\n3.Afisarea informatiei\n4.Cautarea elementului\n5.Modificarea unui element
precizat\n6.Interschimbarea\n7.Sortarea dupa camp a elementelor\n8.Adaugarea unui element la
sfarsitul listei\n9-Adaugarea unui element la inceputul listei\n10-Adaugarea unui element dupa
pozitia indicata a listei\n11-Adaugarea unui element inainte de pozitia indicata a listei\n12-
Stergerea unui element indicat\n13-Divizarea listei in doua liste separate\n14-Unirea a 2 liste
intr-o lista\n15-Determinarea adresei ultimului eliment al listei\n16-Salvarea listei in fisier\n17-
Citirea informatiei din fisier\n18-Eliberarea memoriei alocate\n19-Iesirea din Sistem\n");
printf("\n\tAlegerea dumneavoastra este: ");
scanf("%i",&choice);
switch (choice)
{
case 1 : printf("Dati numarul de elemente care le veti prelucra: ");
scanf("%i",&n); if (createList(n)==1) {flag=1; break;} else{printf("A intervenit o
eroare in alocarea memoriei");}
case 2 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;} readInfo(); printf("\nPress any key to
continue...\n"); getch();break;
case 3 : if (head==NULL|| flag==0){ printf("Nu au fost introduse datele despre vreun
imobil"); getch(); break;} else { showInfo(); printf("\nPress any key to continue...\n"); getch();
break;}
case 4 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;} showSearch(); printf("\nPress any key
to continue...\n"); getch(); break;
case 5 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;} printf("Dati numarul de ordine al
elementului ce doriti sa-l modificati"); scanf("%d",&mod); modifyInfo(mod); printf("\nPress any
key to continue...\n"); getch(); break;
case 6 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
printf("Dati numele primului element pentru
interschimbare\n:");
fflush(stdin);
gets(a1);
a=searchInfo(a1);
printf("Dati numele primului element pentru
interschimbare\n>");
fflush(stdin);
gets(b1);
b=searchInfo(b1);
swapInfo(a,b);
getch();
printf("Interschimbarea a avut loc cu succes!\a\n");
break;

case 7 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");


printf("\nPress any key to continue...\n"); getch(); break;}
sortInfo(); printf("\nPress any key to continue...\n"); getch(); break;
case 8 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
add_to_end(); printf("\nPress any key to continue...\n"); getch(); break;
case 9 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
if (prependInfo()==0) {printf("Adaugarea nu a avut loc");} else{ printf("Adaugarea a
fost executata cu succes");} printf("\nPress any key to continue...\n"); getch(); break;
case 10 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
printf("Dati numarul elementului dupa care doriti sa adaugati:");
scanf("%d",&id_after); add_after_id(id_after); printf("\nPress any key to continue...\n"); getch();
break;
case 11 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
printf("Dati numarul elementului inaintea caruia doriti sa adaugati:");
scanf("%d",&id_before); add_before_id(id_before); printf("\nPress any key to continue...\n");
getch(); break;
case 12 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
printf("Dati numarul elementului care doriti sa-l stergeti:"); scanf("%d",&id_delete);
delete_id(id_delete); printf("\nPress any key to continue...\n"); getch(); break;
case 13 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
printf("Dati numarul elementului dupa care doriti sa divizati lista:");
scanf("%d",&id_devide); splitList(id_devide,&head2); printf("\nPress any key to continue...\n");
getch(); break;
case 14 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
join(&head2); printf("\nPress any key to continue...\n"); getch(); break;
case 15 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
if(lastElement()==NULL) {printf("Error");} else { a=lastElement(); printf("Adresa
elementului este : %p",a);} printf("\nPress any key to continue...\n"); getch(); break;
case 16 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
if(head)
{
printf("Dati numele fisierului\n>");
fflush(stdin);
gets(savef);
//strcat(savef,".txt");
save(savef);
printf("\aSalvarea a fost efectuata cu
succes!\n");
puts("GOOD BYE");
freem();
exit(1);
}

printf("\nPress any key to continue...\n"); getch(); break;


case 17 : if (head==NULL || flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n"); getch(); break;}
printf("Dati numele fisierului\n>");
fflush(stdin);
gets(loadf);
//strcat(loadf,".txt");
load(loadf);
printf("\aIntroducerea a fost efectuata cu succes!\n");
printf("\nPress any key to continue...\n"); getch(); break;
case 18 : if (head==NULL|| flag==0){printf("Memoria nu a fost alocata sau lista nu exista");
printf("\nPress any key to continue...\n");getch();} else {freem(); flag=0;}break;
case 19 : break;
}
system("cls");
}
printf("\nLa revedere");
return 0;
}
Fig.1 Functia de introducere a informatiei

Fig.2 Functia de afisare a informatiei.


Fig.3 Functia de cautare a unui element.

Fig.4 Functia de modificare a elementului precizat


Fig.5 Functia de interschimbare

Fig.6 Functia sortare dupa camp a elementelor


Fig.7 Functia de adaugare a unui element la sfarsitul listei.
Fig.8 Functia de adaugare a unui element la inceputul listei
Fig.9 Functia de adaugare a unui element dupa pozitie aleasa a listei
Fig.10 Functia de adaugare a unui elemnt inainte de o pozitie aleasa a listei
Fig.11 Functia de stergere a unui element din lista

Fig.12 Functia de divizare a listei in doua liste separate.


Fig.13 Functia de unire a doua liste intr-o lista
Fig.14 Functia de determinare a adresei a ultimului element al listei

Fig.15 Functia de salvare a informatiei din fisier


Fig.16 Functia de citire a informatiei din 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, 2014.
2. https://en.wikipedia.org/wiki/Linked_list accesat la 07.03.2015

S-ar putea să vă placă și