[C con Clase] Constructores Copia (David Fire)
David Fire
ddfire en gmail.com
Jue Oct 22 18:58:57 CEST 2009
En rojo esta marcado el problema.
mi comentario en amarillo....
David
El 22 de octubre de 2009 11:51, John <tanyin21 en hotmail.com> escribió:
> Hola David, muchas gracias por la ayuda, todo esto es un trabajo que tengo
> que presentar en la universidad y el profesor quiere que se haga un
> constructor que reciba dos instancias de lista para concatenar los
> contenidos de las dos listas, ahora yo perfectamente pudiese hacer un
> método
> para ello y se que funcionaria, pero según el profesor tengo que hacerlo
> así
> como él lo especifica, yo ya tengo en mi mente el algoritmo para concatenar
> las listas pero lo que me impide a seguir es el error que me da.
> Con respecto al error, bueno yo uso el IDE Codeblocks, y bueno a como
> mostrare a continuación en el siguiente código no me da error al
> compilarlo,
> lo que sucede es que la aplicación se queda ahí y no hace nada.
>
> #include <iostream>
> using namespace std;
>
> class nodo {
> public:
> nodo(int v, nodo *sig = NULL)
> {
> valor = v;
> siguiente = sig;
> }
>
> private:
> int valor;
> nodo *siguiente;
>
> friend class lista;
> };
>
> typedef nodo *pnodo;
>
>
> class lista {
> public:
> lista() { primero = actual = NULL; }
> lista(lista luno, lista ldos){}
>
estas definiendo a la funcion como vacia....
no hace nada... por eso no hace nada....
> ~lista();
>
> void Insertar(int v);
> void Borrar(int v);
> bool ListaVacia() { return primero == NULL; }
> int encuentraMenor();
> int encuentraMayor();
> void Mostrar();
> void Siguiente();
> void Primero();
> void Ultimo();
> bool Actual() { return actual != NULL; }
> int ValorActual() { return actual->valor; }
>
> private:
> pnodo primero;
> pnodo actual;
> };
>
> lista::~lista()
> {
> pnodo aux;
>
> while(primero) {
> aux = primero;
> primero = primero->siguiente;
> delete aux;
> }
> actual = NULL;
> }
>
> void lista::Insertar(int v)
> {
> pnodo anterior;
>
> // Si la lista está vacía
> if(ListaVacia()) {
> // Asignamos a lista un nievo nodo de valor v y
> // cuyo siguiente elemento es la lista actual
> primero = new nodo(v, primero);
> }
> else {
> // Buscar el nodo de valor menor a v
> anterior = primero;
> // Avanzamos hasta el último elemento o hasta que el siguiente tenga
> // un valor mayor que v
> while(anterior->siguiente)
> anterior = anterior->siguiente;
> // Creamos un nuevo nodo después del nodo anterior, y cuyo siguiente
> // es el siguiente del anterior
> anterior->siguiente = new nodo(v, anterior->siguiente);
> }
> }
>
> int lista::encuentraMenor(){
> nodo *aux;
> int menor,contador=0,posicion=0;
> aux = primero;
> menor = -1;
> if(ListaVacia()){
> return menor;
> } else {
> menor = aux->valor;
> while(aux){
> if(menor<=aux->valor){
> aux=aux->siguiente;
> contador++;
> } else {
> menor=aux->valor;
> posicion=contador;
> contador++;
> aux=aux->siguiente;
> }
> }
> }
> return posicion;
> }
>
> int lista::encuentraMayor(){
> nodo *aux;
> int mayor,contador=0,posicion=0;;
> aux=primero;
> mayor= -1;
> if(ListaVacia()){
> return mayor;
> } else {
> mayor=aux->valor;
> while(aux){
> if(mayor>=aux->valor){
> aux=aux->siguiente;
> contador++;
> } else {
> mayor=aux->valor;
> posicion=contador;
> contador++;
> aux=aux->siguiente;
> }
> }
> }
> return posicion;
> }
>
> void lista::Borrar(int v)
> {
> pnodo anterior, nodo;
>
> nodo = primero;
> anterior = NULL;
> while(nodo && nodo->valor < v) {
> anterior = nodo;
> nodo = nodo->siguiente;
> }
> if(!nodo || nodo->valor != v) return;
> else { // Borrar el nodo
> if(!anterior) // Primer elemento
> primero = nodo->siguiente;
> else // un elemento cualquiera
> anterior->siguiente = nodo->siguiente;
> delete nodo;
> }
> }
>
> void lista::Mostrar()
> {
> nodo *aux;
>
> aux = primero;
> while(aux) {
> cout << aux->valor << "-> ";
> aux = aux->siguiente;
> }
> cout << endl;
> }
>
> void lista::Siguiente()
> {
> if(actual) actual = actual->siguiente;
> }
>
> void lista::Primero()
> {
> actual = primero;
> }
>
> void lista::Ultimo()
> {
> actual = primero;
> if(!ListaVacia())
> while(actual->siguiente) Siguiente();
> }
>
> int main()
> {
> lista Lista;
> lista Listados;
>
>
> Lista.Insertar(209);
> Lista.Insertar(19);
> Lista.Insertar(30);
>
> Listados.Insertar(100);
> Listados.Insertar(178);
> Listados.Insertar(10);
> Listados.Insertar(77);
>
> lista lis(Lista,Listados);
>
>
> cout <<"Esta es la posicion del dato menor:
> "<<Lista.encuentraMenor()<<endl;
> cout <<"Este es la posicion del dato mayor:
> "<<Lista.encuentraMayor()<<endl;
>
>
>
>
> }
>
>
> John
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
--
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091022/4506b1cc/attachment.html>
Más información sobre la lista de distribución Cconclase