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;
}
}