You are on page 1of 6

/* Operatii asupra Listelor Liniare Dublu Inlantuite */

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

#include <string.h>

#include <ctype.h>

struct NOD

int info;

int cheie;

struct NOD *ant, *urm;

};

typedef struct NOD Tnod;

typedef Tnod *ref;

int k;

ref prim;

ref r,s;

void insd_prim(void) /* insereaza primul NOD */

r=(ref)malloc( sizeof(Tnod) );

printf("Cheia : "); scanf("%d", &r->cheie);


printf("Informatia : "); scanf("%d", &r->info);

r->ant=NULL;

r->urm=NULL;

prim=r;

} /* insd_prim */

void insd_cf(void) /* insereaza un NOD la Inceputul Listei */

ref r;

r=(ref)malloc( sizeof(Tnod) );

printf("Cheia : "); scanf("%d", &r->cheie);

printf("Informatia : "); scanf("%d", &r->info);

r->ant=NULL;

r->urm=prim;

prim->ant=r;

prim=r;

} /* insd_cf */

void listare(void)

if(prim==NULL)

printf("ERROR. Lista este vida!! ");

else

printf("\n\tElementele listei sunt : \n");


r=prim;

while(r!=NULL)

printf("Cheia : %2d \t | \t ", r->cheie);

printf("Informatia : %-10d \n", r->info);

r=r->urm;

} /* Listare */

void creare(void)

char c;

printf("Introdu primul NOD al Listei : \n");

insd_prim();

listare();

printf("Continuati ?! [D/N] :");

fflush(stdin); scanf("%c", &c); c=toupper(c);

while(c=='D')

insd_cf();

listare();

printf("Continuati ?! [D/N] : ");

fflush(stdin); scanf("%c", &c); c=toupper(c);

}
} /* Creare */

void sterge_d(void)

ref pred,suc; /* predecesor & succesor */

pred=r->ant;

suc=r->urm;

if(r->ant!=NULL) pred->urm=suc;

if(r->urm!=NULL) suc->ant=pred;

if(r==prim) prim=prim->urm;

free(prim);

} /* Sterge_D */

ref cautare(int k)

int b=0;

r=prim;

while(b==0 && r!=NULL)

if(r->cheie==k)

b=1;

else r=r->urm;

return r;

} /* Cautare */

void main(void)
{

int X;

char op;

prim=NULL;

clrscr();

do

clrscr();

printf("\t\t\t Operatii asupra Listelor Lineare Dublu Inlantuite \n");

printf("C-Creare. \n");

printf("S-Suprimarea unui NOD. \n");

printf("L-Listare. \n");

printf("E-Exit. \n");

printf("Introduceti optiunea : ");

scanf("%c", &op); op=toupper(op);

switch(op)

case 'C': creare();

break;

case 'S': clrscr();

printf("Introdu cheia NOD-ului de sters : \n");

fflush(stdin); scanf("%d", &X);

r=cautare(k);

if(r==NULL)

printf("Nu exista elementul cu cheia data!! \n");


else sterge_d();

break;

case 'L': listare();

break;

case 'E': break;

default : printf("Optiune eronata !! \n");

break;

getch();

}while(op!='E');

} /* MAIN */

You might also like