Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lain0x en 8 Julio 2011, 00:35 am



Título: Problema con lista enlazada
Publicado por: Lain0x 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;
     }
}   
                                         



Título: Re: Problema con lista enlazada
Publicado por: rir3760 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


Título: Re: Problema con lista enlazada
Publicado por: Valkyr 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.