Anda di halaman 1dari 5

/* Operatii cu Listelor Liniare Simplu Inlantuite */

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

struct NOD
{
int cheie;
char info[20];
struct NOD *urm;
};
typedef struct NOD Tnod;
typedef Tnod *ref;

ref prim;
ref q,r,s;
int k,b;

void listare(void);

void ins_prim(void)
{
q=malloc( sizeof(Tnod) );
printf("Cheia : "); scanf("%d", &q->cheie);
printf("Informatia : "); fflush(stdin); scanf("%s", q->info);
q->urm=NULL;
prim=q;
} /* ins_prim */

void ins_cf(void)
{
q=malloc( sizeof(Tnod) );
printf("Cheia : "); scanf("%d", &q->cheie);
printf("Informatia : "); fflush(stdin); scanf("%s", q->info);
q->urm=prim;
prim=q;
} /* ins_cf */

void cautare(void)
{
b=0;
r=prim;
while(b==0 && r!=NULL)
if(r->cheie==k) b=1;
else r=r->urm;
} /* Cautare */

void ins_d(void)
{
s=malloc( sizeof(Tnod) );
printf("Cheia : "); scanf("%d", &s->cheie);
printf("Informatia : "); fflush(stdin); scanf("%s", s->info);
s->urm=r->urm;
r->urm=s;
} /* Inserare dupa */
void ins_i(void)
{
s=malloc( sizeof(Tnod) );
*s=*r;
r->urm=s;
printf("Cheia : "); scanf("%d", &r->cheie);
printf("Informatia = "); fflush(stdin); scanf("%s", r->info);
} /* Inserare inainte */

void listare(void)
{
printf("\n");
r=prim;
if(r==NULL)
{
printf("ERROR. Lista este vida !! ");
return;
}
while(r!=NULL)
{
printf("Cheia : %d \t | \t ", r->cheie);
printf("Informatia : %s \n", r->info);
r=r->urm;
}
} /* Listare */

void sterge_d(void)
{
if(r->urm==NULL)
printf("Nu se poate suprima!! 'r' este ultimul NOD !! ");
else
{
s=r->urm;
r->urm=s->urm;
free(s);
}
} /* Sterge_D */

void sterge_n(void)
{
if(r->urm==NULL)
if(r==prim)
{
prim=NULL;
free(prim);
}
else
{
s=prim;
while(s->urm!=r)
s=s->urm;
s->urm=NULL;
free(s);
}
else
{
s=r->urm;
*r=*s;
free(s);
}
} /* Sterge_N */

void creare(void)
{
char op;
if(op=='D')
{
ins_prim();
listare();
printf("Doriti sa mai introduceti date in lista ?! ");
fflush(stdin); scanf("%c", &op); op=toupper(op);
while(op=='D')
{
ins_cf();
listare();
printf("Doriti sa mai introduceti date in lista ?! ");
fflush(stdin); scanf("%c", &op); op=toupper(op);
}
}
} /* Creare */

void main(void)
{
char op;
clrscr();
clrscr();
printf("\t\t\tOperatii cu Listelor Liniare Simplu Inlantuite\n\n");
printf("\t C-Creare. \n");
printf("\t L-Listare. \n");
printf("\t A-Adaugarea unui NOD in fata listei. \n");
printf("\t B-Inserare unui NOD inaintea unui alt NOD. \n");
printf("\t I-Inserare unui NOD dupa un alt NOD. \n");
printf("\t D-Stergerea unui NOD de dupa un NOD dat. \n" );
printf("\t N-Stergerea unui NOD dat. \n");
printf("\t F-Cautarea unui nod dat. \n");
printf("\t E-Iesire!! \n\n");
printf("Introduceti optiunea : ");
fflush(stdin); scanf("%c", &op); op=toupper(op);
do
{
switch(op)
{
case 'C' : creare();
listare();
break;
case 'L' : break;
case 'A' : if(prim==NULL)
printf("ERROR. Lista este vida !!! ");
else
{
ins_cf();
listare();
}
break;
case 'B' : if(prim==NULL)
printf("ERROR. Lista este vida !!!! ");
else
{
printf("Dati cheia NOD-ului ");
printf("inaintea caruia se insereaza : ");
scanf("%d", &k);
cautare();
ins_i();
}
break;
case 'I' : if(prim==NULL)
printf("ERROR. Lista este vida !!! ");
else
{
printf("Dati cheia NOD-ului ");
printf("dupa care se insereaza : ");
scanf("%d", &k);
cautare();
ins_d();
}
break;
case 'D' : if(prim==NULL)
printf("ERROR. Lista este vida !!! ");
else
{
printf("Dati cheia NOD-ului ");
printf("dupa care vreti sa stergeti : ");
scanf("%d", &k);
cautare();
sterge_d();
}
break;
case 'N' : if(prim==NULL)
printf("ERROR. Lista este vida !!! ");
else
{
printf("Dati cheia NOD-ului ");
printf("pe care vreti sa-l inserati : ");
scanf("%d", &k);
cautare();
sterge_n();
}
break;
case 'F': if(prim==NULL)
printf("ERROR. Lista este vida !!! ");
else
{
printf("Introduceti cheia NOD-ului cautat : ");
scanf("%d", &k);
cautare();
if(b==0)
printf("Elementul dat NU exista in Lista! \n");
else
{
printf("Elementul cautat este : \n");
printf("Cheia : %d \t | \t ", r->cheie);
printf("Informatia %s", r->info);
}
}
break;
default : printf("Optiune eronata !! \n");
break;
} /* SWITCH */
listare();
if(op!='E') getch();
}
while (op != 'E');
} /* MAIN */

Anda mungkin juga menyukai