Hola, la verdad es que tengo problemas con la función buscar, probé mil formas pero no me resulta. Espero me puedan ayudar.
#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;
}
}
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
Esta comparación:
if(dato==actual)
{
sup_inicio (&lista);
}
¿No debería ser:
if(dato == actual->dato)...
?
Porque actual es un Elemento y tienes que acceder a "dato" de Elemento.