Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/06/2014, 18:44
WELCOME_HOME
 
Fecha de Ingreso: junio-2014
Ubicación: Guadalajara
Mensajes: 2
Antigüedad: 9 años, 11 meses
Puntos: 0
Pregunta listas doblemente enlazadas y nodos

tengo el siguiente codigo de c++ usando clases y listas doblemente ligadas.
actualmente funciona si lo que deseo insertar adelante/atras son enteros (int) pero ahora quisiera hacer que funcionara este mismo programa ya sea con char o string, es decir, insertar adelante/atras palabras.
lo compilo en visual studio 2013.


//#include <stdio.h>
//#include <string.h>
//#include <stdlib.h>
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;

#pragma once //asegura que el código fuente que lo invoca sea incluido una //única vez

class cNodo
{
private:

cNodo* pSig;
cNodo* pAnt;
float fDato;

public:

void insertar_adelante(float fNuevo);

friend class cLista;
};


void cNodo::insertar_adelante(float fNuevo) //esta funcion crea un nuevo //nodo y su posicion será la siguiente del nodo de inicio en la lista
{
cNodo* pNuevoNodo = new cNodo;

pNuevoNodo->pSig = this->pSig;
pNuevoNodo->pAnt = this;
this->pSig = pNuevoNodo;
pNuevoNodo->pSig->pAnt = pNuevoNodo;
pNuevoNodo->fDato = fNuevo;
}



class cLista
{
private:

cNodo Inicio;
cNodo Final;

public:

void insertar_inicio(float Start);
void Insertar_Final(float End);

int Size(); //float??
void Imprimir();

cLista(void);
};


cLista::cLista(void) //constructor que enlaza los dos nodos creados en la clase; //nodo inicial y nodo final.
{
Inicio.pSig = &Final;
Final.pAnt = &Inicio;
// Inicio.pAnterior = Final.pSiguiente = 0;
// Inicio.iContenido = Final.iContenido = 0;
}

void cLista::insertar_inicio(float Start)
{
Inicio.insertar_adelante(Start); //inserta un nuevo nodo despues //del nodo inicio
}

void cLista::Insertar_Final(float End) //Esta función recibe un entero y lo //deposita en un nuevo nodo que se colocará en la posición inmediata anterior al //nodo final.
{
cNodo* pNuevoNodo = new cNodo;

pNuevoNodo->pSig = &Final;
pNuevoNodo->pAnt = Final.pAnt;
pNuevoNodo->pAnt->pSig = pNuevoNodo;
Final.pAnt = pNuevoNodo;
pNuevoNodo->fDato = End;

}

int cLista::Size() //Crea un puntero y lo iguala al nodo siguiente de inicio. Crea //un contador=0. Inicia un ciclo: “mientras que el puntero sea diferente que la //dirección del nodo final” y aumenta al contador en 1 y avanza un nodo hacia //adelante
{
cNodo* pNodo = Inicio.pSig;
int iContador = 0;

while (pNodo != &Final)
{
iContador++;
pNodo = pNodo->pSig;
}
cout << "numeros guardados: ";
return iContador;

}


void cLista::Imprimir() //Crea un puntero que iguala al nodo siguiente del //nodo inicio. Imprime el contenido de cada nodo evaluando la condición “mientras //que el puntero sea diferente que la dirección del nodo final” y avanza al puntero //un lugar hacia el nodo final.
{
cNodo* pNodo = Inicio.pSig;

cout << "|| ";
while (pNodo != &Final)
{
cout << pNodo->fDato << " || ";
pNodo = pNodo->pSig;
}
}





int _tmain(int argc, _TCHAR* argv[])
{
cNodo Nodo;
cLista Lista;
int opc, iBool = 0;
float fNumero;

do
{
cout << "\n";
cout << "/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/////\\\\\/" << endl;
cout << "\n\tElija una opcion\n" << endl;
cout << "[1] Insertar al inicio" << endl;
cout << "[2] Insertar al final" << endl;
cout << "[3] para ver cuantos numeros hay guardados " << endl;
cout << "[4] Imprimir" << endl;
cout << "[5] Salir" << endl << endl;
cout << "Opcion: ";
cin >> opc;
cout << endl;

switch (opc)
{
case 1:cout << endl << "Ingrese un nuevo valor: ";
cin >> fNumero;
Lista.insertar_inicio(fNumero);
break;

case 2:cout << endl << "Ingrese un nuevo valor: ";
cin >> fNumero;
Lista.Insertar_Final(fNumero);
break;

case 3:cout << Lista.Size();
break;

case 4:Lista.Imprimir();
break;

case 5:break;

default:cout << endl << "Opcion no Välida";
}
cout << endl;
} while (opc != 5);

cout << "Press enter to exit..." << endl;


_getch();
return 0;
}