Sunteți pe pagina 1din 15

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Departamentul Informatica și Ingenieria Sistemelor

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

A efectuat:
st. gr. C-201 C. Cațer
A verificat:
dr., conf.univ. M. Kulev

Chişinău -2021
Lucrarea de laborator nr.2

Tema: Implementarea tipului abstract de date „Listă unidirecțională”


(„Listă simplu înlănțuită”) în limbajul C. Partea I.

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


tipului abstract de date (TAD) “Listă simplu înlănţuită” în limbajul C cu asigurarea
operațiilor de prelucrare de bază ale listei.

Condiţia problemei (sarcina de lucru) : Să se scrie trei fişiere-text în limbajul C pentru


implementarea și utilizarea TAD “Listă simplu înlănţuită” cu asigurarea operațiilor de prelucrare de bază ale
listei:
1. Fişier antet cu extensia .h, care conține specificarea structurii de date a elementului listei simplu
înlănțuite (conform variantelor) şi prototipurile funcţiilor de prelucrare de bază ale listei.
2. Fişier cu extensia .cpp sau .c, care conține implementările (codurile) funcţiilor declarate în fişierul antet.
3. Fişier al utilizatorului, funcţia mаin() pentru prelucrarea listei cu afişarea la ecran a următorului meniu de
opţiuni de bază:
1. Crearea listei în memoria dinamică.
2. Introducerea informației despre elementele listei de la tastatură.
3. Afişarea informației despre elementele listei la ecran.
4. Căutarea elementului în listă.
5. Modificarea câmpurilor unui element din listă.
6. Determinarea adresei ultimului element din listă.
7. Determinarea lungimii listei (numărul de elemente).
8. Înterschimbarea a două elemente indicate în listă. 28
9. Sortarea listei. 10. Eliberarea memoriei alocate pentru listă.
0. Ieşire din program. Indicaţie: La realizarea operaţiei de afișare la ecran a informaţiei referitor la
elementele listei a se prevedea afișarea adreselor din memorie ale elementelor curent şi următor din listă.

Varianta 3: Hotel
Codul programului:

Fișierul
hotel.h

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

struct hotel{
char denumirea[100];
char adresa[100];
char stele[100];
int costul;
struct hotel* next;
};
typedef struct hotel hotel;
hotel *head;

void introducere(hotel* head);


int create(int n);
void read(hotel* head,int n);
void show(hotel* head);
hotel* searchs(hotel* head,char adr[]);
void modify(hotel *head,hotel* a);
int lenght(hotel* head);
void sorts(hotel* head);
void swaps(hotel* a,hotel* b);
hotel* freem(hotel* head);

Fișierul :
function.c
#include "hotel.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void introducere(hotel* head)


{
hotel *p;
p=head;
if(!p)
p = (hotel*)malloc(sizeof(*p));
printf(" Denumirea: ");
fflush(stdin);
gets(p->denumirea);
printf(" Adresa: ");
fflush(stdin);
gets(p->adresa);
printf(" Stele: ");
gets(p->stele);
printf(" Costul: ");
scanf("%d",&p->costul);
p=p->next;
}

int create(int n)
{
hotel *c,*p;
int i;

for(i=0;i<n;i++)
{
c=(hotel*)malloc(sizeof(*c));
if (i==0)
{
head=c;
} else {
p->next=c;
}
p=c;
}
c->next=NULL;
return 1;
}

void read(hotel* head,int n){


hotel *p;
int i=1;
printf(" Dati informatia despre hotel\n");
p=head;
while(p){
printf("\nHotel %d\n",i++);
printf(" Denumirea: ");
fflush(stdin);
gets(p->denumirea);
printf(" Adresa: ");
fflush(stdin);
gets(p->adresa);
printf(" Stele: ");
fflush(stdin);
gets(p->stele);
printf(" Costul: ");
scanf(" %d",&p->costul);
p=p->next;
if(p==head){
break;}
}
}
void show(hotel* head){
int i=1;
hotel *p;
p=head;
while(p){
printf("Hotel %d\n ",i++);
printf(" Denumirea: %s\n ",p->denumirea);
printf(" Adresa: %s\n ",p->adresa);
printf(" Stele: %s\n ",p->stele);
printf(" Costul: %d\n ",p->costul);
p=p->next;

}
}

