Sunteți pe pagina 1din 17

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Catedra Automatică și Tehnologii Informaționale

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

Chişinău -2017
Lucrarea de laborator nr.2-3
Tema: Implementarea tipului de date abstract “Lista simplu înlanţuită” în C.

Scopul lucrării: Obţinerea deprinderilor practice de implementare și de utilizare a tipului de


date abstract (TDA) “Lista simplu înlanţuită” în limbajul C.

Condiţia problemei (sarcina de lucru)


Sarcina de lucru: De scris trei fişiere-text în limbajul C pentru implementarea și utilizarea TDA
“Lista simplu înlanţuită”:
1. Fişierul antet lista.h care conține: a) specificația structurei elementului listei simplu înlanţuite
(conform variantei din lucrarea de laborator nr.1) şi b) prototipurile funcţiilor care asigură
operaţiunile de prelucrare a listei simplu înlanţuite.
2. Fişierul lista.cpp sau lista.c care conţine codurile (implementările) tuturor funcţiilor declarate
în fişierul antet.
3. Fişierul utilizatorului lab2_3.cpp sau lab2_3.c care reprezintă programul cu funcţia main ( )
pentru prelucrarea listei simplu înlanţuite cu afişarea meniului de opţiuni pe ecran si anume:

pentru lucrarea de laborator nr.2


1. crearea listei simplu inlanţuite cu n elemente în memoria dinamică,
2. întroducerea informaţiei despre elementele listei de la tastatură,
3. afişarea informaţiei despre elementele listei pe ecran (precum și afișarea adreselor
elementului current și următor),
4. căutarea elementului listei dupa unui cîmp informaţional al structurei,
5. modificarea cîmpurilor elementului listei,
6. interschimbarea a 2 elemente indicate ale listei,
7. determinarea lungimii listei,
8. sortarea elementelor listei după unui cîmp,
9. determinarea adresei ultimului eliment al listei,
10. eliberarea memoriei dinamice allocate pentru lista,
11. ieşire din program;
pentru lucrarea de laborator nr.3
1. adăugarea unui element nou la sfirşitul listei,
2. adăugarea 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 înlanţuite in două liste separate,
7. unirea a 2 liste simlu înlanţuite intr-o listă,
8. scrierea (salvarea) informaţiei despre elementele listei în fişier,
9. citirea informației despre elementele listei din fişier.

Varianta: 4) Cinematograf
Mersul lucrării:

Noţiuni principale din teorie şi metode folosite:

Liste simplu inlantuite:

O listă simplu înlănţuită este o structură de date ce utilizează alocarea dinamică a memoriei. Un
element al listei se numeşte nod. Fiecare nod al unei liste conţine un câmp care are rolul de a
indica adresa următorului element din listă.

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

Crearea listelor simplu înlănţuite

O lista simplu înlănţuită poate fi creata în felul următor:

 Prin inserare la început;


 Prin inserare la sfârşit;
 Prin inserare ordonată;
Toate operaţiile de inserare a unui nod într-o listă presupun întâi alocarea dinamică a memoriei
pentru nodul ce urmează să se insereze. În cazul în care avem câmpuri de tip şir de caractere
declarate ca şi pointer la char, trebuie alocată memorie şi pentru ele. Pentru alocare se utilizează
funcţia malloc.
nod *p=(nod*)malloc(sizeof(nod));

După alocare urmează introducerea informaţiei utile în câmpurile nodului. Pentru


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

Toate operaţiile cu liste simplu înlănţuite (inserare, căutare, ştergere,afişare) pornesc de la


primul element al listei. Accesul la un anumit element al listei se face secvenţial, accesând
nodurile aflate înaintea sa în înlanţuire şi pornind de la primul element al listei. Dacă lista este
vidă primul element indică spre NULL.
În exemplele următoare 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 - conține:
 specificația structurei elementului listei simplu înlanţuite (conform variantei din
lucrarea de laborator nr.1)
 prototipurile funcţiilor care asigură operaţiunile de prelucrare a listei simplu
înlanţuite.
2. lista.c - conţine codurile (implementările) tuturor funcţiilor declarate în fişierul antet.
3. main.c - reprezintă programul cu funcţia main ( ) pentru prelucrarea listei simplu înlanţuite cu
afişarea meniului de opţiuni pe ecran.

1) Functia: create - crearea listei simplu inlanţuite 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 informaţiei despre elementele listei de la tastatură


Parametrii functiei:
 -
Valoare returnabila:
 -

3) Functia: show - afişarea informaţiei despre elementele listei pe ecran (precum și afișarea
adreselor elementului current și următor
Parametrii functiei:
 -
Valoare returnabila:
 -

4) Functia: search_by_name - căutarea elementului listei dupa unui cîmp informaţional 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 cîmpurilor 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 - adăugarea unui element nou la sfirşitul listei.
Parametrii functiei:
 ap – variabila de tip cinema, structura cinematografului pentru adaugare.
Valoare returnabila:
 -
11) Functia: prepend - adăugarea 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 înlanţuite 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 înlanţuite intr-o listă.
Parametrii functiei:
 -
Valoare returnabila:
 1 – daca functia sa executat fara erori,
 0 – daca au fost errori
