Código C++:
Ver original// Agrega_Clase_ListaDE.cpp: archivo de proyecto principal.
#include "stdafx.h"
#include "iostream"
#include <conio.h>
using namespace System;
using namespace std;
struct nodo
{
int dato;
nodo *ant;
nodo *sig;
};
class Lde
{
private:
nodo *inicial;
nodo *buscarLista(int clave);
public:
Lde();
~Lde();
void agregar();
void eliminarNodo();
void desplegarLista();
};
Lde::Lde()
{
inicial=NULL;
}
Lde::~Lde ()
{
}
void Lde::desplegarLista()
{
if(inicial==NULL)
{
cout<<"La lista esta vacia"<<endl;
}
else
{
nodo *apunt;
apunt=inicial;
while(apunt!=NULL)
{
cout<<apunt->dato<<endl;
apunt=apunt->sig;
}
}
}
nodo *Lde::buscarLista(int clave)
{
//Devuelve la dirección del nodo que antecede al nuevo //nodo que va a ser agregado, o que va a ser eliminado.
//Si la clave es menor o igual al dato del primer nodo //el valor devuelto es NULL.
//Si la clave es mayor que el dato del último nodo //devuelve la dirección del último nodo.
nodo *anterior; // Anterior AUXILIAR
anterior=NULL;
if(clave <= inicial->dato)return anterior;
else
{
anterior=inicial;
while ( ( anterior->sig!=NULL) && (clave > anterior->sig->dato) )
anterior=anterior->sig;
return anterior;
}
}
void Lde::agregar()
{
nodo *nuevo,*anterior,*apunt,*clavenodo;
char resp;
do
{
nuevo=new nodo();
cout<<"Entre clave del nodo a agregar"<<endl;
cin>>nuevo->dato;
if(inicial==NULL)
{
//Agrega el primer nodo a la lista
inicial=nuevo;
nuevo->ant=NULL;
nuevo->sig=NULL;
}
else
{
//Agrega a una lista que contiene al menos un nodo
anterior=buscarLista(nuevo->dato);
if(anterior==NULL)
{
//Agrega un nodo que queda de primero
//en una lista que no estaba vacia
nuevo->sig=inicial;
nuevo->ant=inicial->ant;
inicial->ant=nuevo;
inicial=nuevo;
}
else
{
if(anterior->sig!=NULL)
{
//Agrega un nodo que queda entre el
//primero y el ultimo
nuevo->sig=anterior->sig;
nuevo->ant=anterior;
anterior->sig->ant=nuevo;
anterior->sig=nuevo;
}
else
{
//Agrega un nodo que queda de ultimo
nuevo->sig=anterior->sig;
nuevo->ant=anterior;
anterior->sig=nuevo;
}
}
}
cout<<"Desea agregar otro nodo? (s/n)"<<endl;
cin>>resp;
}while(resp=='s');
}
void Lde::eliminarNodo()
{
nodo *apunteliminar, *eliminarNodo,*clavenodo;
char resp;
apunteliminar=inicial;
cout<<"Desea eliminar un nodo? (y/n)"<<endl;
cin>>resp;
if(resp=='y')
{
clavenodo==NULL;
cout<<"Digite la clave del nodo que va a eliminar"<<endl;
cin>>clavenodo->dato;
}
if(apunteliminar->dato==clavenodo->dato)
{
delete apunteliminar;
cout<<"El nodo señalado ha sido eliminado"<<endl;
}
else
{
cout<<"El nodo señalado no ha sido encontrado"<<endl;
}
}
void main()
{
Lde l;
l.agregar();
l.desplegarLista();
}
En este código. ¿Qué significa la linea de comando
¿Está bien planteado esta interpretación de "Listas Doblemente Enlazadas?
Gracias de antemano.