hotel* searchs(hotel* head,char adr[]){


hotel *p;
p=head;
while(p){
if(stricmp(p->denumirea,adr)==0){return p;}
p=p->next;
}
return NULL;
}
void modify(hotel *head,hotel* a){
int t;
printf(" Doriti sa modificati denumirea?(1/0): ");
scanf("%d",&t);
if(t){
printf(" Dati denumirea noua: ");
fflush(stdin);
gets(a->denumirea);
}
printf(" Doriti sa modificati adresa?(1/0): ");
scanf("%d",&t);
if(t){
printf(" Dati adresa noua: ");
fflush(stdin);
gets(a->adresa);
}
printf(" Doriti sa modificati stele?(1/0): ");
scanf("%d",&t);
if(t){
printf(" Dati stele nou: ");
fflush(stdin);
gets(a->stele);
}

printf(" Doriti sa modificati costul?(1/0): ");


scanf("%d",&t);
if(t){
printf(" Dati numarul nou al costului: ");
fflush(stdin);
scanf("%d",&a->costul);
}
}
int lenght(hotel* head){
hotel *p;
int l=0;
p=head;
while(p){
l++;
p=p->next;
if(p==head)break;
}
return l;
}
void sorts(hotel* head){
hotel *a,*b;
int i,k,l;
a=(hotel*)malloc(sizeof(hotel));
if(!a){puts(" Memoria nu a fost alocata");
exit(1);}
b=(hotel*)malloc(sizeof(hotel));
if(!b){puts(" Memoria nu a fost alocata");
exit(1);}
l=lenght(head);
for(i=0;i<l-1;i++){
a=head;
b=a->next;
for(k=0;k<l-1-i;k++){
if(stricmp(a->denumirea,b->denumirea)>0){
swaps(a,b);
}
a=a->next;
b=b->next;
}
}
}
void swaps(hotel* a,hotel* b){
hotel *na,*nb;
hotel t;
na=a->next;
nb=b->next;
t=*a;
*a=*b;
*b=t;
a->next=na;
b->next=nb;
}
hotel *freem(hotel* head){
hotel*p,*q;
if(head==NULL)
return NULL;
p=head;
while(p){
q=p;
p=p->next;
free(p);
if(p==head)
break;
}
head=NULL;
return NULL;
}

Fișierul: Main
main.c
#include "functions.c"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

