Sunteți pe pagina 1din 17

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra Automatic i Tehnologii Informaionale

RAPORT
Lucrarea de laborator nr. 2-3
la Structuri de date i algoritmi

A efectuat:
st. gr. AI-161 V.Platon

A verificat:
dr., conf.univ. M. Kulev

Chiinu -2017
Lucrarea de laborator nr.2-3
Tema: Implementarea tipului de date abstract Lista simplu nlanuit n C.

Scopul lucrrii: Obinerea deprinderilor practice de implementare i de utilizare a tipului de


date abstract (TDA) Lista simplu nlanuit n limbajul C.

Condiia problemei (sarcina de lucru)


Sarcina de lucru: De scris trei fiiere-text n limbajul C pentru implementarea i utilizarea TDA
Lista simplu nlanuit:
1. Fiierul antet lista.h care conine: a) specificaia structurei elementului listei simplu nlanuite
(conform variantei din lucrarea de laborator nr.1) i b) prototipurile funciilor care asigur
operaiunile de prelucrare a listei simplu nlanuite.
2. Fiierul lista.cpp sau lista.c care conine codurile (implementrile) tuturor funciilor declarate
n fiierul antet.
3. Fiierul utilizatorului lab2_3.cpp sau lab2_3.c care reprezint programul cu funcia main ( )
pentru prelucrarea listei simplu nlanuite cu afiarea meniului de opiuni pe ecran si anume:

pentru lucrarea de laborator nr.2


1. crearea listei simplu inlanuite cu n elemente n memoria dinamic,
2. ntroducerea informaiei despre elementele listei de la tastatur,
3. afiarea informaiei despre elementele listei pe ecran (precum i afiarea adreselor
elementului current i urmtor),
4. cutarea elementului listei dupa unui cmp informaional al structurei,
5. modificarea cmpurilor elementului listei,
6. interschimbarea a 2 elemente indicate ale listei,
7. determinarea lungimii listei,
8. sortarea elementelor listei dup unui cmp,
9. determinarea adresei ultimului eliment al listei,
10. eliberarea memoriei dinamice allocate pentru lista,
11. ieire din program;
pentru lucrarea de laborator nr.3
1. adugarea unui element nou la sfiritul listei,
2. adugarea unui element nou la nceputul listei,
3. inserarea unui element nou n lista dup elementul indicat,
4. inserarea unui element nou n lista nainte elementul indicat,
5. eliminarea (stergerea) unui element din lista,
6. divizarea listei simplu nlanuite in dou liste separate,
7. unirea a 2 liste simlu nlanuite intr-o list,
8. scrierea (salvarea) informaiei despre elementele listei n fiier,
9. citirea informaiei despre elementele listei din fiier.

Varianta: 4) Cinematograf
Mersul lucrrii:

Noiuni principale din teorie i metode folosite:

Liste simplu inlantuite:

O list simplu nlnuit este o structur de date ce utilizeaz alocarea dinamic a memoriei. Un
element al listei se numete nod. Fiecare nod al unei liste conine un cmp care are rolul de a
indica adresa urmtorului element din list.

Exemplu:
typedef struct student
{
char nume[20];
float grupa;
struct student *urm; /*campul de inlantuire*/
}nod;

Crearea listelor simplu nlnuite

O lista simplu nlnuit poate fi creata n felul urmtor:

Prin inserare la nceput;


Prin inserare la sfrit;
Prin inserare ordonat;
Toate operaiile de inserare a unui nod ntr-o list presupun nti alocarea dinamic a memoriei
pentru nodul ce urmeaz s se insereze. n cazul n care avem cmpuri de tip ir de caractere
declarate ca i pointer la char, trebuie alocat memorie i pentru ele. Pentru alocare se utilizeaz
funcia malloc.
nod *p=(nod*)malloc(sizeof(nod));

Dup alocare urmeaz introducerea informaiei utile n cmpurile nodului. Pentru


exemplul considerat:
strcpy(p->nume,Ionel);
p->grupa=1.2;
p->urm=NULL;

Toate operaiile cu liste simplu nlnuite (inserare, cutare, tergere,afiare) pornesc de la


primul element al listei. Accesul la un anumit element al listei se face secvenial, accesnd
nodurile aflate naintea sa n nlanuire i pornind de la primul element al listei. Dac lista este
vid primul element indic spre NULL.
n exemplele urmtoare vom considera c p este nodul care se insereaz, q este pointerul
folosit pentru a parcurge lista, prim este primul nod al listei.1

