AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Paduraru Vadim
CR - 192
Raport
pentru lucrarea de laborator Nr.8/9
la cursul de “SDA”
Теmа: Implementarea tipului abstract de date
„Listă unidirecțională” („Listă simplu
înlănțuită”) în limbajul C/ Implementarea
tipului abstract de date „Listă unidirecțională”
(„Listă simplu înlănțuită”) în limbajul C
Verificat:
M. Kulev
Scopul lucrării: Obţinerea deprinderilor practice de
implementare și de utilizare a tipului abstract de date (TAD) “Listă
simplu înlanţuită” în limbajul C cu asigurarea operațiilor de
prelucrare ale listei.
MAIN:
#include "imobil.h"
void Menu()
printf("---------------------------Menu---------------------------\n");
printf("----------------------------------------------------------\n");
printf("Optiunea: ");
int main()
char str[50];
int n;
int g;
int k;
int i;
int nr;
int nrn;
char denum[50];
char md[50];
Imobil *ab;
Imobil *search;
Imobil *modify;
Imobil *Last;
Imobil *b;
Imobil *v;
Imobil *m;
Imobil *c;
Imobil *t;
Imobil *z;
Imobil *a;
Imobil *phead2;
Imobil *phead1;
int n1;
char fname[50];
int l,f;
nrn=0;
while (1)
Menu();
scanf("%d", &g);
switch (g)
case 1:
scanf("%d", &n);
create(n);
break;
case 2:
readinfo();
break;
case 3:
showinfo();
break;
case 4:
scanf("%s", &denum);
search = Search(denum);
if (search == NULL) {
} else {
break;
case 5:
scanf("%d",&nr);
c=currentelement(nr);
modifyinfo(c);
break;
case 6:
scanf("%d",&nr);
Last=currentelement( nr);
if (Last== NULL) {
} else {
break;
case 7:
break;
case 8:
scanf("%d",&nr);
a=currentelement(nr);
scanf("%p",&nr);
b=currentelement(nr);
swap(a,b);
break;
case 9:
sort();
break;
case 10:
fflush(stdin);
gets(z->proprietar);
printf("Dati tipul imobilului:");
fflush(stdin);
gets(z->tip);
fflush(stdin);
gets(z->adresa);
printf("Dati suprafata:");
scanf("%d",&z->suprafata);
scanf("%f",&z->costul);
apprend(z);
break;
case 11:
fflush(stdin);
gets(z->proprietar);
fflush(stdin);
gets(z->tip);
printf("Dati adresa:");
fflush(stdin);
gets(z->adresa);
printf("Dati suprafata:");
scanf("%d",&z->suprafata);
scanf("%f",&z->costul);
prepend(z);
break;
case 12:
fflush(stdin);
gets(z->proprietar);
fflush(stdin);
gets(z->tip);
fflush(stdin);
gets(z->adresa);
printf("Dati suprafata:");
scanf("%d",&z->suprafata);
printf("Dati costul:");
scanf("%f",&z->costul);
scanf("%d",&nr);
b=currentelement(nr);
insertbefore(b,z);
break;
case 13:
fflush(stdin);
gets(z->proprietar);
fflush(stdin);
gets(z->tip);
fflush(stdin);
gets(z->adresa);
printf("Dati suprafata:");
scanf("%d",&z->suprafata);
printf("Dati costul:");
scanf("%f",&z->costul);
scanf("%d",&nr);
b=currentelement(nr);
insertafter(b,z);
break;
case 14:
scanf("%d",&nr);
a=currentelement(nr-1);
deleteElement(a);
break;
case 15:
scanf("%d",&n1);
phead1=currentelement(n1);
splitList(n1);
break;
case 16:
printf("Lista unita");
mergeList();
break;
case 17:
scanf("%s", fname);
saveElement(fname);
break;
case 18:
scanf("%s", fname);
if (head != NULL)
freememory();
loadElement(&nrn, fname);
break;
case 19:
freememory();
break;
case 0:
exit(0);
break;
default:
break;
return (0);
FUNCTION.C
#include "imobil.h"
int create(int n)
Imobil *c,*p;
int i;
for(i=0;i<n;i++)
c=(Imobil*)malloc(sizeof(*c));
if (i==0)
head=c;
} else {
p->next=c;
p=c;
c->next=NULL;
return 1;
void readinfo(void)
{ Imobil *c;int i;
c=head;
i=0;
while(c)
{i=i+1;
printf("Imobilul ");
printf("%d\n",i);
fflush(stdin);
gets(c->proprietar);
fflush(stdin);
gets(c->tip);
printf("Dati adresa:");
gets(c->adresa);
printf("Dati suprafata:");
scanf("%d",&c->suprafata);
printf("Dati costul imobilului:");
scanf("%f",&c->costul);
c=c->next;
void showinfo(void)
{Imobil *c;
int i;
c=head;i=0;
while(c)
c=c->next;i++;
if(c==head)
{break;}
}}
{ char denum[50];
scanf("%s",denum);
strcpy(c->proprietar,denum);
}
Imobil *Search(char *denum)
{Imobil *c;
c=head;
while(c)
{if (strcmp(c->proprietar,denum)==0)
return c;
c=c->next;
return c;
{Imobil *c;
int i=1;
c=head;
{c=c->next;
i++;
if(i==nr)
{return c;}
else
return NULL;
Imobil *lastelement(void)
{Imobil *c;
c=head;
while(c->next)
{c=c->next;
if(c->next==head)
{break;}
return c;
{Imobil *c;
if(a==NULL||head==NULL)
{return NULL;}
if(a==head)
{return NULL;}
c=head;
while(c->next==a)
{c=c->next;}
return c;
int sizelist(void)
{Imobil *c;
int n;
c=head;n=0;
while(c)
{n++;
c=c->next;
return n;
{Imobil *na,*nb,t;
na=a->next;
nb=b->next;
t=*a;
*a=*b;
*b=t;
a->next=na;
b->next=nb;
void sort(void)
{Imobil *a,*b;
int n;
int i,k;
Imobil *na,*nb,t;
n=sizelist();
for(i=0;i<n;i++)
{a=head;
b=a->next;
for(k=0;k<n-1-i;k++)
{
na=a->next;
nb=b->next;
t=*a;
*a=*b;
*b=t;
a->next=na;
b->next=nb;
a=a->next;
b=b->next;
void freememory(void)
{ Imobil *p;
head;
while(head)
{p=head->next;
free(head);
head = p;
Imobil *ptr;
if(head==a)
{if(a->next==NULL)
{head=NULL;
free(a);
return;
head=a->next;
free(a);
return;
else {
ptr = previousElement(a);
ptr->next = a->next;
free(a);
return;
{Imobil *c;
int i=0;
c=head;
for(i=0;i<n1-1;i++)
{c=c->next;}
phead2=c->next;
phead1 = head;
c->next=NULL;
i=1;
while(c!=NULL)
c=c->next;
i++;}
i = 1;
c = phead2;
while(c!=NULL)
c=c->next; i++;
void mergeList(void)
Imobil *add;
add = phead1;
while(add->next) {
add = add->next;
add->next = (Imobil*)malloc(sizeof(Imobil));
add->next = phead2;
head = phead1;
add = phead1;
return;
Imobil *c;
FILE *fp;
int i;
c=head;
fp=fopen(fname,"w");
if(fp==NULL)
{return 0;}
while(c)
c=c->next;}
fclose(fp);
return(1);
FILE *fp;
int i;
fp = fopen(fname, "r");
create(*nrn);
i = 0;
ptr = head;
ptr = ptr->next;
i++;
p1->next = NULL;
fclose(fp);
{Imobil *v;
v=(Imobil*)malloc (sizeof(Imobil));
if(v==NULL)
{return ;}
*v=*z;
v->next=NULL;
if(head==NULL)
head=v;
else{
lastelement()->next=v;
v->next=NULL;}
return ;
Imobil *s;
s=(Imobil*)malloc(sizeof(Imobil));
if(s==NULL)
{return ;}
*s=*z;
s->next=head;
head=s;
return ;
{ Imobil *v;
v=(Imobil*)malloc(sizeof(Imobil));
if(v==NULL)
{return 0;
}
*v=*z;
v->next=b->next;
b->next=v;
return 1;
{Imobil *v;
Imobil *a;
v=(Imobil*)malloc(sizeof(Imobil));
if(v==NULL)
{return 0;
*v=*z;
v->next=b;
if(head==b)
head=v;
else
previousElement(a)->next=v;
return 1;
}
IMOBIL.H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char proprietar[50];
char tip[50];
char adresa[50];
int suprafata;
float costul;
} Imobil;
void Menu();
void readinfo(void);
void showinfo(void);
int sizelist(void);
void sort(void);
void freememory(void);
void mergeList(void);
Raspuns:
Concluzie: In aceasta lucrare de laborator am obtinut deprinderile
practice de implementare si de utilizare a tipului abstract de date
(TAD)”Lista simplu inlantuita” in limbajul C cu asigurarea operatiilor de
prelucrare ale liste. Am invatat sa implementam tipul abstract de date
“Lista unidirectionala” (“Lista simplu inlantuita”) in limbajul C.