这是带问题的代码:
class nodoDoble {
public:
nodoDoble(int cod, int ced, string nom, int tel, int per)
{
codigo = cod;
cedula = ced;
nombre = nom;
telefono = tel;
permiso = per;
siguiente = NULL;
anterior = NULL;
}
nodoDoble(int cod, int ced, string nom, int tel, int per, nodoDoble *signodo)
{
codigo = cod;
cedula = ced;
nombre = nom;
telefono = tel;
permiso = per;
siguiente = signodo;
}
private:
int codigo;
int cedula;
string nombre;
int telefono;
int permiso;
nodoDoble *siguiente;
nodoDoble *anterior;
friend class listaD;
};
typedef nodoDoble *pnodoD;
这是列表类:
class listaD {
public:
listaD() { primero = actual = NULL; }
~listaD();
void InsertarInicio(int cod, int ced, string nom, int tel, int per);
void InsertarFinal(int cod, int ced, string nom, int tel, int per);
void InsertarPos(int cod, int ced, string nom, int tel, int per, int pos);
bool ListaVacia() { return primero == NULL; }
void Mostrar();
void Siguiente();
void Primero();
void Ultimo();
void BorrarFinal();
void BorrarInicio();
void borrarPosicion(int pos);
int largoLista();
private:
pnodoD primero;
pnodoD actual;
};
listaD::~listaD()
{
pnodoD aux;
while (primero) {
aux = primero;
primero = primero->siguiente;
delete aux;
}
actual = NULL;
}
int listaD::largoLista() {
int cont = 0;
pnodoD aux;
aux = primero;
if (ListaVacia()) {
return cont;
}
else {
while (aux->siguiente != primero) {
aux = aux->siguiente;
cont++;
}
return cont;
}
}
void listaD::InsertarInicio(int cod, int ced, string nom, int tel, int per)
{
if (ListaVacia()) {
primero = new nodoDoble(cod, ced, nom, tel, per);
primero->siguiente = primero;
}
else
{
pnodoD aux = primero;
while (aux->siguiente != primero) {
aux = aux->siguiente;
}
primero = new nodoDoble(cod, ced, nom, tel, per, primero);
primero->siguiente->anterior = primero;
aux->siguiente = primero;
primero->anterior = aux;
}
}
void listaD::InsertarFinal(int cod, int ced, string nom, int tel, int per)
{
if (ListaVacia()) {
primero = new nodoDoble(cod, ced, nom, tel, per);
primero->siguiente = primero;
primero->anterior = primero;
}
else
{
pnodoD aux = primero;
while (aux->siguiente != primero)
aux = aux->siguiente;
aux->siguiente = new nodoDoble(cod, ced, nom, tel, per);
aux->siguiente->anterior = aux;
aux->siguiente->siguiente = primero;
primero->anterior = aux->siguiente;
}
}
void listaD::InsertarPos(int cod, int ced, string nom, int tel, int per, int pos)
{
if (ListaVacia()) {
primero = new nodoDoble(cod, ced, nom, tel, per);
primero->siguiente = primero;
primero->anterior = primero;
}
else {
if (pos <= 1)
InsertarInicio(cod, ced, nom, tel, per);
else
{
pnodoD aux = primero;
int i = 2;
while ((i != pos) && (aux->siguiente != primero)) {
i++;
aux = aux->siguiente;
}
pnodoD nuevo = new nodoDoble(cod, ced, nom, tel, per);
nuevo->siguiente = aux->siguiente;
aux->siguiente = nuevo;
aux->siguiente->anterior = aux;
nuevo->siguiente->anterior = nuevo;
}
}
}
void listaD::BorrarFinal()
{
if (ListaVacia()) {
cout << "No hay elementos en la lista:" << endl;
}
else {
if (primero->siguiente == primero) {
pnodoD temp = primero;
primero = NULL;
delete(temp);
}
else {
pnodoD aux = primero;
while (aux->siguiente->siguiente != primero)
aux = aux->siguiente;
pnodoD temp = aux->siguiente;
aux->siguiente = primero;
primero->anterior = aux;
delete temp;
}
}
}
void listaD::BorrarInicio()
{
if (ListaVacia())
cout << "No hay elementos en la lista:" << endl;
else {
if (primero->siguiente == primero) {
pnodoD temp = primero;
primero = NULL;
delete (temp);
}
else {
pnodoD aux = primero;
while (aux->siguiente != primero)
aux = aux->siguiente;
pnodoD temp = primero;
primero = primero->siguiente;
aux->siguiente = primero;
primero->anterior = aux;
delete (temp);
}
}
}
void listaD::borrarPosicion(int pos) {
if (ListaVacia()) {
cout << "Lista vacia" << endl;
}
else {
if ((pos>largoLista()) || (pos<0)) {
cout << "Error en posicion" << endl;
}
else {
if (pos == 1)
BorrarInicio();
else
{
int cont = 2;
pnodoD aux = primero;
while (cont<pos) {
aux = aux->siguiente;
cont++;
}
pnodoD temp = aux->siguiente;
aux->siguiente = aux->siguiente->siguiente;
aux->siguiente->anterior = aux;
delete temp;
}
}
}
}
void listaD::Mostrar()
{
nodoDoble *aux;
aux = primero;
while (aux->siguiente != primero) {
cout << aux->cedula << ": " << aux->nombre << aux->nombre << "-> ";
aux = aux->siguiente;
}
cout << aux->cedula << ": " << aux->nombre << "->";
cout << endl;
}
问题出现了:
int main() {
listaD Lista;
Lista.InsertarInicio(01, 116, "pablo", 89, 2);
Lista.Mostrar();
cin.get();
return 0;}
这是我在完成main中的最后一个命令时得到的错误:
答案 0 :(得分:0)
第一个问题:
这个构造函数:
nodoDoble(int cod, int ced, string nom, int tel, int per, nodoDoble *signodo)
{
codigo = cod;
cedula = ced;
nombre = nom;
telefono = tel;
permiso = per;
siguiente = signodo;
}
不会初始化成员anterior
可能还有其他问题......