Documente Academic
Documente Profesional
Documente Cultură
Raport
Lucrare de laborator Nr.2-3
La Structuri de Date si Algoritmi
A efectuat:
Chiinu 2011
7 Concluzie:
In cadrul acestei lucrari de laborator am insusit implementarea tipului abstract de
date lista simplu nlnuit. Acestea pot fi cu usurinta folosite la crearea bazelor de
date, arborilor binari, cozilor, stivelor etc., asfel reducind timpul necesar pentru
eleborare programelor.
Bibliografia folosita:
-Conspect dat la prelegeri de catre M.Kulev pentru studentii grupelor calculatoare
pe tema Prelucrarea tablourilor de structure.Implimentarea tipului abstract de date
lista simplu inlantuita.
-Gabriela Serban- Tipuri Abstracte de Date- in forma electronica, format pdf.
ANEXA
Listingul programului :
1)Fisierul antet stat.h :
typedef struct stat
{
char nume[30];
char capitala[20];
int suprafata;
int populatie;
char PIB[20];
struct stat *next;
} stat;
void antet(void);
void afisare(stat * c,int i);
stat* create(int n);
void afisare1(void);
void afisare2(stat*head,int i);
void introducere(stat *head);
void input(stat*head);
void output(stat*head);
stat* elib(stat*head);
stat* search1(stat*head,char num[]);
stat*search2(stat*head,char cap[]);
stat*search3(stat*head,int s);
stat*search4(stat*head,int pop);
stat*search5(stat*head,char pib[]);
void swap(stat*a,stat*b);
int length(stat*head);
void sort1(stat*head,int n);
void sort11(stat*head,int n);
void sort2(stat*head,int n);
void sort22(stat*head,int n);
void sort3(stat*head,int n);
void sort33(stat*head,int n);
void sort4(stat*head,int n);
void sort44(stat*head,int n);
void sort5(stat*head,int n);
void sort55(stat*head,int n);
void modify(stat*a);
int addtoend(stat *head,stat a,int *n);
stat* addathead(stat *head,stat v);
int insertafter(stat *b,stat a,int *n);
stat* insertbefore(stat* head,stat *a,stat b,int *n);
stat *delete1(stat *head,stat* a,int *n);
stat *devide(stat* head1, int k);
int concat(stat* head1,stat** head2);
stat *last(stat*head);
int save(stat*head,char*fname);
int load(stat*head,char*fname);
2)Fisierul STAT1.CPP
#include "stat.h"
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
//--------------------------------------------------------------------------------------//functia pentru afisarea listei simplu inlantuite
void antet(void)
{
puts("Nr.|Nume
|Capitala |Suprafata |Populatie(mln)|PIB(mln) |adr |next|");
}
//----------------------------------------------------------------------------------------//functia pentru afisarea listei simplu inlantuite
void afisare(stat * c,int i)
{
printf("%-3d|%-13s|%-10s|%-10d|%-14d|%-10s|%-4p|%-4p|\n",i,c->nume,c->capitala,c->suprafata, c>populatie,c->PIB,c,c->next);
}
//--------------------------------------------------------------------------------------------------------//functia pentru crearea listei simplu inlantuite
stat* create(int n)
{
stat*c,*head,*p;
int i;
for(i=0;i<n;i++)
{
c=(stat*)malloc(sizeof(*c));
if(!c)
return NULL;
if(i==0)
{head=c;}
else
{p->next=c;}
c->next=NULL;
p=c;
}
return head;
}
//-------------------------------------------------------------------------------------------------------//functia de citire a informatiei
void introducere(stat *head)
{
printf("Nume:");
fflush(stdin);
gets(head->nume);
printf("Capitala:");
fflush(stdin);
gets(head->capitala);
printf("Suprafata:");
scanf("%d",&head->suprafata);
printf("Populatie:");
scanf("%d",&head->populatie);
printf("PIB:");
fflush(stdin);
gets(head->PIB);
}
//-------------------------------------------------------------------------------------------------------//functia care introduce informatii in lista simplu inlantuita
void input(stat*head)
{
stat*c;
int i=1;
c=head;
while(c)
{
printf("
Stat Nr.%d\n",i++);
introducere(c);
c=c->next;
// if(c==head)
// break;
}
}
//-------------------------------------------------------------------------------------------------------//fuctia de afisare a informatiei in lista simplu inlantuita
void output(stat*head)
{
stat*c;
int i=0;
c=head;
antet();
while(c)
{
afisare(c,i+1);
i++;
c=c->next;
// if(c==head)
// break;
}
}
//------------------------------------------------------------------------------------------------------//functia pentru eliberarea memoriei
stat* elib(stat* head)
{
stat*c,*p;
if(head==NULL)
return NULL;
c=head;
while(c)
{
p=c;
c=c->next;
free(p);
if(c==head)
break;
}
head=NULL;
return NULL;
}
//-------------------------------------------------------------------------------------------------------//functia de cautare a unui element dupa nume
stat*search1(stat*head,char num[])
{
stat *c;
c=head;
while(c)
{
if(strcmp(c->nume,num)==0)
{return c;}
c=c->next;
}
return NULL;
}
//--------------------------------------------------------------------------------------------------------
*b=t;
a->next=na;
b->next=nb;
}
//-------------------------------------------------------------------------------------------------------//functia pentru determinarea lungimii listei simplu inlantuita
int length(stat*head)
{
stat *c;
int n=0;
c=head;
while(c)
{
n++;
c=c->next;
if(c==head)
break;
}
return n;
}
//--------------------------------------------------------------------------------------------------------//functia pentru sortarea listei dupa nume(crescator)
void sort1(stat *head, int n)
{
int i,k;
stat *a,*b;
a=(stat*)malloc(sizeof(stat));
b=(stat*) malloc (sizeof(stat));
for (i=0; i<n-1;i++)
{
a=head; b=a->next;
for (k=0;k<n-i-1;k++)
{
if (strcmp(a->nume,b->nume)>0)
{
swap (a,b);
}
a=a->next; b=b->next;
}
}
}
//--------------------------------------------------------------------------------------------------------//functia pentru sortarea listei dupa nume(descrescator)
void sort11(stat *head, int n)
{
int i,k;
stat *a,*b;
a=(stat*)malloc(sizeof(stat));
b=(stat*) malloc (sizeof(stat));
for (i=0; i<n-1;i++)
{
a=head; b=a->next;
for (k=0;k<n-i-1;k++)
{
if (strcmp(a->nume,b->nume)<0)
{
swap (a,b);
}
a=a->next; b=b->next;
}
}
}
//--------------------------------------------------------------------------------------------------------//functia pentru sortarea listei dupa capitala(crescator)
b=b->next;
}
}
}
//--------------------------------------------------------------------------------------------------------//functia pentru sortarea listei dupa PIB(crescator)
void sort5(stat *head, int n)
{
int i,k;
stat *a,*b;
a=(stat*)malloc(sizeof(stat));
b=(stat*) malloc (sizeof(stat));
for (i=0; i<n-1;i++)
{
a=head; b=a->next;
for (k=0;k<n-i-1;k++)
{
if (strcmp(a->PIB,b->PIB)>0)
{
swap (a,b);
}
a=a->next; b=b->next;
}
}
}
//--------------------------------------------------------------------------------------------------------//functia pentru sortarea listei dupa PIB(descrescator)
void sort55(stat *head, int n)
{
int i,k;
stat *a,*b;
a=(stat*)malloc(sizeof(stat));
b=(stat*) malloc (sizeof(stat));
for (i=0; i<n-1;i++)
{
a=head; b=a->next;
for (k=0;k<n-i-1;k++)
{
if (strcmp(a->PIB,b->PIB)<0)
{
swap (a,b);
}
a=a->next; b=b->next;
}
}
}
//------------------------------------------------------------------------------------------------------//functia pentru modificarea unui element in lista simplu inlantuita
void modify(stat*a)
{
int t;
printf("Doriti sa modificati numele?(1/0)");
scanf("%d",&t);
if(t)
{
printf("Dati numele nou:");
fflush(stdin);
gets(a->nume);
}
printf("Doriti sa modificati capitala?(1/0)");
scanf("%d",&t);
if(t)
{
printf("Dati capitala noua:");
fflush(stdin);
gets(a->capitala);
}
printf("Doriti sa modificati suprafata?(1/0)");
scanf("%d",&t);
if(t)
{
printf("Dati suprafata noua:");
scanf("%d",&a->suprafata);
}
printf("Doriti sa modificati populatia?(1/0)");
scanf("%d",&t);
if(t)
{
printf("Dati numarul nou de populatie:");
scanf("%d",&a->populatie);
}
printf("Doriti sa modificati PIB?(1/0)");
scanf("%d",&t);
if(t)
{
printf("Dati PIB-ul nou:");
fflush(stdin);
gets(a->PIB);
}
}
//------------------------------------------------------------------------------------------------------//functia de adaugare a unui element la sirsit
int addtoend(stat *head,stat a,int *n)
{
stat *c, *p;
if (head==NULL)
return 0;
p=head;
while(p->next)
{
p=p->next;
if(p==head)
break;
}
c=(stat *)malloc (sizeof(stat));
if (c==NULL)
return -1;
*c=a;
p->next=c;
c->next=NULL;
*n=*n+1;
return 1;
}
//------------------------------------------------------------------------------------------------------//functia de adaugare a unui element la inceput
stat* addathead(stat *head,stat v)
{
stat*c;
c=(stat*)malloc(sizeof(*c));
if(!c)
return 0;
if(head==NULL)
{
head=c;
*c=v;
c->next=NULL;
}
else
{
*c=v;
c->next=head;
head=c;
}
return head;
}
//-------------------------------------------------------------------------------------------------------//functia de inserare dupa elementul indicat
int insertafter(stat *b,stat a,int *n)
{
stat *c;
c=(stat *) malloc (sizeof (stat));
if (c==NULL)
return -1;
*c=a;
if(b->next==NULL)
{
c->next=NULL;
b->next=c;
}
else
{
c->next=b->next;
b->next=c;
}
*n=*n+1;
return 1;
}
//----------------------------------------------------------------------------------------------------------//functia de inserare inainte de elementul indicat
stat* insertbefore(stat* head,stat *a,stat b,int *n)
{
stat *c, *p;
c=(stat *) malloc (sizeof (stat));
if (c==NULL)
return c;
if (a==head)
{
*c=b;
c->next=a;
head=c;
return head;
}
p=head;
while (p->next!=a)
{p=p->next;}
*c=b;
p->next=c;
c->next=a;
*n=*n+1;
return head;
}
//--------------------------------------------------------------------------------------------------------//functia de stergere a unui element din lista
stat *delete1(stat *head,stat* a,int *n)
{
stat *c;
c=head;
if (c->next==NULL)
{
head=NULL;
free(c);
return head;
}
if(c==a)
{
head=c->next;
free(c);
}
else
{
while(c->next!=a)
{c=c->next;}
c->next=a->next; free(a);}
*n=*n-1;
return head;
}
//-------------------------------------------------------------------------------------------------------//functia de divizare a listei
stat *devide(stat* head1, int k)
{
stat* head2, *c;
int i;
if(!head1)
return NULL;
c=head1;
i=0;
while ((i+1)!=k)
{
c=c->next;
i++;
}
head2=c->next;
c->next=NULL;
return head2;
}
//-----------------------------------------------------------------------------------------------------//fuctia de cocatenare a doua liste
int concat(stat* head1,stat** head2)
{
stat *c;
if(!head1||!*head2)
return 0;
if(!head1)
return 0;
c=head1;
while(c->next)
{
c=c->next;
}
c->next=*head2;
*head2=NULL;
return 1;
}
//------------------------------------------------------------------------------------------------------//fuctia de determinare a adresei ultimului element din lista
stat *last(stat*head)
{
stat* p;
p=head;
while(p->next)
{
p=p->next;
if(p->next==head)
break;
}
return p;
}
//----------------------------------------------------------------------------------------------------//fuctia de inscriere in fisier
int save(stat*head,char*fname)
{
stat*c;
FILE*fp;
fp=fopen(fname,"w");
if(!fp)
return 0;
c=head;
while(c)
{
fprintf(fp,"%s %s %d %d %s\n",c->nume,c->capitala,c->suprafata,c->populatie,c->PIB);
c=c->next;
if(c==head)
break;
}
fclose(fp);
return 1;
}
//-----------------------------------------------------------------------------------------------------//functia citirii continutului unui fisier
int load(stat*head,char*fname)
{
stat*c;
FILE *fp;
int i,l;
l=length(head);
fp=fopen(fname,"r");
c=head;
for(i=0;i<l;i++)
{
fscanf(fp,"%s%s%d%d%s",c->nume,c->capitala,&c->suprafata,&c->populatie,c->PIB);
c=c->next;
}
fclose(fp);
return 1;
}
void Prezt()
{
clrscr();
_setcursortype(_NOCURSOR);
printf("\n\n\n\n\t\t");
textcolor(2);
cprintf(" Lucrare de laborator Nr.2-3 la SDA:");
printf("\r\n\n\t\t");
cprintf(" Efectuat de Stegarescu Vasile:");
printf("\r\n\n\t\t");
cprintf("
******Tema******");
printf("\r\n\n\t\t");
cprintf(" Lista simplu inlantuita.");
textcolor(12);
getch();
closegraph();
}
}
printf("Dati numarul de state:\nn=");
scanf("%d",&n);
head=create(n);
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 2:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
if(!id)
{ input(head); id=1; }
else
puts("Datele au fost deja introduse");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 3:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
if(id)
{
printf("\t\t\t");
textcolor(12);
cputs("Lista de structuri");
printf("\n");
output(head);
}
else
{
puts("Trebuie mai intii de introdus informatia,introducem?(1-da,0-nu)");
scanf("%d",&g);
if(g)
{input(head);
id=1;
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista de structuri");
printf("\n");
output(head);
}
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 4:
clrscr();
head=elib(head);
if(head)
puts("Lista nu a fost eliberata") ;
if(!head)
id=0;
printf("\n");
antet();
afisare(cautat,id);
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 3:
clrscr();
printf("Dati suprafata:\n");
scanf("%d",&k);
cautat=search3(head,k);
if(cautat==0)
{
puts("Statul nu a fost gasita in baza de date");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Statul cautat");
printf("\n");
antet();
afisare(cautat,id);
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 4:
clrscr();
printf("Dati populatia:\n");
scanf("%d",&k);
cautat=search4(head,k);
if(cautat==0)
{
puts("Statul nu a fost gasita in baza de date");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Statul cautat");
printf("\n");
antet();
afisare(cautat,id);
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 5:
clrscr();
printf("Dati PIB:");
fflush(stdin);
gets(p);
cautat=search5(head,p);
if(cautat==0)
{
puts("Statul nu a fost gasita in baza de date");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Statul cautata");
printf("\n");
antet();
afisare(cautat,id);
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;}
break;
case 6:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
printf("Dati numele primului element de schimbat:\n");
fflush(stdin);
gets(num1);
a=search1(head,num1) ;
if(a==0)
{
puts("Elementul cu asa nume nu a fost gasit");
getch();
break;
}
printf("Dati numele la al doilea element de schimbat:\n");
fflush(stdin);
gets(num2);
b=search1(head,num2);
if(b==0)
{
puts("Elementul cu asa nume nu a fost gasit");
getch();
break;
}
swap(a,b);
puts("Interschimbarea elementelor a fost efectuata cu succes");
puts("Doriti sa fie afisata lista modificata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cprintf("Lista dupa interschimbare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 7:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
k=length(head);
printf("Lugimea listei este:<<");
textcolor(12);
cprintf("%d",k);
printf(">>\n");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 8:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
textcolor(10);
printf("\t\t");cputs("<>><><>Sortarea<><><>"); printf("\n");
textcolor(12);
cprintf("[1].Sortare dupa nume"); printf("\n");
cprintf("[2].Sortare dupa capitala");printf("\n");
cprintf("[3].Sortare dupa suprafata");printf("\n");
cprintf("[4].Sortare dupa populatie");printf("\n");
cprintf("[5].Sortare dupa PIB");printf("\n");
scanf("%d",&nm2);
switch(nm2)
{
case 1:
{clrscr();
puts("Sortare:");
puts("[1].Crescator");
puts("[2].Descrescator");
scanf("%d",&s1);
switch(s1)
{
case 1:
{
sort1(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(14);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();};
break;
case 2:
sort11(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;};
break;
case 2:
{clrscr();
puts("Sortare:");
puts("[1].Crescator");
puts("[2].Descrescator");
scanf("%d",&s2);
switch(s2)
{
case 1:
{
sort2(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();};
break;
case 2:
sort22(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;};
break;
case 3:
{clrscr();
puts("Sortare:");
puts("[1].Crescator");
puts("[2].Descrescator");
scanf("%d",&s3);
switch(s3)
{
case 1:
{
sort3(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();};
break;
case 2:
sort33(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;};
break;
case 4:
{clrscr();
puts("Sortare:");
puts("[1].Crescator");
puts("[2].Descrescator");
scanf("%d",&s4);
switch(s4)
{
case 1:
{
sort4(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();};
break;
case 2:
sort44(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;};
break;
case 5:
{clrscr();
puts("Sortare:");
puts("[1].Crescator");
puts("[2].Descrescator");
scanf("%d",&s5);
switch(s5)
{
case 1:
{
sort5(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();};
break;
case 2:
sort55(head,n);
clrscr();
puts("Tabloul a fost sortat");
puts("Doriti sa fie afisata lista sortata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("Lista dupa sortare");
printf("\n");
output(head);
}
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;};
break;};
}}}}}
break;
case 9:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
printf("Dati numele statului care doriti sa-l modificati:");
fflush(stdin);
gets(num);
cautat=search1(head,num);
if(cautat==0)
{
puts("Statul nu a fost gasit in baza de date");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
modify(cautat);
clrscr();
puts("Modificarea a fost efectuata cu succes");
puts("Doriti sa fie afisat elementul modificat(1-da,0-nu)?");
scanf("%d",&g);
clrscr();
if(g)
{
printf("\t\t");
textcolor(12);
cputs("Elementul dupa modificare");
printf("\n");
antet();
afisare(cautat,id);
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
}
else break;
case 10:
clrscr();
textcolor(12);
printf("\t\t");cputs("<>><><>Adaugarea unui element<><><>"); printf("\n");
textcolor(11);
cputs("[1]. Adaugarea unui element la inceput"); printf("\n");
cputs("[2]. Adaugarea unui element la urma"); printf("\n");
cputs("[3]. Inserarea unui element dupa elementul dat");printf("\n");
cputs("[4]. Inserarea unui element inaintea elementului dat");printf("\n");
scanf("%d", &nm1);
switch(nm1)
{
case 1:
{puts("Introduce-ti informatia despre elementul de adaugat");
introducere(&s);
head=addathead(head,s);
if (!head)
{puts("Lista este vida");}
if (head) {puts("Elementul a fost adaugat cu succes");}
getch();
break;}
case 2:
clrscr();
puts("Dati numele elementului dupa care doriti sa inserati");
fflush(stdin); gets(num);
cautat=search1(head,num);
if (cautat==NULL)
{
puts("Acest element nu exista");
getch();
break;
}
puts("Introduceti datele despre elementul care doriti sa-l adaugati");
introducere(&s);
rs=insertafter(cautat, s,&n);
if (rs==-1) {puts("Elementul nu a fost adaugat");}
if (rs==1) {puts("Elementul a fost adaugat cu succes");}
getch();
break;
case 3:
clrscr();
puts("Dati numele elementului inaintea caruia doriti sa inserati");
fflush(stdin); gets(num);
cautat=search1(head,num);
if (cautat==NULL)
{
puts("Acest element nu exista");
getch();
break;
}
puts("Introduceti datele despre elementul care doriti sa-l adaugati");
introducere(&s);
head=insertbefore(head,cautat,s,&n);
puts("Elementul a fost adaugat cu succes");
getch();
break;
}break;
case 11:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
printf("\t\t\t");
textcolor(12);
cputs("Lista de structuri");
printf("\n");
output(head);
printf("/n");
puts("Dati numele elementului care doriti sa-l stergeti");
fflush(stdin);
gets(num);
clrscr();
cautat=search1(head, num);
if (cautat==NULL)
{
puts("Acest element nu exista");
getch();
break;
}
head=delete1(head,cautat,&n);
puts("Stergerea a fost efectuata cu succes");
getch();
break;
case 12:
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
clrscr();
puts("Dati numarul de elemente pastrate in prima lista");
scanf("%d",&nm1);
while (nm1>=n)
{
printf("Dati un numar mai mic decit %d",n);
scanf("%d",&nm1);
}
head2=devide(head,nm1);
n=n-nm1;
if (head2==NULL)
{
puts("Divizarea nu a fost facuta");
}
else
{
puts("Doriti sa fie afisate listele formate?(1-da,0-nu)");
scanf("%d",&g);
clrscr();
if(g)
{
printf("\t\t\t");
textcolor(12);
cprintf("Lista a fost divizata in:");
printf("\n");
printf("\t\t\t");
textcolor(11);
cprintf(" Lista Nr.1");
printf("\n");
output(head);
printf("\n");
printf("\t\t\t");
textcolor(11);
cputs(" Lista Nr.2");
printf("\n");
output(head2);
}
}
getch();
break;
case 13:
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
clrscr();
rs=concat(head, &head2);
n=length(head);
if (rs==0) {puts("Listele nu au fost concatenate");getch();break;}
if(rs==1) {puts("Listele au fost concatenate cu succes");}
puts("Doriti sa afiseze lista obtinuta? (1-da,0-nu)");
scanf("%d",&nm1);
clrscr();
if(nm1)
printf("\t\t\t");
textcolor(12);
cprintf("Lista obtinuta dupa concatenare");
printf("\n");
output(head);
getch();
break;
case 14:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
c=last(head);
if(c)
printf("Numele ultimului element este:<<");
textcolor(12);
cprintf("%p",c);
puts(">>");
puts("Pentru a continua apasa-ti tasta 'Enter'");
getch();
break;
case 15:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
puts("Dati numele fisierului in care doriti sa salvati lista");
fflush(stdin);
gets(num);
rs=save(head, num);
if(rs==0) {puts("Salvarea nu a avut loc");}
if(rs==1) {puts("Salvarea s-a efectuat cu succes");m=1;}
getch();
break;
case 16:
clrscr();
if(!head)
{
puts("Memoria nu a fost alocata");
getch();
break;
}
puts("Dati numele fisierului din care doriti sa incarcati lista");
fflush(stdin);
gets(num);
rs=load(head,num);
if(rs==0)
{
puts("Deschiderea nu s-a efectuat");
getch();
break;
}
if(rs==1)
{
id=1;
puts("Deschiderea a fost efectuata cu succes");
getch();
clrscr();
puts("Doriti sa fie afisata lista incarcata(1-da,0-nu)?");
scanf("%d",&g);
if(g)
{
clrscr();
printf("\t\t\t");
textcolor(12);
cputs("
Lista incarcata");
printf("\n");
output(head);
}
}
getch();
break;
case 0:
clrscr();
if(head)
{if(!m)
{
printf("Informatia va fi pierduta...salvati?(0-da,1-nu)");
scanf("%d",&f);
if(!f)
{puts("Dati numele fisierului in care doriti sa salvati lista");
fflush(stdin);
gets(num);
rs=save(head, num);
if(rs==0) {puts("Salvarea nu a avut loc");}
if(rs==1) {puts("Salvarea a fost efectuata cu succes");}
} else
printf("Pentru a iesi apasa-ti tasta 'ENTER'");
getch();
free(head);
head=NULL;
return 0;
}
}
printf("Doriti sa iesiti?(1/0)");
scanf("%d",&g);
if(g)
{
if(head)
{
free(head);
head=NULL;
}
return 0;
}
else
break;
default:
puts("Alegeti optiunea corect");
getch();
}
}
}