Sunteți pe pagina 1din 11

Proiect SDA

SASU IULIAN
Descreierea programului in limbaj natural

Scopul programului este acela de a aplica diferite functii /operatii
utilizand liste . Astfel, utilizatorul introduce de la tastatura o valoare ce
reprezinta numarul de elemente ce vor fi adaugate in lista.Apoi prin
intermediul unei structuri repetitive si al unei functii se creaza lista (se
introduc primele elemente in lista).
In program am folosit functii de afisare si inserare in locatii specifice
(inceput, sfarsit, dupa un anumit element), functia de cautare a unui
anumit element, stergerea unui anumit element si stergerea tuturor
elementelor din lista.

Program(cod sursa)

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

typedef struct nod
{
int info; // valoare
struct nod *next; // pozitia valorii
}
tnod;

tnod *pr,*ul;

int n;

void adauga()
{
tnod *p;
p=(tnod*)malloc(sizeof(tnod));
scanf("%d",&p->info);
p->next=NULL;

if(pr==0)
{
pr=p;
ul=p;
}
else
{
ul->next=p;
ul=p;
}
}
void inserare_inceput(int x)
{
tnod *c;
c=(tnod*)malloc(sizeof(tnod));
c->info=x;

if (pr==0)
{
ul=c;
c->next=NULL;
}

c->next=pr;
pr=c;}
void inserare_sfarsit(int x)
{
tnod *c;
c=(tnod*)malloc(sizeof(tnod));
c->info=x;
c->next=NULL;

if (pr!=0) ul->next=c;
else pr=c;
}

void inserare_after_key(int x,int y)
{
tnod *c,*nc=pr;

while(nc &&nc->info!=y) nc=nc->next;

if(nc)
{
c=(tnod*)malloc(sizeof(tnod));
c->info=x;
c->next=nc->next;
nc->next=c;
if(nc==ul) ul=c;
}

else printf("%d nu exista in lista \n",y);

}

void afisare()
{
tnod *c;
c=pr;
while(c)
{
printf("%d ",c->info);
c=c->next;
}
printf("\n");
}
void cautare()
{
int nrcautat;
if(!pr)
{
printf("Nu se poate cauta in lista deoarece lista nu contine niciun
element");
}
else
{
printf("Nr cautat in lista= ");scanf("%d",&nrcautat);
tnod *c;
c=pr;
while(c != 0)
{ if(c->info == nrcautat){
printf("Numarul %d se aflta in lista!",nrcautat);
break;}
c = c->next;
}


if(c == NULL)
printf("Numarul %d nu este in lista",nrcautat);
}
printf("\n");
}
void stergere()
{
int valoare;
printf("Valoarea nodului sters= ");scanf("%d",&valoare);
tnod *c,*a;
c = pr;
if(pr->info == valoare)
{
a = pr;
pr=pr->next;
free(a);
}
else
{
while(c->next->info != valoare && c)
c=c->next;
a=c->next;
c->next = a->next;
if(a==ul) ul = c;
free (a);
}
}

if(pr==0)
{
printf("Lista nu mai are niciun element");
}
else
{
cr1 = pr;
cr2 = pr->next;
while(!cr2)
{
free(cr1);
cr1=cr2;
cr2=cr2->next;
}
free(cr1);
printf("S-au sters nodurile! \n");
pr = 0;
}
}
int main()
{
int i,x,y;
printf("Nr noduri:");scanf("%d",&n);

for(i=0;i<n;i++)
adauga();
printf("\n");
afisare();

printf("Introduceti valoarea ce va fi inserata la inceputul listei: ");
scanf("%d",&x);
inserare_inceput(x);
afisare();

printf("Introduceti valoarea ce va fi inserata la sfarsitul listei: ");
scanf("%d",&x);
inserare_sfarsit(x);
afisare();

printf("Introduceti valoarea ce va fi inserata in lista: ");
scanf("%d",&x);
printf("Introduceti valoarea dupa care va fi inserata: ");
scanf("%d",&y);
inserare_after_key(x,y);
afisare();

cautare();
printf("\n");

stergere();

printf("\n");
printf("Lista noua este: ");
printf("\n");
afisare();
printf("\n");

printf("\n");
afisare();
printf("\n");

stergere_totala();

printf("lista dupa stergere totala:");
afisare();

printf("\n (programul a rulat toate instructiunile)\n");
getch();
return 0;

}
Executare program

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