int i=0,l=0,k,n,n1,m=0,id=0,f,rs;
hotel *a,*b,*p,*cautat,*v;
hotel s,y;
char adr[100],adr1[100],adr2[100],num[100],*fname;
int optiune;
optiune=0;
do{
system("CLS");
printf("\t\t\tLucrarea de laborator 2\n\t\t\t\tla disciplina\n\t\t\tStructuri de date
si algoritmi \n\n");
puts(" >> MENU <<");
puts(" 1. Crearea listei.");
puts(" 2. Introducerea datelor.");
puts(" 3. Afisarea datelor.");
puts(" 4. Cautarea unui element.");
puts(" 5. Modificarea listei.");
puts(" 6. Determinarea lungimei listei.");
puts(" 7. Sortarea elementelor.");
puts(" 8. Interschimbarea a 2 elemente.");
puts(" 9. Eliberaraea memoriei.");
puts(" 0. Iesire.");
printf("\n Alegeti optiunea: ");
scanf("%d",&optiune);
switch (optiune){
case 1: {
printf(" Dati numarul de hotele: ");
scanf("%d",&n);
n1=create(n);
system("PAUSE");
break;
}
case 2: {
if(!head){
puts(" Memoria nu a fost alocata");
getch();
break;
}
if(!id)
{ read(head,n);
id=1;
}
else
puts(" Datele au fost deja introduse");
system("PAUSE");
break;
}
case 3: {
if(!head){puts(" Memoria nu a fost alocata");}
if(id)
{
puts(" Lista de structuri");
show(head);
}
else
{
printf(" Doriti sa introduceti informatia?(1/0): ");
scanf("%d",&f);
if(f)
{read(head,n);
id=1;
puts(" Lista de structuri");
show(head);
}
}

system("PAUSE");
break;
}
case 4: {
printf(" Introduceti denumirea de cautat: ");
fflush(stdin);
gets(adr);
p=searchs(head,adr);
if(p==0){
puts(" Hotelul nu a fost gasit in baza de date");
puts(" Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
puts(" Hotelul cautat");
printf(" Denumirea: %s\n Adresa: %s\n Stele: %s\n Costul: %d\n",p-
>denumirea,p->adresa,p->stele,p->costul);
system("PAUSE");
break;
}
case 5: {
printf(" Dati denumirea hotelului pe care doriti sa-l modificati: ");
fflush(stdin);
gets(adr);
cautat=searchs(head,adr);
if(cautat==0)
{
puts(" Hotelul nu a fost gasit in baza de date");
puts(" Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
modify(head,cautat);
printf(" Doriti sa afisati hotelul modificat?(1/0): ");
scanf("%d",&f);
if(f)
{
puts(" Hotelul dupa modificare");
show(cautat);
puts("\n Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
else break;

system("PAUSE");
break;
}
case 6: {
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
k=lenght(head);
printf(" Lungimea listei este << ");
printf("%d",k);
printf(" >>\n");
system("PAUSE");
break;
}
case 7: {
sorts(head);
puts(" Lista a fost sortata");
printf(" Doriti sa afisati lista sortata(1/0): ");
scanf("%d",&f);
if(f)
{
puts(" Lista dupa sortare");
show(head);
}
puts("\n Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
system("PAUSE");
break;
}
case 8: {
printf(" Dati adresa primului element de schimbat: ");
fflush(stdin);
gets(adr1);
a=searchs(head,adr1) ;
if(a==0)
{
puts(" Elementul cu asa adresa nu a fost gasit");
getch();
break;
}
printf(" Dati adresa la al doilea element de schimbat: ");
fflush(stdin);
gets(adr2);
b=searchs(head,adr2);
if(b==0)
{
puts(" Elementul cu asa adresa nu a fost gasit");
getch();
break;
}
swaps(a,b);
puts(" Interschimbarea elementelor a fost efectuata cu succes");
printf(" Doriti sa fie afisata lista modificata(1/0): ");
scanf("%d",&f);
if(f)
{
printf(" Lista dupa interschimbare\n");
show(head);
}
puts("\n Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;

system("PAUSE");
break;
}
case 9: {
head=freem(head);
if(head)
puts(" Lista nu a fost eliberata") ;
if(!head)
id=0;
puts(" Memoria a fost eliberata cu succes!!!");
system("PAUSE");
break;
}
case 0:{

printf(" Doriti sa iesiti?(1/0): ");


scanf("%d",&f);
if(f)
{
if(head)
{
free(head);
head=NULL;
}
return 0;
}
else
break;
default:
puts(" Alegeti optiunea corect");
getch();
}
}
}
while(optiune!=0);
getch();
return 0;
}
Rezultatele obținute:
Analiza rezultatelor și concluzii:
In cadrul acestei lucrari de laborator am facut cunostinta cu listele simplu inlantuite.
Am invatat si avantajul folosirei listelor fata de structurile simple.
In cazul structurilor care trebuie sa-si pastreze in timpul exploatarii ordonarea dupa un anumit criteriu,
mecanismul vectorilor este greoi.In aceste cazuri, se poate alege ca solutie de implementare a structurii
de date lista, care nu este o structura fizica de organizare a datelor, ci o structura logica, ce degreveaza
programatorul de ordonarea dupa indice a structurii, impusa de vectori.

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

  • Atestare RC2
    Atestare RC2
    Document6 pagini
    Atestare RC2
    Ludmila Cațer
    Încă nu există evaluări
  • Lab 8 Fizica
    Lab 8 Fizica
    Document3 pagini
    Lab 8 Fizica
    Ludmila Cațer
    0% (1)
  • Lab 10c
    Lab 10c
    Document4 pagini
    Lab 10c
    Ludmila Cațer
    100% (1)
  • Lucrarea de Laborator 10c
    Lucrarea de Laborator 10c
    Document3 pagini
    Lucrarea de Laborator 10c
    Ludmila Cațer
    Încă nu există evaluări
  • Lab 8 Fizica
    Lab 8 Fizica
    Document3 pagini
    Lab 8 Fizica
    Ludmila Cațer
    0% (1)
  • Lucrarea de Laborator 10c
    Lucrarea de Laborator 10c
    Document3 pagini
    Lucrarea de Laborator 10c
    Ludmila Cațer
    Încă nu există evaluări
  • Lucrarea de Laborator 10c
    Lucrarea de Laborator 10c
    Document3 pagini
    Lucrarea de Laborator 10c
    Ludmila Cațer
    Încă nu există evaluări
  • Laborator 5
    Laborator 5
    Document6 pagini
    Laborator 5
    Ludmila Cațer
    Încă nu există evaluări
  • Laborator 5
    Laborator 5
    Document6 pagini
    Laborator 5
    Ludmila Cațer
    Încă nu există evaluări
  • Laboratorul 3
    Laboratorul 3
    Document8 pagini
    Laboratorul 3
    Ludmila Cațer
    Încă nu există evaluări
  • Lab6 CR-201
    Lab6 CR-201
    Document20 pagini
    Lab6 CR-201
    Ludmila Cațer
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document12 pagini
    Lab 4
    Ludmila Cațer
    Încă nu există evaluări
  • MATLAB Laborator N.1
    MATLAB Laborator N.1
    Document5 pagini
    MATLAB Laborator N.1
    Ludmila Cațer
    Încă nu există evaluări