• Miércoles 6 de Noviembre de 2024, 02:56

Autor Tema:  Re: lista doblemente enlazada  (Leído 4554 veces)

seti

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: lista doblemente enlazada
« en: Martes 17 de Junio de 2003, 00:26 »
0
est funcion supuestamente tendría que ordenaruna lista doblemente enlaxzada pero falla si alguien me puede ayudar


void ordenar(tiponodo *lista,int cont)
{
int i=1,j=0;
tiponodo *nodo,*anterior=NULL,*siguiente=NULL;

while(i)

{
nodo=lista;
i=0;
while(nodo)
{
                siguiente=nodo->siguiente;
                anterior=nodo->anterior;
                if(siguiente!=NULL && nodo->num > siguiente->num)
                 {

                        if(anterior!=NULL)
                        {
                        anterior->siguiente=siguiente;
                                   }
                        siguiente->anterior=anterior;

                         if(siguiente->siguiente!=NULL)
                        {
                        siguiente->siguiente->anterior=nodo;
                           }
                        nodo->siguiente=siguiente->siguiente;

                        nodo->anterior=siguiente;
                        siguiente->siguiente=nodo;
                        i=1;
                }
                else
                {
               nodo=nodo->siguiente;
               }
}

}
}

adjunto el resto del programa:

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

typedef struct nodolista{
int num;
struct nodolista *siguiente;
struct nodolista *anterior;
}tiponodo;


int insertar(tiponodo **);
void ordenar(tiponodo *,int);
void mostrar(tiponodo *);
tiponodo *crearnodo(void);

void main(void )
{
tiponodo *lista=NULL;
int cont;
cont=insertar(&lista);
clrscr();
printf("%d",cont);
printf("Antes de ordenar:nn");
mostrar(lista);
ordenar(lista,cont);
printf("nDespues de ordenar;nn");
mostrar(lista);
getch();
}

int insertar(tiponodo **lista)
{
tiponodo *nodo,*anterior,temp;
int sw=1,cont=0;
printf("nIntroduce una letra para salirn");
while(sw==1)
        {
        printf("nIntroduce un numero: ");
       
        sw=scanf("%d",&temp.num);
        if(sw)
        {
        nodo=crearnodo();
        nodo->num=temp.num;
                if(*lista==NULL)
                {

                *lista=nodo;
                nodo->anterior=nodo->siguiente=NULL;
                }
                else
                {
                anterior->siguiente=nodo;
                nodo->anterior=anterior;
                nodo->siguiente=NULL;
                cont++;
                }

        anterior=nodo;
        }
        }
return(cont);
}

void ordenar(tiponodo *lista,int cont)
{
int i=1,j=0;
tiponodo *nodo,*anterior=NULL,*siguiente=NULL;

while(i)

{
nodo=lista;
i=0;
while(nodo)
{
                siguiente=nodo->siguiente;
                anterior=nodo->anterior;
                if(siguiente!=NULL && nodo->num > siguiente->num)
                 {

                        if(anterior!=NULL)
                        {
                        anterior->siguiente=siguiente;
                                   }
                        siguiente->anterior=anterior;

                         if(siguiente->siguiente!=NULL)
                        {
                        siguiente->siguiente->anterior=nodo;
                           }
                        nodo->siguiente=siguiente->siguiente;

                        nodo->anterior=siguiente;
                        siguiente->siguiente=nodo;
                        i=1;
                }
                else
                {
               nodo=nodo->siguiente;
               }
}

}
}

void mostrar(tiponodo *lista)
{
tiponodo *nodo;
nodo=lista;
       while(nodo!=NULL)
        {
        printf("El numero %dn",nodo->num);
        nodo=nodo->siguiente;
        }
}



tiponodo *crearnodo(void)
{
tiponodo *nodo;
nodo=(tiponodo *)malloc(sizeof(tiponodo));
if(nodo==NULL)
{ printf(" no hay suficiente memeoria");}

return(nodo);
}

marfil

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
lista doblemente enlazada
« Respuesta #1 en: Jueves 19 de Junio de 2003, 21:18 »
0
creo que ya esta
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

typedef struct nodolista{
int num;
struct nodolista *siguiente;
struct nodolista *anterior;
}tiponodo;
/*
void ordenar(tiponodo *lista)
{
int i=1;
tiponodo *nodo,*anterior=NULL,*siguiente=NULL;

while(i)

{
nodo=lista;
i=0;
while(nodo)
{
siguiente=nodo->siguiente;
anterior=nodo->anterior;
if(siguiente!=NULL && nodo->num > siguiente->num)
{

if(anterior!=NULL)
{
anterior->siguiente=siguiente;
}
siguiente->anterior=anterior;

if(siguiente->siguiente!=NULL)
{
siguiente->siguiente->anterior=nodo;
}
nodo->siguiente=siguiente->siguiente;

nodo->anterior=siguiente;
siguiente->siguiente=nodo;
i=1;
}
else
{
nodo=nodo->siguiente;
}
}

}
}
  */
int insertar(tiponodo **);
void ordenar(tiponodo *);
void mostrar(tiponodo *);
tiponodo *crearnodo(void);

void main(void )
{
tiponodo *lista=NULL;
int cont;
cont=insertar(&lista);
clrscr();
printf("%d",cont);
printf("Antes de ordenar:nn");
mostrar(lista);
ordenar(lista);
printf("nDespues de ordenar;nn");
mostrar(lista);
getch();
}

int insertar(tiponodo **lista)
{
tiponodo *nodo,*anterior,temp;
int sw=1,cont=0;
printf("nIntroduce una letra para salirn");
while(sw==1)
{
printf("nIntroduce un numero: ");

sw=scanf("%d",&temp.num);
if(sw)
{
nodo=crearnodo();
nodo->num=temp.num;
if(*lista==NULL)
{

*lista=nodo;
nodo->anterior=nodo->siguiente=NULL;
}
else
{
anterior->siguiente=nodo;
nodo->anterior=anterior;
nodo->siguiente=NULL;
cont++;
}

anterior=nodo;
}
}
return(cont);
}

void ordenar(tiponodo *lista){
int i=1;
tiponodo *nodo,*anterior=NULL,*siguiente=NULL;

while(i){
nodo=lista;
i=0;
while(nodo!=NULL){
siguiente=nodo->siguiente;
anterior=nodo->anterior;
if(siguiente!=NULL && nodo->num > siguiente->num){
if(anterior!=NULL){
anterior->siguiente=siguiente;
}
siguiente->anterior=anterior;
if(siguiente->siguiente!=NULL){
siguiente->siguiente->anterior=nodo;
}
nodo->siguiente=siguiente->siguiente;

nodo->anterior=siguiente;
siguiente->siguiente=nodo;
i=1;
}
else
{
nodo=nodo->siguiente;
}
}

}
}

void mostrar(tiponodo *lista)
{
tiponodo *nodo;
nodo=lista;
while(nodo!=NULL)
{
printf("El numero %dn",nodo->num);
nodo=nodo->siguiente;
}
}



tiponodo *crearnodo(void)
{
tiponodo *nodo;
nodo=(tiponodo *)malloc(sizeof(tiponodo));
if(nodo==NULL)
{ printf(" no hay suficiente memeoria");}

return(nodo);
}
:)