elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Una lista Doblemente Ligada con una lista ligada cuando un numero se repite
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Una lista Doblemente Ligada con una lista ligada cuando un numero se repite  (Leído 2,000 veces)
Gatoloco123

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Una lista Doblemente Ligada con una lista ligada cuando un numero se repite
« 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");
}
}


« Última modificación: 20 Octubre 2017, 03:45 am por Gatoloco123 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Ayuda con Lista Ligada
.NET (C#, VB.NET, ASP)
DaNuK 8 5,581 Último mensaje 22 Octubre 2010, 20:43 pm
por DaNuK
Lista doblemente ligada
Programación C/C++
m@o_614 1 2,147 Último mensaje 18 Noviembre 2013, 17:13 pm
por rir3760
Guardar Información de una lista ligada en un archivo .txt
Programación C/C++
EdsonGuizar 2 4,703 Último mensaje 23 Abril 2016, 13:39 pm
por AlbertoBSD
[Ayuda] Como puede hacer de mi programa una Lista doblemente ligada "circular" C
Programación C/C++
Evox4 2 2,653 Último mensaje 9 Octubre 2016, 21:53 pm
por Evox4
Lista Ligada
Programación C/C++
angeljonh 0 1,751 Último mensaje 14 Octubre 2017, 21:53 pm
por angeljonh
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines