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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con lista enlazada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con lista enlazada  (Leído 3,637 veces)
Lain0x

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Problema con lista enlazada
« en: 8 Julio 2011, 00:35 am »

Hola, la verdad es que tengo problemas con la función buscar, probé mil formas pero no me resulta. Espero me puedan ayudar.


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

typedef struct ElementoLista
{
        int *dato;
        struct ElementoLista *siguiente;
        }Elemento;
       
typedef struct ListaIdentificar
{
        Elemento *inicio;
        Elemento *fin;
        int tam;
        }Lista;
       
void inicializar(Lista *lista);
int insertalistavacia(Lista *lista, int *dato);
int insertalistainicio(Lista *lista, char *dato);
int inserta_final(Lista *lista, char *dato, Elemento *actual);
void visualizar(Lista *lista);
int sup_inicio (Lista * lista);
void buscar(Lista *lista, int dato);

int main()
{
    Lista lista;
    Elemento actual;
    inicializar(&lista);
    int d = 2;
    insertalistavacia(&lista, &d);
    buscar(&lista, d);
     
    visualizar(&lista);
    system("pause");
    return 0;
}

void inicializar(Lista *lista)
{
     lista->inicio=NULL;
     lista->fin=NULL;
     int tam=0;
}

int insertalistavacia(Lista *lista, int *dato)
{
    Elemento *nuevo_elemento;
    if((nuevo_elemento=(Elemento *)malloc(sizeof(Elemento)))==NULL)
    return -1;
    if((nuevo_elemento->dato=(int *)malloc(50*sizeof(int)))==NULL)
    return -1;
    nuevo_elemento->dato=dato;
    nuevo_elemento->siguiente=NULL;
    lista->inicio=nuevo_elemento;
    lista->fin=nuevo_elemento;
    lista->tam++;
    return 0;
}

int insertalistainicio(Lista *lista, int *dato)
{
     Elemento *nuevo_elemento;
     if((nuevo_elemento=(Elemento *)malloc(sizeof(Elemento)))==NULL)
     return -1;
     if((nuevo_elemento->dato=(int *)malloc(50*sizeof(int)))==NULL)
     return -1;
     nuevo_elemento->dato=dato;
     nuevo_elemento->siguiente=lista->inicio;
     lista->inicio=nuevo_elemento;
     lista->tam++;
     return 0;
}
   
int inserta_final(Lista *lista, int *dato, Elemento *actual)
{
    Elemento *nuevo_elemento;
    if((nuevo_elemento = (Elemento *)malloc(sizeof(Elemento)))==NULL)
    return -1;
    if((nuevo_elemento->dato = (int *)malloc(50*sizeof(int)))==NULL)
    return -1;
    nuevo_elemento->dato=dato;
    actual->siguiente = nuevo_elemento;
    nuevo_elemento->siguiente=NULL;
    lista->fin = nuevo_elemento;
    lista->tam++;
    return 0;
}

int sup_inicio (Lista *lista)
{
  if (lista->tam == 0)
    return -1;
  Elemento *sup_elemento;
  sup_elemento = lista->inicio;
  lista->inicio = lista->inicio->siguiente;
  if (lista->tam == 1)
    lista->fin = NULL;
  free (sup_elemento->dato);
  free (sup_elemento);
  lista->tam--;
  return 0;
}

void buscar(Lista *lista, int dato)
{
     
     Elemento *actual;
     actual = lista->inicio;
     
     while(actual!=NULL)
     {
         if(dato==actual)
         {
             sup_inicio (&lista);
         }
         else
         {
             actual = actual->siguiente;
         }
     }
}

void visualizar(Lista *lista)
{
     Elemento *actual;
     actual = lista->inicio;
     while(actual!=NULL)
     {
        printf("%s\n", actual->dato);
        actual = actual->siguiente;
     }
}   
                                         



En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con lista enlazada
« Respuesta #1 en: 8 Julio 2011, 01:25 am »

Lo primero que debes aclarar de una forma precisa es el objetivo de la funcion, si bien esta se llama "buscar" la operacion que realiza (de forma incorrecta) es "eliminar el primero".

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Problema con lista enlazada
« Respuesta #2 en: 8 Julio 2011, 13:20 pm »

Esta comparación:

Código
  1. if(dato==actual)
  2.         {
  3.             sup_inicio (&lista);
  4.         }

¿No debería ser:

Código
  1. if(dato == actual->dato)...
?

Porque actual es un Elemento y tienes que acceder a "dato" de Elemento.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Problema con lista enlazada en C (buffer de entrada) « 1 2 »
Programación C/C++
xassiz~ 12 10,839 Último mensaje 21 Febrero 2011, 22:22 pm
por xassiz~
Problema con free, lista enlazada
Programación C/C++
totolia 1 2,310 Último mensaje 3 Abril 2012, 21:01 pm
por durasno
Ayuda con lista enlazada
Java
netca 2 3,346 Último mensaje 20 Abril 2012, 16:11 pm
por adwind
Ayuda Lista Enlazada
Programación C/C++
robluis 5 5,743 Último mensaje 9 Mayo 2012, 03:49 am
por botella
problema con funcion insertar de una lista enlazada
Programación C/C++
roger13 0 2,183 Último mensaje 20 Octubre 2013, 01:44 am
por roger13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines