#include <stdio.h>
#include <stdlib.h>
typedef struct pile *Pile;
typedef struct file *File;
struct pile{
int val;
Pile deb;
Pile fin;
Pile suiv;
};
struct file{
int val;
File deb;
File fin;
File suiv;
};
void pini(Pile p)
{
p->deb=NULL;
p->fin=NULL;
}
void fini(File f)
{
f->deb=NULL;
f->fin=NULL;
}
int pvide(Pile p)
{
if(p->deb==NULL)
return 1;
return 0;
}
int fvide(File f)
{
if(f->deb==NULL)
return 1;
return 0;
}
File newf(int e)
{
File temp=NULL;
temp->val=e;
return temp;
}
Pile newp(int e)
{
Pile temp=NULL;
temp->val=e;
return temp;
}
void fpush(File f,int e)
{
if(f->deb!=NULL)
{
f->fin->suiv=newf(e);
f->fin=f->fin->suiv;
}
else
{
f->deb=newf(e);
f->fin=f->deb;
}
}
void ppush(Pile p,int e)
{
if(p->deb!=NULL)
{
p->fin->suiv=newp(e);
p->fin=p->fin->suiv;
}
else
{
p->deb=newp(e);
p->fin=p->deb;
}
}
void fpop(File f)
{
File temp;
temp=f->deb;
f->deb=f->deb->suiv;
free(temp);
}
void ppop(Pile p)
{
Pile temp,temp2;
if(p->suiv==NULL)
{
free(p);
p->deb=NULL;
p->fin=NULL;
}
else
{
temp=p;
temp2=p->suiv;
while(temp2->suiv!=NULL)
{
temp=temp->suiv;
temp2=temp2->suiv;
}
free(temp2);
temp->suiv=NULL;
p->fin=temp;
}
}
void pprint(Pile p)
{
if(p->suiv==NULL)
printf("Pile vide\n");
else
{
while(p->suiv!=NULL)
{
printf("%d\n",p->val);
p=p->suiv;
}
}
}
void fprint(File f)
{
if(f->suiv==NULL)
printf("File vide\n");
else
{
while(f->suiv!=NULL)
{
printf("%d\n",f->val);
f=f->suiv;
}
}
}
int main()
{
Pile p=NULL;
File f=NULL;
int x;
while(1)
{
printf("0:quitter\n1:pini\n2:pvide\n3:ppush\n4:ppop\n5:fini\n6:fvide\n7:fpush\n8:fpop\n9:pprint\n10:fprint\n");
scanf("%d",&x);
switch(x)
{
case 0:
exit(0);
break;
case 1:
pini(p);
break;
case 2:
pvide(p);
break;
case 3:
scanf("%d",&x);
ppush(p,x);
break;
case 4:
ppop(p);
break;
case 5:
fini(f);
break;
case 6:
fvide(f);
break;
case 7:
scanf("%d",&x);
fpush(f,x);
break;
case 8:
fpop(f);
break;
case 9:
pprint(p);
break;
case 10:
fprint(f);
break;
}
}
return 0;
}