Analicen este programa

diegoleo24
25 de Mayo del 2004
Este programa, debe insertar dos listas, imprimirlas, borrar un nodo deseado, ordenarlas y concatenarlas.
Las funciones ordenar y concatenar, no funcionan.
Me podrían decir qué está mal?.
Es urgente, les agradecer{e mucho.

diegoleo24
25 de Mayo del 2004
Cómo puedo hacer para en lugar de estructuras, usar clases, y en lugar de malloc, usar New,
podrían corregir el código.
Gracias.


#include <iostream.h>;
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>;


typedef struct _nodo {
int valor;
struct _nodo *siguiente;
struct _nodo *anterior;
struct _nodo *aux;
} tipoNodo;


typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;
typedef tipoNodo *Lista1;



/* Funciones con listas: */
void Insertar(Lista *l, int v);
void Insertar1(Lista1 *l, int v1);
void imprimirLista(Lista);
void imprimirLista1(Lista1);

void Borrar(Lista *l, int v);
void BorrarLista(Lista *);
void ordenarLista(Lista l);
void ordenarLista1(Lista1);
void unir();







void Insertar(Lista *lista, int v)
{
//Esta función irá insertando los valores en orden ascendente
pNodo nodo, actual;
clrscr();
/* Crear un nodo nodo */
nodo = (pNodo)malloc(sizeof(tipoNodo));
nodo->valor = v;

/* Colocamos actual en la primera posición de la lista */
actual = *lista;
if(actual)
while(actual->anterior) actual = actual->anterior;
/* Si la lista está vacía o el primer miembro es mayor que el nodo*/
if(!actual || actual->valor > v) {
/* Añadimos la lista a continuación del nodo nodo */
nodo->siguiente = actual;
nodo->anterior = NULL;
if(actual) actual->anterior = nodo;
if(!*lista) *lista = nodo;
}
else {
// Avanzamos hasta el último elemento o hasta que el siguiente tenga
//un valor mayor que v */
while(actual->siguiente && actual->siguiente->valor <= v)
actual = actual->siguiente;
//Insertamos el nodo nodo después del nodo anterior */
nodo->siguiente = actual->siguiente;
actual->siguiente = nodo;
nodo->anterior = actual;
if(nodo->siguiente) nodo->siguiente->anterior = nodo;
}
}






void Insertar1(Lista1 *lista1, int v1)
{
pNodo nodo, actual1;
clrscr();
/* Crear un nodo nodo */
nodo = (pNodo)malloc(sizeof(tipoNodo));
nodo->valor = v1;

/* Colocamos actual en la primera posición de la lista */
actual1 = *lista1;
if(actual1) while(actual1->anterior) actual1 = actual1->anterior;
/* Si la lista está vacía o el primer miembro es mayor que el nodo*/
if(!actual1 || actual1->valor > v1) {
/* Añadimos la lista a continuación del nodo nodo */
nodo->siguiente = actual1;
nodo->anterior = NULL;
if(actual1) actual1->anterior = nodo;
if(!*lista1) *lista1 = nodo;
}
else {
/* Avanzamos hasta el último elemento o hasta que el siguiente tenga
un valor mayor que v */
while(actual1->siguiente && actual1->siguiente->valor <= v1)
actual1 = actual1->siguiente;
/* Insertamos el nodo nodo después del nodo anterior */
nodo->siguiente = actual1->siguiente;
actual1->siguiente = nodo;
nodo->anterior = actual1;
if(nodo->siguiente) nodo->siguiente->anterior = nodo;
}
}




void Borrar(Lista *lista, int v)
{
pNodo nodo;

clrscr();
/* Buscar el nodo de valor v */
nodo = *lista;
while(nodo && nodo->valor < v) nodo = nodo->siguiente;
while(nodo && nodo->valor > v) nodo = nodo->anterior;

/* El valor v no está en la lista */
if(!nodo || nodo->valor != v)
{
cout <<"EL valor no está en la lista";
return;
}

/* Borrar el nodo */
/* Si lista apunta al nodo que queremos borrar, apuntar a otro */
if(nodo == *lista)
if(nodo->anterior) *lista = nodo->anterior;
else *lista = nodo->siguiente;

if(nodo->anterior) /* no es el primer elemento */
nodo->anterior->siguiente = nodo->siguiente;
if(nodo->siguiente) /* no es el último nodo */
nodo->siguiente->anterior = nodo->anterior;
cout <<"n El dato se borró de la lista n";
free(nodo);


}

void BorrarLista(Lista *lista)
{
pNodo nodo, actual;
clrscr();
actual = *lista;
while(actual->anterior) actual = actual->anterior;

while(actual) {
nodo = actual;
actual = actual->siguiente;
free(nodo);
}
*lista = NULL;
}





void imprimirLista(Lista lista)
{
clrscr();
cout <<"nla primera lista tiene los datos: n";
pNodo nodo = lista;

if(!lista) printf("Lista vacía");

nodo = lista;

while(nodo->anterior) nodo = nodo->anterior;
while(nodo)
{
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
}


}


void imprimirLista1(Lista lista1)
{

cout <<"nla segunda lista tiene los datos : n";
pNodo nodo = lista1;

if(!lista1) printf("Lista vacía");

nodo = lista1;

while(nodo->anterior) nodo = nodo->anterior;
while(nodo)
{
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
}


}

void ordenarLista(Lista lista)
{
clrscr();
pNodo nodo = lista;

if(!lista) printf("Lista vacía");

nodo = lista;
while(nodo->siguiente) nodo = nodo->siguiente;
printf("nLa Primera lista en orden descendente queda: n");
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->anterior;
}

printf("n");


}