17) Functia: save - scrierea (salvarea) informaţiei despre elementele listei în fişier.
Parametrii functiei:
 -

Valoare returnabila:
 1 – daca functia sa executat fara erori,
 0 – daca au fost errori
18) Functia: load - citirea informației despre elementele listei din fişier.
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" printf("\n");
#include <stdio.h> puts("Informations about cinema's");
#include <stdlib.h> c=head;
#include <string.h> printf("\thead=%p\n",c);
//printf("\thead=%p\n",&c);
int create(int n) while(c)
{ {
cinema *c, *p; printf("\n\tCinematograf number
int i; %d\n",i+1);
printf("Name: %s\n",c->name);
for(i=0;i<n;i++) printf("Adress: %s\n",c->adress);
{ printf("Telephone:%d\n",c->num_tel);
c=(cinema*)malloc(sizeof(*c)); printf("Seats: %d\n",c->num_seats);
if(!c) {return i+1;} printf("Director: %s\n", c->boss);
if(i==0) {head=c;} printf("Current adress: %p\n",c);
else {p->next=c;} printf("Next adress: %p\n",c->next);
p=c;
} c=c->next; i++;
c->next=head; if(c==head) break;
return 0; }
} }

void read() cinema *search_by_name(char *a)


{ {
cinema *c; cinema *c;
int i=0; c=head;
c=head; spliter = 0;
while(c) while(c)
{ {
printf("\n\tCinema number if(strcmp(c->name,a)==0)
%d:\n",i+1); return c;
printf("Name: "); fflush(stdin); gets(c- spliter++;
>name); c=c->next;
printf("Adress: "); fflush(stdin); gets(c- if(c==head) break;
>adress); }
printf("Telephone number: "); return NULL;
scanf("%d",&c->num_tel); }
printf("Seats count: "); scanf("%d",&c-
>num_seats); void modify(cinema *c)
printf("Director: "); fflush(stdin); {
gets(c->boss); int flag;
printf("Do you want to modify name?
c=c->next; (1/0): ");
if(head==c) break; scanf("%d",&flag);
i++; if(flag){
} printf("Current Name: %s\n",c->name);
} printf("New Name: "); fflush(stdin);
gets(c->name);
void show() }
{ printf("Do you want to modify adress?
cinema *c; (1/0): ");
int i=0; scanf("%d",&flag);
if(flag){ {
printf("Current Adress: %s\n",c- cinema *c;
>adress); int l=0;
printf("New Adress: "); fflush(stdin); c=head;
gets(c->adress); while(c)
} {
printf("Do you want to modify telephone l++;
number? (1/0): "); c=c->next;
scanf("%d",&flag); if(c==head) break;
if(flag){ }
printf("Current telephone: %d\n",c- return l;
>num_tel); }
printf("New telephone: ");
scanf("%d",&c->num_tel); void sort_by_name(void)
} {
printf("Do you want to modify number of int n,i,k; cinema *a, *b;
seats? (1/0): "); n=lenght();
scanf("%d",&flag); for(i=0; i<n; i++)
if(flag){ {
printf("Current number of seats: %d\n",c- a=head; b=a->next;
>num_seats); for(k=0;k<n-1-i;k++)
printf("New number: "); scanf("%d",&c- {
>num_seats); if(strcmp(a->name,b->name)>=1)
} {
swop(a,b);
printf("Do you want to modify director? }
(1/0): "); a=a->next;
scanf("%d",&flag); b=b->next;
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;
int lenght(void) 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;
while(c->next!=a) void split(cinema **head_1, cinema
{ **head_2, int n)
{ 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");
printf("Current adress: %p\n",B); fprintf(ExcelFile,"Nr,Name,Adress,Tel.
printf("Next adress: %p\n",B->next); Number,Seats,Director,Current,Next\n");
while(S) cinema *S;
{ S=(cinema*)malloc(sizeof(*S));
i++; FILE *fp;
fprintf(ExcelFile,"%d,%s,%s,%d,%d, int i,l;
%s,%p,%p\n",i,S->name,S->adress,S- fp=fopen(filen,"r");
>num_tel,S->num_seats,S->boss,S,S- if(!fp){return 0;}
>next); S=head;
fprintf(Notepad,"%s %s %d %d while(!feof(fp))
%s\n",S->name,S->adress,S->num_tel,S- {
>num_seats,S->boss,S,S->next); fscanf(fp,"%s %s %d %d %s",S-
S=S->next; >name,S->adress,&S->num_tel,&S-
if(head==S) break; >num_seats,S->boss);
}fclose(ExcelFile); S=S->next;
fclose(Notepad); if(head==S) break;
return; }
} fclose(fp);
return 1;
int load(char* filen) }
{

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


name of cinema to insert after: "); the 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;
gets(str); case 18:
c = search_by_name(str); save();
if(c!=NULL) { getch();
break; default : puts("Invalid option;");
case 19: break;
load("Cinema.txt"); }
getch(); }
break; return 0;
}

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: “Obţinerea deprinderilor practice de implementare și de utilizare a tipului de date
abstract (TDA) “Lista simplu înlanţuită” î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