Documente Academic
Documente Profesional
Documente Cultură
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.
Varianta: 4) Cinematograf
Mersul lucrrii:
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;
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.
3) Functia: show - afiarea informaiei despre elementele listei pe ecran (precum i afiarea
adreselor elementului current i urmtor
Parametrii functiei:
-
Valoare returnabila:
-
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.
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 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