void ordenarLista1(Lista1 lista1)
{

pNodo nodo = lista1;

if(!lista1) printf("Lista vacía");

nodo = lista1;



while(nodo->siguiente) nodo = nodo->siguiente;
printf("nLa segunda lista en orden descendente queda: n");
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->anterior;
}


printf("n");


}

void unir()
{

clrscr();

}




int main()
{
Lista lista = NULL;
Lista1 lista1 = NULL;

int l,a,b,c,d,a1,b1,c1,d1,dat,op,sal=0,t;
gotoxy(8,4); cout <<"Deme los datos para insertar en la primera lista <<son 4 >> ";
gotoxy(5,5);cin>>a;
gotoxy(5,6);cin>>b;
gotoxy(5,7);cin>>c;
gotoxy(5,8);cin>>d;
clrscr();
gotoxy(8,4); cout <<"Deme los datos para insertar en la segunda lista <<son 4 >>";
gotoxy(5,5);cin>>a1;
gotoxy(5,6);cin>>b1;
gotoxy(5,7);cin>>c1;
gotoxy(5,8);cin>>d1;
Insertar(&lista, a);
Insertar(&lista, b);
Insertar(&lista, c);
Insertar(&lista, d);

Insertar1(&lista1, a1);
Insertar1(&lista1, b1);
Insertar1(&lista1, c1);
Insertar1(&lista1, d1);
clrscr();

while (sal==0)
{
clrscr();
gotoxy(4,4); cout<<"MENU DE OPCIONES ";
gotoxy(4,5); cout <<"1. IMPRIMIR LAS LISTAS ";
gotoxy(4,6); cout <<"2. ORDENAR LAS LISTAS ";
gotoxy(4,7); cout <<"3. BORRAR ELEMENTOS ";
gotoxy(4,8); cout <<"4. UNIR DOS LISTAS ";
gotoxy(4,9); cout <<"5. SALIR ";

gotoxy(7,10);cout <<"Elija la opción ";
cin>>op;
switch (op)
{
case 1:
{
imprimirLista(lista);
imprimirLista1(lista1);
gotoxy(12,12); cout << "pulse una tecla para continuar";
c = getch();

break;
}

case 2:
{
ordenarLista(lista);
ordenarLista1(lista1);
gotoxy(12,12); cout << "pulse una tecla para continuar";
c = getch();

break;
}
case 3:

{
cout <<"n De qué lista desea borrar el dato ? <1 o 2 n";
cin>>l;
cout <<"n Qué dato desea borrar ? n" ;
cin>>dat;
if (l==1)
Borrar(&lista, dat);
else
Borrar(&lista1, dat);
gotoxy(12,12); cout << "pulse una tecla para continuar";
c = getch();
break;

}

case 4:
{
cout <<"proceso";
break;
}

case 5:
{
sal=1;
break;
}
}
}

BorrarLista(&lista);



return 0;
}