#include <iostream.h>
#include "Liste.h"

ElementLista::ElementLista(int i)
{
	valoare=i;
	urmatorul=NULL;
}

Baza::~Baza()
{
	ElementLista* ptr=CapLista;
	while (CapLista!=NULL)
	{
		CapLista=CapLista->urmatorul;
		delete ptr;
		ptr=CapLista;
	}
}

void Baza::Afisez()
{
	ElementLista* ptr=CapLista;
	if (ptr==NULL)
		cout << "\n Structura de date este vida! ";
	else
		while (ptr!=NULL)
		{
			cout << "\n " << ptr->valoare;
			ptr=ptr->urmatorul;
		}
}

void Stiva::Push(int i)
{
	ElementLista* ptr=new ElementLista(i);
	ptr->urmatorul=CapLista;
	CapLista=ptr;
}

int Stiva::Pop()
{
	int valret;
	ElementLista* ptr;

	if (CapLista==NULL)
	{
		cout << "\n Stiva este vida! ";
		return 0;
	}
	valret=CapLista->valoare;
	ptr=CapLista;
	CapLista=CapLista->urmatorul;
	delete ptr;
	return valret;
}

void Stiva::Afisez()
{
	cout << "\n Stiva contine: ";
	Baza::Afisez();
}

void Coada::Push(int i)
{
	ElementLista* ptr, *ElementNou= new ElementLista(i);

	if (CapLista==NULL)
		CapLista=ElementNou;
	else
	{
		ptr=CapLista;
		while(ptr->urmatorul!=NULL)
			ptr=ptr->urmatorul;
		ptr->urmatorul=ElementNou;
	}
}

int Coada::Pop()
{
	int valret;
	ElementLista* ptr;

	if (CapLista==NULL)
	{
		cout << "\n Coada este vida! ";
		return 0;
	}
	valret=CapLista->valoare;
	ptr=CapLista;
	CapLista=CapLista->urmatorul;
	delete ptr;
	return valret;
}

void Coada::Afisez()
{
	cout << "\n Coada contine: ";
	Baza::Afisez();
}


void main()
{
	Baza* ptab[2];
	ptab[0]=new Stiva;
	ptab[1]=new Coada;

	ptab[0]->Push(1); ptab[0]->Push(2);
	ptab[0]->Afisez();
	ptab[0]->Pop();
	ptab[0]->Afisez();

	ptab[1]->Push(1); ptab[1]->Push(2);
	ptab[1]->Afisez();
	ptab[1]->Pop();
	ptab[1]->Afisez();
}