Documente Academic
Documente Profesional
Documente Cultură
al Republicii Moldova
RAPORT
despre lucrarea de laborator Nr. 9
la Programarea calculatoarelor
Varianta 7
A efectuat:
st. gr. RM-201 Grosu Maxim
A verificat:
Lector univ. Stratulat Stefan
Chişinău – 2021
Lucrare de laborator nr.9
Теmа: Implementarea tipului abstract de date „Listă unidirecțională”
(„Listă simplu înlănțuită”) în limbajul C.
Partea II
Codul :
Fisierul .h
//lista simpla inlatuita
typedef struct casa
{
char adress[40];
int cam;
char tel[40];
char aria[40];
float cost;
struct casa* next;
}Casa;
Casa *head;
Casa *head2;
#include "functii.c"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
S=lastElement();
printf("Adresa ultimui element al listei: %x %x \n", S, S->next);
getch();
break;
case 7:
n=sizeList();
printf("Lungime listei este %d\n", n);
getch();
break;
case 8:
break;
case 16:
flag=unite();
if (flag){
puts("Lista a fost unita.");
}
else {
puts("Nu avem ce uni. ");
}
getch();
break;
case 17:
puts("Dati adresa fisierului unde va fi salvata informatia");
fflush(stdin);
gets(fname);
flag=save(fname);
if (flag==1){
puts("Informatia a fost salvata");
}
if(flag==0){
puts("Nu s-a putut salva informatia...");
}
if (flag==-1){
puts("Lista este vida. Nu salvez nimic!");
}
getch();
break;
case 18:
puts("Dati adresa fisierului de unde va fi citita informatia");
fflush(stdin);
gets(fname);
flag=load(fname);
if (flag==1){
puts("Informatia a fost salvata");
}
if (flag==0){
puts("Nu s-a putut salva informatia...");
}
if (flag==-1){
puts("Aloca memorie si dupa citeste din fisier!!!");
}
getch();
break;
case 19:
freeMemory();
puts("memoria a fost eliberata. Tastati enter pentru a continua");
getch();
break;
case 0:
printf("Doriti sa iesiti din program? (1/0): ");
scanf("%d", &flag);
if(flag==1) return 0;
puts("Pentru a continua apasati tasta Enter");
getch();
break;
default: puts("Alegeti optiunea corecta din menu! ");
puts("Pentru a continua apasati tasta Enter");
getch();
} // end switch
} // end while
}
#include "_Disp.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int createList(int n)
{
Casa* c, *p;
int i;
for(i=0;i<n;i++){
c=(Casa*)calloc(1,sizeof(*c));
if (c==NULL) { head=NULL; return 0;}
if(i==0) { head =c; }
else
{ p->next=c; }
p=c;
}
c->next=NULL; // c->next=head;
return 1;
}
void readInfo(void)
{
Casa *c;
int i;
puts("Dati info despre Discipline: ");
c=head;
i=0;
while(c)
{
readElement(c);
c=c->next;
i++;
}
return;
}
void showInfo(void)
{
Casa*c,*p;
int i;
c=head;
i=0;
if (head==NULL){
puts("Alocati macar memorie (-_-)");
return;
}
puts("Info despre Discipline: ");
while(c)
{
printf("Disciplina[%d].denumirea: %s anul: %s Facultatea: %s departamentul: %s numarul de
ore: %s",i+1,c->adress,c->cam,c->aria,c->tel,c->cost);
i++;
printf("\tadress elem:%x\t",c);
c=c->next;
printf("adress next:%x\n",c);
if(c==head) break;
}
p=head2;
i=0;
if (head2==NULL){
return;
}
puts("Info despre Discipline: ");
while(p)
{
printf("Disciplina[%d].denumirea: %s anul: %s Facultatea: %s departamentul: %s numarul de
ore: %s ",i+1,p->adress,p->cam,p->aria,p->tel,p->cost);
i++;
printf("\tadress elem:%x\t",p);
p=p->next;
printf("adress next:%x\n",p);
if(p==head) break;
}
return;
}
Casa* searchElement(char* v)
{
Casa*c;
c=head;
while(c)
{
if(stricmp(c->adress, v)==0) {return c;}
c=c->next;
if(c==head) break;
}
return NULL;
}
void modifyInfo(Casa* c)
{
int f;
printf("De modificat adresa Disciplinei? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati denumirea:");
fflush(stdin);
gets(c->adress);
}
printf("De modificat anul? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati anul:");
scanf("%d", &c->cam);
}
printf("De modificat Facultatea? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati Facultatea:");
scanf("%d", &c->cost);
}
printf("De modificat departamentul? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati nr de departamentul:");
scanf("%s", &c->tel);
}
printf("De modificat numarul de ore ? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("numarul de ore:");
scanf("%f", &c->aria);
}
return;
}
Casa* lastElement(void)
{
Casa*c;
c=head;
while(c->next!=NULL)
{
c=c->next;
if (c->next==head){
break;
}
}
return c;
}
int sizeList(void)
{
Casa*c;
int n;
c=head;
n=0;
while(c){
n++;
c=c->next;
if(c==head) break;
}
return n;
}
void sortList(void)
{
int i,k;
Casa *a,*b;
int n;
n=sizeList();
for(i=0; i<n;i++)
{a=head;
b=a->next;
for(k=0;k<n-1-i;k++)
{
if(stricmp(a->adress,b->adress)>0)
{
swap(a,b);
}
a=a->next;
b=b->next;
}
}
return;
}
void appendElement(){
Casa *c;
if (head==NULL)
{
c=(Casa*)malloc(sizeof(*c));
head=c;
c->next=NULL;
readElement(c);
return;
}
Casa *temp=lastElement();
c=(Casa*)malloc(sizeof(*c));
readElement(c);
temp->next=c;
c->next=NULL;
}
void prependElement(){
Casa *c;
c=(Casa*)malloc(sizeof(*c));
readElement(c);
c->next=head;
head=c;
}
}
p=searchElemP(c);
if ((c==NULL)||(p==NULL)){
return 0;
}
p->next=NULL;
head2=c;
return 1;
int unite ()
{
Casa *c;
if ((head==NULL)||(head2==NULL)){
return 0;
}
c=lastElement();
c->next=head2;
head2=NULL;
return 1;
}
void freeMemory()
{
Casa*c,*p;
c=head;
while(c){
p=c;
c=c->next;
free(p);
if(c==head) break;
}
head=NULL;
c=head2;
while (c){
p=c;
c=c->next;
free(p);
if(c==head) break;
}
head2=NULL;
return;
}
Concluzie: In cadrul acestei lucrari de laborator am facut cunostinta cu listele simplu
inlantuite. Am invatat si avantajul folosirei listelor fata de structurile simple. Listele ocupa o
zona mai mare de memorie comparabil cu tabloul de structure datorita campului alocat pentru
adresa urmatorul element. Desi ocupa mai multa memorie listele sunt o obtiune mai buna
atunci cand vrem sa stocam un numar mare de elemente. Asta deoarece lista ocupa parti din
memorie lagate intre ele cu noduri. In cazul tabloului de structure care ocupa o zona solida de
memorie. 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.