Documente Academic
Documente Profesional
Documente Cultură
Liste
--------------------------------------------------------------------------------------------------------------------------------
LISTE
1
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
Lista este o structur de date omogen, secvenial, format din elementele listei,
numite i noduri ale listei, care nu trebuie s fie neaprat adiacente n memorie.
n cazul listelor simplu nlnuite un element din list conine unul sau mai multe
tipuri de informaie propriu-zis i o informaie de legtur, care este un pointer ctre
nodul succesor.
Tipul unui element al unei liste simplu nlnuite va fi declarat astfel:
struct TipNod
{
TipInfo1 Info1;
TipInfo2 Info2;
...
TipInfoN InfoN;
TipCheie Cheie;
struct TipNod* Legatura;
};
struct TipNod Nod;
2
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
O list simplu nlnuit poate fi parcurs doar de la nodul Prim la nodul Ultim i
va arta astfel;
Info Legatura Info Legatura Info Legatura NULL
Prim Ultim
3
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
Info Legatura
4
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
struct Nod
{
struct Info Date;
struct Nod* Urm;
};
struct Lista
{
int Lungime;
struct Nod *Prim, *Curent, *Ultim;
};
int Creare (struct Lista *ListaPtr);
int TestVida (struct Lista *ListaPtr);
int Primul (struct Lista *ListaPtr);
int Ultimul (struct Lista *ListaPtr);
int Lungime (struct Lista *ListaPtr);
int Inceput (struct Lista *ListaPtr);
int Sfarsit (struct Lista *ListaPtr);
int Precedent (struct Lista *ListaPtr);
int Pozitionare (struct Lista *ListaPtr, int Pozitie);
void AdaugaSfarsit (struct Lista *ListaPtr, struct Info Nou);
void AdaugaDreapta (struct Lista *ListaPtr, struct Info Nou);
int Stergere (struct Lista *ListaPtr);
int PermDreapta (struct Lista *ListaPtr);
void Ordonare (struct Lista *ListaPtr);
void Afisare (struct Lista *ListaPtr);
void AfisareMeniu ();
void InDatePers (struct Lista *ListaPtr, struct Info InfoInreg);
char c;
struct Lista *ListaTel;
struct Info InfoPers;
int Poz;
int Creare (struct Lista *ListaPtr)
{
ListaPtr->Prim=(struct Nod *)malloc(sizeof(struct Nod));
if (!ListaPtr->Prim) return 0;
ListaPtr->Ultim=(struct Nod *)malloc(sizeof(struct Nod));
if (!ListaPtr->Ultim) return 0;
ListaPtr->Prim->Urm=ListaPtr->Ultim;
ListaPtr->Ultim->Urm=NULL;
ListaPtr->Lungime=0;
ListaPtr->Curent=ListaPtr->Prim;
return 1;
}
int TestVida (struct Lista *ListaPtr)
{
return ListaPtr->Lungime==0;
5
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
6
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
if (ListaPtr->Lungime==0) return 0;
if (ListaPtr->Lungime==1)
{
ListaPtr->Curent=ListaPtr->Prim->Urm;
return 0;
}
Temp=ListaPtr->Curent;
ListaPtr->Curent=ListaPtr->Prim;
if (Temp==ListaPtr->Prim) return 0;
else
{
while (ListaPtr->Curent->Urm!=Temp && Urmator(ListaPtr));
return 1;
}
}
if (Inceput(ListaPtr))
{
do
{
if(ListaPtr->Curent->Date.Ord==Pozitie) return(1);
Urmator(ListaPtr);
l--;
}
while (l>0);
return 0;
}
else return 0;
}
7
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
8
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
ListaPtr->Curent->Date.Tel);
}
while (Urmator(ListaPtr));
printf("Lista are %d abonati.", Lungime(ListaPtr));
}
else printf("Lista este vida\n");
}
void AfisareMeniu(void)
{
clrscr();
gotoxy(20,10);
printf("1.Creare lista - C");
gotoxy(20,11);
printf("2.Adaugare la lista - A");
gotoxy(20,12);
printf("3.Stergere din lista - S");
gotoxy(20,13);
printf("4.Ordonare lista - O");
gotoxy(20,14);
printf("5.Printare lista - P");
gotoxy(20,15);
printf("6.Final program -F");
}
void main(void)
{
do
{
AfisareMeniu();
c=getch();
switch(c)
{
case '1':
case 'c':
case 'C':
Creare(ListaTel);
clrscr();
printf("Lista a fost creata!");
getch();
break;
9
Lucrarea 1. Liste
--------------------------------------------------------------------------------------------------------------------------------
case '2':
case 'a':
case 'A':
InDatePers(ListaTel, InfoPers);
break;
case '3':
case 's':
case 'S':
clrscr();
printf("Numarul de ordine : ");
scanf("%d",&Poz);
if(Pozitionare (ListaTel,Poz))
{
Stergere (ListaTel);
} else
{
printf("Elementul nu exista!");
getch();
break;
}
clrscr();
printf("Elementul a fost sters!");
getch();
break;
case '4':
case 'o':
case 'O':
Ordonare(ListaTel);
clrscr();
printf("Lista a fost ordonata!");
getch();
break;
case '5':
case 'p':
case 'P':
Afisare(ListaTel);
getch();
break;
case '6':
case 'f':
case 'F':
clrscr();
printf("Program terminat!");
break;
default:
clrscr();
printf("Optiune grsita!\n");
getch();
break;
}
}
while ((c!='4') && (c!='f') && (c!='F'));
}
10