1
Clasificado en Otras materias
Escrito el en español con un tamaño de 3,52 KB
#include "stdafx.h"
#include "stdlib.h"
#include "iostream.h"
class nodo
{ int info;
nodo * sig;
public:
nodo(int i=0):info(i),sig(NULL){}
friend class pila;
};
class pila
{
nodo * principio;
public:
pila(){ cout << "Constructor::pila \n"<< endl; principio = NULL;}
~pila();
void insertar(int dato);
void eliminar();
pila &operator=(const pila &);
int operator==(const pila &);
pila(const pila &p);
};
pila::~pila(){
cout << " Destructor::pila" <<endl;
nodo *p,*q;
p=principio;
while(p!=NULL)
{
q=p;
cout << "Eliminando.." <<q->info <<endl;
p = p ->sig;
delete(q);
}
principio = NULL;
}
void pila::insertar(int dato){
nodo *nuevo,*ptr;
nuevo = new nodo (dato);
if( principio == NULL) // lista vacia
{ principio =nuevo;}
else {
ptr = principio;
nuevo->sig=ptr;
principio = nuevo;
}
}
void pila::eliminar(){
if(principio != NULL)
{ nodo *ptr;
ptr= principio;
principio = ptr->sig;
delete (ptr);
}
}
//Constructor de copia
pila::pila(const pila &p)
{cout << "Constructor_Copia::pila\n"<< endl;
nodo *ptr;
ptr = p.principio;
while(ptr!= NULL)
{
insertar(ptr->info);
ptr = ptr ->sig;
}
}
pila &pila::operator =(const pila &p) //& para que no se haga una copia por parte del constructor
{
cout << "Sobrecarga del operador=\n"<< endl;
this ->~pila();
nodo *ptr;
ptr = p.principio;
while(ptr!=NULL)
{
insertar(ptr->info); // va pasando los nodos
ptr = ptr ->sig;
}
return *this;
//es el contenido del objeto que ha hecho la llamado
}
int pila::operator ==(const pila & p){
cout << "\nSobrecarga del operador ==\n"<< endl;
nodo *ptr;
const nodo *ptr1;
ptr = principio;
ptr1 = p.principio;
if((ptr==NULL) && (ptr1==NULL)) return 1;
if( (ptr!=NULL) && (ptr1!=NULL)){
while(ptr->info == ptr1->info)
{
ptr=ptr->sig;
ptr1=ptr1->sig;
if((ptr==NULL) && (ptr1==NULL)) return 1;
if((ptr!=NULL) & (ptr1!=NULL)) return 0;
}
}
return 0;
}
void main()
{
pila p,p1;
int dato;
char c;
cout << " Insertar dato\n" << endl;
cin >> dato;
p.insertar(dato);
cout << " desea insertar otro dato? s/n\n" << endl;
cin>>c;
while (c=='s'){
cout << " Insertar dato\n" << endl;
cin >> dato;
p.insertar(dato);
cout << " desea insertar otro dato? s/n\n" << endl;
cin>>c;
}
p=p1;
if(p==p1){
cout << " Despues de hacer p==p1, podemos decir que son iguales " << endl;}
}
#include "stdlib.h"
#include "iostream.h"
class nodo
{ int info;
nodo * sig;
public:
nodo(int i=0):info(i),sig(NULL){}
friend class pila;
};
class pila
{
nodo * principio;
public:
pila(){ cout << "Constructor::pila \n"<< endl; principio = NULL;}
~pila();
void insertar(int dato);
void eliminar();
pila &operator=(const pila &);
int operator==(const pila &);
pila(const pila &p);
};
pila::~pila(){
cout << " Destructor::pila" <<endl;
nodo *p,*q;
p=principio;
while(p!=NULL)
{
q=p;
cout << "Eliminando.." <<q->info <<endl;
p = p ->sig;
delete(q);
}
principio = NULL;
}
void pila::insertar(int dato){
nodo *nuevo,*ptr;
nuevo = new nodo (dato);
if( principio == NULL) // lista vacia
{ principio =nuevo;}
else {
ptr = principio;
nuevo->sig=ptr;
principio = nuevo;
}
}
void pila::eliminar(){
if(principio != NULL)
{ nodo *ptr;
ptr= principio;
principio = ptr->sig;
delete (ptr);
}
}
//Constructor de copia
pila::pila(const pila &p)
{cout << "Constructor_Copia::pila\n"<< endl;
nodo *ptr;
ptr = p.principio;
while(ptr!= NULL)
{
insertar(ptr->info);
ptr = ptr ->sig;
}
}
pila &pila::operator =(const pila &p) //& para que no se haga una copia por parte del constructor
{
cout << "Sobrecarga del operador=\n"<< endl;
this ->~pila();
nodo *ptr;
ptr = p.principio;
while(ptr!=NULL)
{
insertar(ptr->info); // va pasando los nodos
ptr = ptr ->sig;
}
return *this;
//es el contenido del objeto que ha hecho la llamado
}
int pila::operator ==(const pila & p){
cout << "\nSobrecarga del operador ==\n"<< endl;
nodo *ptr;
const nodo *ptr1;
ptr = principio;
ptr1 = p.principio;
if((ptr==NULL) && (ptr1==NULL)) return 1;
if( (ptr!=NULL) && (ptr1!=NULL)){
while(ptr->info == ptr1->info)
{
ptr=ptr->sig;
ptr1=ptr1->sig;
if((ptr==NULL) && (ptr1==NULL)) return 1;
if((ptr!=NULL) & (ptr1!=NULL)) return 0;
}
}
return 0;
}
void main()
{
pila p,p1;
int dato;
char c;
cout << " Insertar dato\n" << endl;
cin >> dato;
p.insertar(dato);
cout << " desea insertar otro dato? s/n\n" << endl;
cin>>c;
while (c=='s'){
cout << " Insertar dato\n" << endl;
cin >> dato;
p.insertar(dato);
cout << " desea insertar otro dato? s/n\n" << endl;
cin>>c;
}
p=p1;
if(p==p1){
cout << " Despues de hacer p==p1, podemos decir que son iguales " << endl;}
}