[ Foro de C ]
Buenas tengo dudas de como puedo unir las lista1 y lista2.
les adjunto lo que llevo realizado de código:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
typedef struct nodo2{
int numero1;
struct nodo2* siguiente;
} nodo2;
typedef struct nodo3{
int numero2;
struct nodo3* siguiente;
} nodo3;
void insertarlista1(nodo2 *&, int &);
void mostrarlista1(nodo2 *);
void insertarlista2(nodo3 *&, int &);
void mostrarlista2(nodo3 *);
void mostrarLista();
void unir(nodo2 *,nodo3 *);
nodo2 *lista1;
nodo3 *lista2;
int main(){
int i=0,j=0,numero1,numero2;
int resp1,x;
do{
system("cls");
cout<<"Opcion escogida: Lista."<<endl;
cout<<"\n\n1.-Insertar 20 números enteros y ordenarlos de mayor a menor."<<endl;
cout<<"\n\n2.-Insertar 20 números enteros y ordenarlos de menor a mayor."<<endl;
cout<<"\n\n3.-Mostrar."<<endl;
cout<<"\n\n4-Nueva lista como union de las listas anteriores."<<endl;
cout<<"\n\n5-Volver a Menu Principal."<<endl;
cout<<"\n\nElija su opcion: ";
cin>>x;
switch(x){
case 1:
system("cls");
for(i=0;i<20;i++){
cout<<"Ingrese el dato ["<<i+1<<"]: ";
cin>>numero1;
insertarlista1(lista1,numero1);
}
break;
case 2:
system("cls");
for(j=0;j<20;j++){
cout<<"Ingrese el dato ["<<j+1<<"]: ";
cin>>numero2;
insertarlista2(lista2,numero2);
}
break;
case 3:
system("cls");
cout<<"Mostrar Lista\n\n";
mostrarLista();
break;
case 4:
exit(0);
break;
case 5:
exit(0);
break;
default:
cout<<"\nElija una opcion valida...\n"<<endl;
system("pause");
}
cout<<"\n\nDesea Continuar Utilizando Colas: 1.SI 2.NO"<<endl;
cout<<"\n\nRespuesta: ";
cin>>resp1;
}while(resp1!=2);
return 0;
}
void insertarlista1(nodo2 *&lista1, int &n){
nodo2* nuevo = (nodo2*) malloc(sizeof(nodo2));
nuevo->numero1 = n;
nodo2 *aux1 = lista1;
nodo2 *aux2;
while((aux1!=NULL) && (aux1->numero1>n)){
aux2 = aux1;
aux1 = aux1->siguiente;
}
if(lista1==aux1){
lista1 = nuevo;
}else{
aux2->siguiente = nuevo;
}
nuevo->siguiente=aux1;
}
void insertarlista2(nodo3 *&lista2, int &n){
nodo3* nuevo = (nodo3*) malloc(sizeof(nodo3));
nuevo->numero2 = n;
nodo3 *aux1 = lista2;
nodo3 *aux2;
while((aux1!=NULL) && (aux1->numero2<n)){
aux2 = aux1;
aux1 = aux1->siguiente;
}
if(lista2==aux1){
lista2 = nuevo;
}else{
aux2->siguiente = nuevo;
}
nuevo->siguiente=aux1;
}
void mostrarLista(){
int x,y;
do{
system("cls");
cout<<"Cual lista desea visualizar: \n\n1.Lista ordenada de mayor a menor.\n\n2..Lista ordenada de menor a mayor";
cout<<"\n\nOpcion:";
cin>>x;
switch(x){
case 1:
mostrarlista1(lista1);
break;
case 2:
mostrarlista2(lista2);
break;
default:
cout<<"\nElija una opcion valida...\n"<<endl;
system("pause");
mostrarLista();
}
cout<<"\n\nDesea Continuar Observando Listas: 1.SI 2.NO"<<endl;
cout<<"\n\nRespuesta: ";
cin>>y;
}while(y!=2);
}
void mostrarlista1(nodo2 *lista1){
nodo2* actual = (nodo2*) malloc(sizeof(nodo2));
actual = lista1;
while(actual!=NULL){
cout<<actual->numero1<<" -> "<<endl;
actual = actual->siguiente;
}
}
void mostrarlista2(nodo3 *lista2){
nodo3* actual = (nodo3*) malloc(sizeof(nodo3));
actual = lista2;
while(actual!=NULL){
cout<<actual->numero2<<" -> "<<endl;
actual = actual->siguiente;
}
}
void unir(lista1,lista2){
}
hola jose
ahí veo un poco de confusión estas preguntando en el grupo de c sobre un porgrama en c++, las cabeceras son de c ¿¿??
si es c++ deberias utilizar por ej la plantilla vector que te simpifica bastante todo esto, si te lo quieres hacer tu, tienes mucho código rebundante que deberias simplificar hasta la estructura la duplicas así como las funciones; deberías hacer una clase lista con sus metodos para meter datos, sacar, leer, listado completo, unir etc
si lo que quieres es hacerlo en c este si es el foro y te animo revisar los videos de makigas
https://www.makigas.es/series/estructuras-de-datos/listas-enlazadas-en-c
saludos ;-)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)