1
http://www.aut.upt.ro/~rraul/PC/2009-2010/PC_lab11.pdf
Analiza datelor si functiilor:
Acest program este alcatuin din 3 fisiere:
1. lista.h - conine:
specificaia structurei elementului listei simplu nlanuite (conform variantei din
lucrarea de laborator nr.1)
prototipurile funciilor care asigur operaiunile de prelucrare a listei simplu
nlanuite.
2. lista.c - conine codurile (implementrile) tuturor funciilor declarate n fiierul antet.
3. main.c - reprezint programul cu funcia main ( ) pentru prelucrarea listei simplu nlanuite cu
afiarea meniului de opiuni pe ecran.

1) Functia: create - crearea listei simplu inlanuite cu n elemente n memoria dinamic


Parametrii functiei:
n variabla de tip integer, numarul de elemente.
Valoare returnabila:
Valoare returnabile este de tip integer, returneaza 0 daca funcita sa efectuat fara
erori.

2) Functia: read - ntroducerea informaiei despre elementele listei de la tastatur


Parametrii functiei:
-
Valoare returnabila:
-

3) Functia: show - afiarea informaiei despre elementele listei pe ecran (precum i afiarea
adreselor elementului current i urmtor
Parametrii functiei:
-
Valoare returnabila:
-

4) Functia: search_by_name - cutarea elementului listei dupa unui cmp informaional al


structurei
Parametrii functiei:
a variabila de tip char*, denumirea cinematografului cautat.
Valoare returnabila:
Variabila de tip cinema*, semnifica pointer la structura cautata.
5) Functia: modify - modificarea cmpurilor elementului listei.
Parametrii functiei:
a variabila de tip cinema*, pointer la cinematografului care urmeaza sa fie
modificat.
Valoare returnabila:
-
6) Functia: swop - interschimbarea a 2 elemente indicate ale listei.
Parametrii functiei:
a,b variabila de tip cinema*, pointer la cinematografului care urmeaza sa fie
intershimbat.
Valoare returnabila:
-

7) Functia: sort_by_name - sortarea elementelor listei dup denumirea cinematografului.


Parametrii functiei:
-
Valoare returnabila:
-
8) Functia: last - determinarea adresei ultimului eliment al listei.
Parametrii functiei:
-
Valoare returnabila:
Adresa ultimului cinematografului.
9) Functia: freemem - eliberarea memoriei dinamice allocate pentru lista.
Parametrii functiei:
-
Valoare returnabila:
-
10) Functia: append - adugarea unui element nou la sfiritul listei.
Parametrii functiei:
ap variabila de tip cinema, structura cinematografului pentru adaugare.
Valoare returnabila:
-
11) Functia: prepend - adugarea unui element nou la nceputul listei.
Parametrii functiei:
pp variabila de tip cinema, structura cinematografului pentru adaugare.
Valoare returnabila:
-
12) Functia: insertafter - inserarea unui element nou n lista dup elementul indicat.
Parametrii functiei:
a variabila de tip cinema, structura cinematografului pentru adaugare.
b variabila de tip cinema*, pointel la structura dupa care va fi adaugat element
nou.
Valoare returnabila:
-
13) Functia: insertbefore - inserarea unui element nou n lista nainte elementul indicat.
Parametrii functiei:
a variabila de tip cinema, structura cinematografului pentru adaugare.
b variabila de tip cinema*, pointel la structura innainte de care va fi adaugat
element nou.
Valoare returnabila:
-
14) Functia: deletel - eliminarea (stergerea) unui element din lista.
Parametrii functiei:
a variabila de tip cinema*, pointer la element din lista care va fi eleminat.
Valoare returnabila:
-
15) Functia: split - divizarea listei simplu nlanuite in dou liste separate.
Parametrii functiei:
head_1,head_2 variabile de tip cinema**, pointer la liste separate.
n variabila de tip integer, indiciu dupa care va fi divizata lista.
Valoare returnabila:
1 daca functia sa executat fara erori,
0 daca au fost errori
16) Functia: unirea - unirea a 2 liste simlu nlanuite intr-o list.
Parametrii functiei:
-
Valoare returnabila:
1 daca functia sa executat fara erori,
0 daca au fost errori
17) Functia: save - scrierea (salvarea) informaiei despre elementele listei n fiier.
Parametrii functiei:
-

Valoare returnabila:
1 daca functia sa executat fara erori,
0 daca au fost errori
18) Functia: load - citirea informaiei despre elementele listei din fiier.
Parametrii functiei:
filen variabila de tip char*, denumirea fisierului.

