Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gatoloco123 en 20 Octubre 2017, 03:36 am



Título: Una lista Doblemente Ligada con una lista ligada cuando un numero se repite
Publicado por: Gatoloco123 en 20 Octubre 2017, 03:36 am
Hola necesito ayuda..
Como hago que los datos de una lista doble se pase el numero que se repita a la de la  lista soy un novato y los punteros me cuesta un buen de trabajo.Es lo unico que necesito para terminar .
El codigo guarda los numeros por ejemplo  {6,7,2,7,-1,9,7,3} y cuando el numero de repita tiene que salir NULL <-> 6<-> 7->7->7 <->2<->-1<->9<->3 <-> NULL los <-> son de la doble ligada y el -> es de la lista donde esta el numero que se repite . El codigo mete numeros hasta que metas 0 en la opcion 1 y la opcion 2 muestra la lista y en la opcion 3 es el metodo de la burbuja.



Código:
#include <stdio.h>
#include <stdlib.h>

typedef struct nodo
{
int dato;
struct nodo *siguiente;
struct nodo *anterior;
}nodo;

nodo *primero = NULL;
nodo *ultimo = NULL;
void insertarNum();
void MostrarNum();
void MostrarNum2();
void OrdenarNum();

int main()
{
int opcionSeleccionada;
while(opcionSeleccionada !=5)
{
printf("\n Lista doblemente ligada");
printf("\n 1.- Insertar  |4.- Salir");
printf("\n 2.- Mostrar lista");
printf("\n 3.- Ordenar");
printf("\n \n");
scanf("%d", &opcionSeleccionada);
switch(opcionSeleccionada)
{
case 1:
                                system("clear");
printf("\n\n Insertar Numero. \n\n");
insertarNum();
break;
case 2:
                                system("clear");
printf("\n\n Mostrar lista de Numero. \n\n");
MostrarNum();
break;
case 3:
                                system("clear");
printf("\n\n Ordenar Numero.\n\n");
OrdenarNum();
break;
case 4:
printf("\n\n Salir \n\n");
break;
default:
printf("\n\n Opcion invalida. \n\n");
}
}
return 0;
}

void insertarNum()
{
     int i=0,a=1;
for(i=0;i<a;i++)
    {
    nodo *nuevo = (nodo*) malloc(sizeof(nodo));
    printf("Ingrese el dato del nodo:");
scanf("%d", &nuevo->dato);
if(nuevo->dato== 0)
    {
      break;
}
if(primero == NULL)
{
primero = nuevo;
primero->siguiente = NULL;
primero->anterior = NULL;
ultimo = primero;
}
else
{
ultimo->siguiente = nuevo;
nuevo->siguiente = NULL;
nuevo->anterior = ultimo;
ultimo = nuevo;
}
a++;
    }
}
void MostrarNum()
{
 nodo *nodoActual = (nodo*) malloc(sizeof(nodo));
nodoActual = primero;
if(primero!=NULL)
{
printf("Impresion normal: NULL ");
while(nodoActual!=NULL)
{
printf("<-> %d ", nodoActual->dato);
nodoActual = nodoActual->siguiente;
}
printf("<-> NULL \n");
}
else
{
printf("\nLista vacia.\n");
}
}
void OrdenarNum()
{
  nodo *nodoActual = (nodo*) malloc(sizeof(nodo));
  nodo *nodoSig = (nodo*) malloc(sizeof(nodo));
  int aux = 0;
nodoActual = primero;
        nodoSig = nodoActual->siguiente;
if(primero != NULL)
{
                 while(nodoSig != NULL)
                 {
                     if(nodoActual->dato > nodoSig->dato)
                     {
                     printf("nodoActual -> %d\n",nodoActual->dato);
                     printf("nodoSig -> %d\n",nodoSig->dato);
                     aux = nodoActual->dato;
                     nodoActual->dato = nodoSig->dato;
                     nodoSig->dato = aux;
                     printf("Aux-> %d\n",aux);
                     }
                     nodoActual = nodoActual->siguiente;
                     nodoSig = nodoSig->siguiente;
                 }
                 nodoActual = nodoActual->siguiente;
            MostrarNum2();
}
else
{
printf("\nLista vacia.\n");
}
}
void MostrarNum2()
{
 nodo *nodoActual = (nodo*) malloc(sizeof(nodo));
nodoActual = primero;
if(primero!=NULL)
{
printf("\n Impresion Burbuja:\n NULL ");
while(nodoActual!=NULL)
{
printf("<-> %d ", nodoActual->dato);
nodoActual = nodoActual->siguiente;
}
printf("<-> NULL \n");
}
else
{
printf("\nLista vacia.\n");
}
}