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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  necesito ayuda por favor.. listas doblemente enlazadas... diganme el error...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: necesito ayuda por favor.. listas doblemente enlazadas... diganme el error...  (Leído 4,203 veces)
anthonynlson

Desconectado Desconectado

Mensajes: 1


Ver Perfil
necesito ayuda por favor.. listas doblemente enlazadas... diganme el error...
« en: 21 Octubre 2012, 22:06 pm »

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define p printf

struct nodo{
 struct nodo *sig;
 struct nodo *ant;
 int dato;
};

struct nodo *cab1, *cab2;

int lista_vacia(struct nodo *);
int getnumero_nodos(struct nodo *);
struct nodo *crear_nodo();
void insertar(struct nodo *, int);
void eliminar(struct nodo *, int);


void main()
{
 clrscr();
 p("hola mundo");
 insertar(cab1, 5);
 insertar(cab1, 45);
 //p("   * ***%d", cab1->dato);
 getch();
}

int lista_vacia(struct nodo *cab)
{
 return (cab==NULL);
}

int getnumero_nodos(struct nodo *cab)
{
 struct nodo *aux;
 int cont=0;
 if(lista_vacia(cab)==1)
   return 0;
 else
 {
  for(aux=cab; aux!=NULL; aux= aux->sig)
  {cont++;}
  return (cont);
 }
}

struct nodo *crear_nodo()
{
 struct nodo *n;
 n=(struct nodo *)malloc(sizeof(struct nodo));
 if(n==NULL)
 {
  p("memoria llena..!!");
 }
 return n;
}

void insertar(struct nodo *c, int dato)
{
 struct nodo *n, *aux;
 n=crear_nodo();
 if(n!=NULL)
 {
  n->dato=dato;
  if(c==NULL)
  {
   c=n;
  }
  else
  {
   for(aux=c; aux->sig!=c; aux=aux->sig){}
   aux->sig=n;
   n->ant=aux;
   n->sig=c;
   c->ant=n;
  }
 }
 p("    **%d", cab1->dato);
}

void eliminar(struct nodo *c, int dato)
{
 struct nodo *aux;
 for(aux=c; aux->dato!=dato; aux=aux->sig){}
 if(aux==c)
 {
  c=c->sig;
  aux->ant=c;
  c->ant=aux->ant;
  insertar(cab2, aux->dato);
  free(aux);
 }
 else
 {
  aux->ant->sig=aux->sig;
  aux->sig->ant=aux->ant;
  insertar(cab2, aux->dato);
  free(aux);
 }
}


ayudenme con la solucion al intentar modificar la lista enviada por parametros..!! q no sale..


En línea

twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: necesito ayuda por favor.. listas doblemente enlazadas... diganme el error...
« Respuesta #1 en: 23 Octubre 2012, 00:44 am »

Bien aqui tienes un ejemplo si tienes dudas solo me preguntas,y a todo esto porque no puedo ver el foro en mi notebook me aparece una página en blanco, gracias

#include<stdio.h>
#include<stdlib.h>
struct nodo{
   int dato;
   struct nodo *sig;
   struct nodo *ant;
};
int numero_nodos(struct nodo **lista);
void insertar(struct nodo **lista);
void eliminar(struct nodo **lista);
void imprimir(struct nodo **lista);
int main(void){
   struct nodo *lista=NULL;
   insertar(&lista);
   insertar(&lista);
   insertar(&lista);
   insertar(&lista);
   imprimir(&lista);
   printf("\n");
   eliminar(&lista);
   imprimir(&lista);
return(0);
}
int numero_nodos(struct nodo **lista){
   struct nodo *aux=*lista;
    int cont=0;
    if(*lista==NULL){
      printf("lista bacia\n");
      return (1);
   }   
    else{
      while(aux!=NULL){
         cont++;
         aux=aux->sig;
      }
    } 
   return(cont);
}
void insertar(struct nodo **lista){
   printf("ingrese valor para el nodo\n");
   struct nodo *nuevo=(struct nodo*)malloc(sizeof(struct nodo));
   scanf("%i",&nuevo->dato);
   nuevo->sig=NULL;
   nuevo->ant=NULL;
   if(*lista==NULL)
      *lista=nuevo;
   else{
      struct nodo *aux=*lista;
      while(aux->sig!=NULL)
         aux=aux->sig;
      aux->sig=nuevo;
      nuevo->ant=aux;
   }
}
void eliminar(struct nodo **lista){
   struct nodo *aux1=*lista,*aux2=aux1;
    while(aux2->sig!=NULL){
      aux1=aux2;
      aux2=aux2->sig;
   }
   aux1->sig=NULL;
   aux2->ant=NULL;
   free(aux2);
}
void imprimir(struct nodo **lista){
   struct nodo *aux=*lista;
   printf("\nlista desde el principio hasta el final\n");
   while(aux!=NULL){
      printf("[%i]->",aux->dato);
       aux=aux->sig;
   }
   printf("\n");
   aux=*lista;
   while(aux->sig!=NULL)
      aux=aux->sig;
   printf("\nlista desde el final hasta el principio\n");
   while(aux!=NULL){
      printf("[%i]->",aux->dato);
      aux=aux->ant;
   }   
}   
   


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Nesecio ayuda con las listas encadenadas y doblemente encadenasa de C#
.NET (C#, VB.NET, ASP)
alonsomzo 1 4,673 Último mensaje 18 Marzo 2009, 00:33 am
por Mr. Crowley
listas enlazadas - ver error
.NET (C#, VB.NET, ASP)
Choclito 3 4,580 Último mensaje 26 Agosto 2009, 18:47 pm
por raul338
ayuda con listas enlazadas en c++!!!!
Programación C/C++
guanaco112 3 3,867 Último mensaje 2 Marzo 2012, 14:18 pm
por rir3760
Ayuda con listas enlazadas C++ solo para Masters jejejeje
Programación C/C++
haven7 0 2,876 Último mensaje 27 Junio 2012, 03:32 am
por haven7
Ayuda con listas dobles Enlazadas
Programación C/C++
larezaka 3 2,953 Último mensaje 1 Julio 2012, 17:02 pm
por larezaka
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines