
01/06/2014, 18:44
|
| | Fecha de Ingreso: junio-2014 Ubicación: Guadalajara
Mensajes: 2
Antigüedad: 10 años, 9 meses Puntos: 0 | |
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;
} |