Respuestas

2013-05-30T19:38:58+02:00
Ejemplo de colas

* Colas Dinamicas */

#include <iostream>
#include <stdlib.h>

using namespace std;

struct nodo {
int info;
struct nodo *sig;
};

void crear(struct nodo **, struct nodo **);
void poner(struct nodo **, struct nodo **, int);
int sacar(struct nodo **, struct nodo **);
int vacia(struct nodo **);
int ver(struct nodo **);
void recorrer(struct nodo **, struct nodo **);

int main(void) {

struct nodo *ent, *sal;
crear(&ent, &sal);
int dato;
cout << "\nIngrese dato: ";
cin >> dato;
while(dato!=0) {
poner(&ent, &sal, dato);
cout << "\nIngrese dato: ";
cin >> dato;
}

if(vacia(&ent)==0) {
dato=sacar(&sal,&ent);
cout<<dato<<" ";
}

recorrer(&ent, &sal);

getchar();
getchar();
return 0;
}

void crear(struct nodo **ent, struct nodo **sal) {
*ent=NULL;
*sal=NULL;
}

void poner(struct nodo **ent, struct nodo **sal, int dato) {
struct nodo *aux; //creo puntero auxiliar apuntando a nodo
aux=new nodo; //pido memoria para un nodo
if (aux==NULL) {
cout << "Memoria insuficiente..." << endl;
exit(1);
}
aux->info=dato;
aux->sig=NULL;
if(*ent==NULL)
*sal=aux;
else
(*ent)->sig=aux;
*ent=aux;
}

int sacar(struct nodo **sal, struct nodo **ent) {
struct nodo *aux;
int dato;
aux=*sal; // apunto aux al nodo que quiero sacar
dato=(*sal)->info;
*sal=(*sal)->sig; // cambio *sal al siguiente nodo
if(*sal==NULL)
*ent=NULL;
delete aux;
return dato;
}

int vacia(struct nodo **ent) {
if(*ent==NULL)
return 1;
else
return 0;
}
int ver(struct nodo **sal) {
return (*sal)->info;
}

void recorrer(struct nodo **ent, struct nodo **sal) {
int dato, marca;
if (vacia(ent)==1)
cout<<"Cola vacia...";
else
dato=sacar(sal,ent); // asigno nodo a variable aux dato
cout << dato; // muestro elementos
marca=dato; // asigno a marca dato
poner(ent ,sal, dato); // vuelvo a poner el dato al final de la
cola
dato=ver(sal); // miro si llegue al dato de la marca
while (dato!=marca) {
dato=sacar(sal, ent);
cout << dato << " ";
poner(ent, sal, dato);
dato=ver(sal);
}
}

Ejemplo de lista dinámica

#include <iostream>
#include <stdlib.h>

using namespace std;
struct nodo {
int info;
struct nodo *sig;
};

void crear(struct nodo **);
void insertar(struct nodo **, int);
void eliminar(struct nodo **, int);
void recorrer(struct nodo **);
int buscar(struct nodo **, int); //true or false

int main() {
struct nodo *ent;
int dato;
crear(&ent);
cout<<"Ingrese valores enteros, cero para terminar: ";
cin>>dato;
while(dato != 0)
{
insertar(&ent, dato);
cout<<"Ingrese valores enteros, cero para terminar: ";
cin>>dato;
}
recorrer(&ent);
cout<<"Ingrese dato a eliminar: ";
cin>>dato;
eliminar(&ent, dato);
recorrer(&ent);
cout<<"Ingrese dato a buscar: ";
cin>>dato;
if(buscar(&ent,dato) == 1)
cout<<"numero "<<dato<<" encontrado";

getchar();
getchar();
return 0;
}


/******** funciones de listas simplemente enlazadas *********/
void crear(struct nodo **ent)
{
*ent = NULL;
}

void insertar(struct nodo **ent, int dato)
{
struct nodo *aux, *p, *ant;
aux = new nodo;
if(!aux) { cout<<"error:memoria insuficiente"<<endl; exit(1);}
aux->info = dato;
ant = NULL;
p = *ent; //p es el ptro aux que recorre la lista para insertar ORDENADO
while((p != NULL) && (p->info < dato))
{
ant = p;
p = p->sig;
}
if(ant == NULL)
{
aux->sig = *ent;
*ent = aux;
}
else
{
ant->sig = aux;
aux->sig = p;
}
}

void eliminar(struct nodo **ent, int dato)
{
struct nodo *p, *ant;
p = *ent;
ant = NULL;
while((p != NULL) && (p->info < dato))
//si pregunto p->info != dato recorro toda la lista sin sentido
{
ant = p;
p = p->sig;
}
if(p->info != dato) cout<<"dato no existe "<<endl;
else
{
if(ant == NULL) //1er nodo
*ent = (*ent)->sig;
else
ant->sig = p->sig;

delete p;
}
}

void recorrer(struct nodo **ent)
{
struct nodo *p;
p = *ent;
while(p != NULL)
{
cout<<p->info<<endl;
p = p->sig;
}
}

int buscar(struct nodo **ent, int dato)
{
struct nodo *p;
p = *ent;
while((p != NULL) && (p->info < dato)) p = p->sig;
if(p->info == dato)
return 1;
else
return 0;
}


Ejemplo de pilas

/* Pilas Dinamicas */

#include <iostream>
#include <stdlib.h>

using namespace std;

struct nodo {
int info;
struct nodo *sig;
};

void crear(struct nodo **);
void poner(struct nodo **, int);
int sacar(struct nodo **);
int ver(struct nodo **); //veo pero NO elimino
int vacia(struct nodo **); //vacia? booleano 0-1
void recorrer(struct nodo **); //muestro lo que hay ... uso una
pila aux

int main(void) {
struct nodo *tope;
int dato;
crear(&tope);
cout<<"\nIngrese un valor: ";