Valoare returnabila:
1 daca functia sa executat fara erori,
0 daca au fost errori.

Codul (textul) programului in limbajul C:


1) Fisierul lista.h
typedef struct cinematograf void swop(cinema *a, cinema *b);
{ int lenght(void);
char name[50]; void sort_by_name(void);
char adress[50]; void freemem(void);
int num_tel; cinema *last(void);
int num_seats;
char boss[50]; //lab 3
struct cinematograf *next; int append(cinema ap);
}cinema; int prepend(cinema pp);
int insertafter(cinema a, cinema *b);
//lab2 int insertbefore(cinema a, cinema *b);
cinema *head; void split(cinema **head_1, cinema
cinema **head1, **head2; **head_2, int n);
int create(int n); void unirea(void);
void read(void); int save(void);
void show(void); int load(char* filen);
cinema *search_by_name(char *a); //ret void deletel(cinema *a);
void modify(cinema *a);
2) Fisierul lista.c
#include "lista.h" int i=0;
#include <stdio.h> printf("\n");
#include <stdlib.h> puts("Informations about cinema's");
#include <string.h> c=head;
printf("\thead=%p\n",c);
int create(int n) //printf("\thead=%p\n",&c);
{ while(c)
cinema *c, *p; {
int i; printf("\n\tCinematograf number
%d\n",i+1);
for(i=0;i<n;i++) printf("Name: %s\n",c->name);
{ printf("Adress: %s\n",c->adress);
c=(cinema*)malloc(sizeof(*c)); printf("Telephone:%d\n",c->num_tel);
if(!c) {return i+1;} printf("Seats: %d\n",c->num_seats);
if(i==0) {head=c;} printf("Director: %s\n", c->boss);
else {p->next=c;} printf("Current adress: %p\n",c);
p=c; printf("Next adress: %p\n",c->next);
}
c->next=head; c=c->next; i++;
return 0; if(c==head) break;
} }
}
void read()
{ cinema *search_by_name(char *a)
cinema *c; {
int i=0; cinema *c;
c=head; c=head;
while(c) spliter = 0;
{ while(c)
printf("\n\tCinema number {
%d:\n",i+1); if(strcmp(c->name,a)==0)
printf("Name: "); fflush(stdin); gets(c- return c;
>name); spliter++;
printf("Adress: "); fflush(stdin); gets(c- c=c->next;
>adress); if(c==head) break;
printf("Telephone number: "); }
scanf("%d",&c->num_tel); return NULL;
printf("Seats count: "); scanf("%d",&c- }
>num_seats);
printf("Director: "); fflush(stdin); void modify(cinema *c)
gets(c->boss); {
int flag;
c=c->next; printf("Do you want to modify name?
if(head==c) break; (1/0): ");
i++; scanf("%d",&flag);
} if(flag){
} printf("Current Name: %s\n",c->name);
printf("New Name: "); fflush(stdin);
void show() gets(c->name);
{ }
cinema *c;
printf("Do you want to modify adress?
(1/0): "); int lenght(void)
scanf("%d",&flag); {
if(flag){ cinema *c;
printf("Current Adress: %s\n",c- int l=0;
>adress); c=head;
printf("New Adress: "); fflush(stdin); while(c)
gets(c->adress); {
} l++;
printf("Do you want to modify telephone c=c->next;
number? (1/0): "); if(c==head) break;
scanf("%d",&flag); }
if(flag){ return l;
printf("Current telephone: %d\n",c- }
>num_tel);
printf("New telephone: "); void sort_by_name(void)
scanf("%d",&c->num_tel); {
} int n,i,k; cinema *a, *b;
printf("Do you want to modify number of n=lenght();
seats? (1/0): "); for(i=0; i<n; i++)
scanf("%d",&flag); {
if(flag){ a=head; b=a->next;
printf("Current number of seats: %d\n",c- for(k=0;k<n-1-i;k++)
>num_seats); {
printf("New number: "); scanf("%d",&c- if(strcmp(a->name,b->name)>=1)
>num_seats); {
} swop(a,b);
}
printf("Do you want to modify director? a=a->next;
(1/0): "); b=b->next;
scanf("%d",&flag); }
if(flag){ }
printf("Current Director: %s\n",c->boss); }
printf("New Director: "); fflush(stdin);
gets(c->boss);
} void freemem(void)
puts("Succesfully modified!"); {
return; cinema *c, *p;
} c=head;
while(c)
void swop(cinema *a, cinema *b) {
{ p=c;
cinema *na, *nb; c=c->next;
cinema t; free(p);
na=a->next; if(head==c) break;
nb=b->next; }
t=*a; }
*a=*b;
*b=t; cinema *last(void)
a->next=na; {
b->next=nb; cinema *c;
} c=head;
if(c==NULL) return 0; while(c->next!=a)
while(c->next) {
{ c=c->next;
c=c->next; }
if(c->next==head) {break;} return c;
} }
return c; int insertafter(cinema a, cinema *b)
} {
cinema *c;
c=(cinema*)malloc(sizeof(*c));
//lab 3 if(!c) return 0;
int append(cinema ap) *c=a;
{ c->next=b->next;
cinema *t,*p; b->next=c;
t=(cinema*)malloc(sizeof(*t)); return 1;
if(!t) return 0; }
*t=ap; t->next=NULL;
if(head==NULL) {head=t;} int insertbefore(cinema a, cinema *b)
else {p=head; {
while(p->next) cinema *c,*p;
{ c=(cinema*)malloc(sizeof(cinema));
p=p->next; *c=a;
if(p==head) break; if(c==NULL) return 0;
} c->next=b;
p->next=t; if(b==head) head=c;
} else {
p=head;
return 1; while(p->next!=b)
} {
p=p->next;}
int prepend(cinema pp) p->next=c;
{ }
cinema *t;
t=(cinema*)malloc(sizeof(*t)); return 1;
if(!t) return 0; }
if(head==NULL) head=t;
*t = pp;
t->next = head->next; void deletel(cinema *a)
head->next = t; {
//*t=pp; if(a==head)
//t->next=head; {
//head=t; if(a->next==NULL)
//last()->next=head; {
return 1; head=NULL;
} }
else { head=a->next;}
}
cinema* prev(cinema *a) else { prev(a)->next=a->next;}
{ free(a);
cinema *c; return;
if(a==head) {return NULL;} }
c=head;
void split(cinema **head_1, cinema printf("Current adress: %p\n",B);
**head_2, int n) printf("Next adress: %p\n",B->next);
{ i++;
int i,f; B=B->next;
cinema *c; if(head_2==B) break;
c=head; }
for(i=0;i<n-1;i++) }
{ }
c=c->next;
} void unirea(void)
{
*head_2=c->next; int i,f;
c->next=NULL; cinema *S;
*head_1=head; S=head;
head=NULL; while(S)
{
printf("\n Do you want to see new lists? if(S->next=NULL) S->next=head2;
(1/0)"); }
scanf("%d",f); head2=NULL;
if(f) printf("Show brand new list?(1/0):" );
{ scanf("%d",f);
cinema *S,*B; if(f)
S=*head_1; {
B=*head_2; puts("------New list");
int i=0; while(S)
puts("-----------------First LIST"); {
while(S) printf("\n\tCinematograf number
{ %d\n",i+1);
printf("\n\tCinematograf number printf("Name: %s\n",S->name);
%d\n",i+1); printf("Adress: %s\n",S->adress);
printf("Name: %s\n",S->name); printf("Telephone:%d\n",S->num_tel);
printf("Adress: %s\n",S->adress); printf("Seats: %d\n",S->num_seats);
printf("Telephone:%d\n",S->num_tel); printf("Director: %s\n", S->boss);
printf("Seats: %d\n",S->num_seats); printf("Current adress: %p\n",S);
printf("Director: %s\n", S->boss); printf("Next adress: %p\n",S->next);
printf("Current adress: %p\n",S); i++;
printf("Next adress: %p\n",S->next); S=S->next;
i++; if(head==S) break;
S=S->next; }
if(head_1==S) break; }
} }
puts("-----------------Second LIST");
i=0; int save(void)
while(B) {
{ cinema *c;
printf("\n\tCinematograf number cinema *S;
%d\n",i+1); S=head;
printf("Name: %s\n",B->name); int i =0;
printf("Adress: %s\n",B->adress); FILE
printf("Telephone:%d\n",B->num_tel); *ExcelFile=fopen("CinemaDB.csv","w");
printf("Seats: %d\n",B->num_seats); FILE
printf("Director: %s\n", B->boss); *Notepad=fopen("Cinema.txt","w");
fprintf(ExcelFile,"Nr,Name,Adress,Tel. {
Number,Seats,Director,Current,Next\n"); cinema *S;
while(S) S=(cinema*)malloc(sizeof(*S));
{ FILE *fp;
i++; int i,l;
fp=fopen(filen,"r");
fprintf(ExcelFile,"%d,%s,%s,%d,%d,%s,%p if(!fp){return 0;}
,%p\n",i,S->name,S->adress,S->num_tel,S- S=head;
>num_seats,S->boss,S,S->next); while(!feof(fp))
fprintf(Notepad,"%s %s %d %d {
%s\n",S->name,S->adress,S->num_tel,S- fscanf(fp,"%s %s %d %d %s",S-
>num_seats,S->boss,S,S->next); >name,S->adress,&S->num_tel,&S-
S=S->next; >num_seats,S->boss);
if(head==S) break; S=S->next;
}fclose(ExcelFile); if(head==S) break;
fclose(Notepad); }
return; fclose(fp);
} return 1;
}
int load(char* filen)

3)fisier main.c
#include <stdio.h> puts("12. Prepend new element");
#include <stdlib.h> puts("13. Insert new element after ...");
#include <windows.h> puts("14. Insert new element before
...");
puts("15. Delete one element");
#include "lista.c" puts("16. Split one list (1 in 2)");
puts("17. Unite two list (2 in 1)");
int main() puts("18. Save in file");
{ puts("19. Load file");
int nm, n,ret,flag;
char str[50]; puts("0. Exit");
cinema *c, *c2; printf("\n\tEnter the menu option: ");
cinema c3; scanf("%d",&nm);
while(1) switch(nm)
{ {
system("cls"); case 0 : printf("Do you want to exit?
puts("\tMenu"); (1/0): "); scanf("%d",&flag);
puts("1. Create the list of cinema's"); if(flag) return 0;
puts("2. Introduce the information case 1 :
about cinema's"); printf("Enter the number of
puts("3. Show the list"); elements: ");
puts("4. Search cinema by name"); scanf("%d", &n);
puts("5. Modify cinema information"); ret=create(n);
puts("6. Swap 2 elements"); if(ret==0) {puts("Memory was
puts("7. Get size of list"); allocated;\n");}
puts("8. Sort list by name"); else {printf("Unknown error on
puts("9. Get last elemenet"); cinema %d",ret);}
puts("10. Free allocated memory"); getch();
printf("\tLaborator 3\n"); break;
puts("11. Append new element");
case 2 : read(); break; if(c2!=NULL) { swop(c,c2); } else
case 3 : show(); getch(); break; { puts("Cannot find second cinema");
case 4 : printf("\n[Search] Enter the getch(); break; }
name of cinema to find: "); } else { puts("Cannot find first
fflush(stdin); cinema"); getch(); break;}
gets(str); puts("Swap succesfully");
c = search_by_name(str); getch();
if(c!=NULL) { break;
printf("Do you want to see
cinema? (1/0): "); case 7: printf("Size of list is:
scanf("%d",&flag); %d",lenght()); getch(); break;
if(flag){
printf("Name: %s\n",c->name); case 8: puts("List was sorted by
printf("Adress: %s\n",c->adress); name"); sort_by_name(); getch(); break;
printf("Telephone:%d\n",c-
>num_tel); case 9: printf("[Last] Do you want to
printf("Seats: %d\n",c- see last element? (1/0): ");
>num_seats); scanf("%d",&flag);
printf("Director: %s\n", c->boss); if(flag){
printf("Current adress: %p\n",c); c=last();
printf("Next adress: %p\n",c- printf("Name: %s\n",c->name);
>next); printf("Adress: %s\n",c->adress);
} printf("Telephone:%d\n",c-
} >num_tel);
else puts("Cinema is not founded."); printf("Seats: %d\n",c-
c=NULL; >num_seats);
getch(); printf("Director: %s\n", c->boss);
break; printf("Current adress: %p\n",c);
printf("Next adress: %p\n",c-
case 5: printf("\n[Modify] Enter the >next);
name of cinema to modify: "); }
fflush(stdin); getch();
gets(str); break;
c = search_by_name(str);
if(c!=NULL) { case 10: freemem(); puts("Memory
modify(c); was cleared!"); getch(); break;
} else puts("Cinema is not
founded."); case 11:
getch(); puts("Enter the information about
break; new cinema:");

case 6: printf("\n[Swap] Enter the printf("Name: "); fflush(stdin);


first name of cinema to swap: "); gets(c3.name);
fflush(stdin); printf("Adress: "); fflush(stdin);
gets(str); gets(c3.adress);
c = search_by_name(str); printf("Telephone number: ");
if(c!=NULL){printf("\n[Swap] Enter scanf("%d",&c3.num_tel);
the second name of cinema to swap: "); printf("Seats count: ");
fflush(stdin); scanf("%d",&c3.num_seats);
gets(str); printf("Director: "); fflush(stdin);
c2 = search_by_name(str); gets(c3.boss);
append(c3);
gets(str);
getch(); c = search_by_name(str);
break; if(c!=NULL) {
puts("Enter the information about
case 12: new cinema:");
puts("Enter the information about
new cinema:"); printf("Name: "); fflush(stdin);
gets(c3.name);
printf("Name: "); fflush(stdin); printf("Adress: "); fflush(stdin);
gets(c3.name); gets(c3.adress);
printf("Adress: "); fflush(stdin); printf("Telephone number: ");
gets(c3.adress); scanf("%d",&c3.num_tel);
printf("Telephone number: "); printf("Seats count: ");
scanf("%d",&c3.num_tel); scanf("%d",&c3.num_seats);
printf("Seats count: "); printf("Director: "); fflush(stdin);
scanf("%d",&c3.num_seats); gets(c3.boss);
printf("Director: "); fflush(stdin); insertbefore(c3,c);
gets(c3.boss); }else puts("Cinema isnot found!");
if(prepend(c3)) {puts("True");} else getch(); break;
puts("False"); puts("Inserted!!");
getch(); getch();
break; break;

case 13: printf("\n[Insert] Enter the case 15: printf("\n[Delete ] Enter the
name of cinema to insert after: "); name of cinema to delete: ");
fflush(stdin); fflush(stdin);
gets(str); gets(str);
c = search_by_name(str); c = search_by_name(str);
if(c!=NULL) { if(c!=NULL) {
puts("Enter the information about printf("Cinema %s was deleted", c-
new cinema:"); >name);
deletel(c);
printf("Name: "); fflush(stdin); }else puts("Error occured!");
gets(c3.name); getch();
printf("Adress: "); fflush(stdin); break;
gets(c3.adress);
printf("Telephone number: "); case 16:
scanf("%d",&c3.num_tel); printf("\n Enter the number of
printf("Seats count: "); cinema to divide:");
scanf("%d",&c3.num_seats); scanf("%d",&flag);
printf("Director: "); fflush(stdin); if(flag<=last())
gets(c3.boss); {
insertafter(c3,c); split(head1,head2,2);
}else puts("Cinema isnot found!"); getch();
getch(); break; }else puts("error");
puts("Inserted"); getch();
getch(); break;
break;
case 17:
case 14: printf("\n[Insert] Enter the unirea();
name of cinema to insert before: "); getch();
fflush(stdin); break;
case 18:
save(); default : puts("Invalid option;");
getch(); break;
break; }
case 19: }
load("Cinema.txt"); return 0;
getch(); }
break;

Screenshots:

1Menu

2Introducerea
3Afisarea

4Cautarea

5Modificarea
6Interschimbarea

7Lungimea
Avantaje
1) Adaugare si eleminarea elementelor efecienta (in timp constant)
2) Dimensiunele listei sunt limitate numai de memoria calculatorului
3) Adaugare si eleminerea se efectuieaza in mod dynamic
Dezavantaje:
1) Este complicata accesarea la element listei, mai ales determinarea indexului elementului
in lista.
2) Pentru pastrarea cimpurilor pointelor (exemplu: struct element *next) se utilezeaza
memoria suplimentara spre deosebere de tablou

Concluzie
Efectuind laboratorul acest am obtinut deprinderi teoretice si practice de crearea, intitializarea,
modificarea si prelucrearea tipului abstact de date lista simplu inlantuita. Scrierea programului
mi-a dat expetienta si abilitati pe care voi folosi in continuare. Am determinat avantaje si
dizavantajele listelor inlantuite. Cel mai principal este fapt ca a fost obtinut scopul lucrarii de
laborator: Obinerea deprinderilor practice de implementare i de utilizare a tipului de date
abstract (TDA) Lista simplu nlanuit n limbajul C.

Bibliografie:
1. http://www.aut.upt.ro/~rraul/PC/2009-2010/PC_lab11.pdf [Accesat la 14.05.2017]
2. Code::Blocks IDE http://www.codeblocks.org/ [Accesat la 14.05.2017]
3. Compilator MinGW http://www.mingw.org/ [Accesat la 14.05.2017]
4. Conspect de prelegeri grupa AI-161. Lector M. Kulev

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