hola, espero me puedan ayudar, me pasa algo bien raro, estoy aprendiendo a usar las listas.
mi problema aki es el sig.
tengo este código
libreria
/*********************
**********************
** **
** stlist.h **
** **
**********************
*********************/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//Definimos el tipo de dato a ingresarse en la lista
struct ElementoLista
{
int valor; // -> Dato que guardara la lista
struct ElementoLista *sig; // -> Apuntador permitirá el acceso al próximo elemento
};
typedef struct ElementoLista _dato;
struct ListaIdentificar{
_dato *inicio;
_dato *fin;
int tamano;
};
typedef struct ListaIdentificar _lista;
//hacemos la funcion que inicializa la lista en NULL
void iniciaLista(_lista *LISTA)
{
LISTA->inicio=NULL;
LISTA->fin=NULL;
LISTA->tamano=0;
}
//funcion para ingresar un 1° valor
/* inserción en una lista vacía */
_lista *ins_en_lista(_lista *lista,int dato)
{
_dato *nuevo,*inicio_lista;
_lista *apuntadorAux;
nuevo=(_dato *) malloc(sizeof(_dato));
nuevo->valor=dato;
nuevo->sig=NULL;//printf("\nCreamos un nuevo _dato con valor: %d *sig: %s",nuevo->valor,nuevo->sig);
if (nuevo!=NULL)
{
if(lista->inicio==NULL && lista->fin==NULL)
{
lista->inicio=nuevo;
lista->fin=nuevo;
lista->tamano=lista->tamano+1;
//printf("\nVALORES DE LA LISTA [%d]",dato);
//printf("\nInicio->valor: %d",lista->inicio->valor);
//printf("\nInicio->*sig: %s",lista->inicio->sig);
//printf("\nFin->valor: %d",lista->fin->valor);
//printf("\nFin->*sig: %s",lista->fin->sig);
}
else
{ inicio_lista=lista->inicio;
apuntadorAux=lista;
//printf("\n\nVALORES AUXILIARES iniciales DE LA LISTA [%d]",dato);
//printf("\nInicio->valor: %d",apuntadorAux->inicio->valor);
//printf("\nInicio->*sig: %s",apuntadorAux->inicio->sig);
//printf("\nFin->valor: %d",apuntadorAux->fin->valor);
//printf("\nFin->*sig: %s",apuntadorAux->fin->sig);
while(apuntadorAux->inicio->sig!=NULL)
{
apuntadorAux->inicio=apuntadorAux->inicio->sig;
}
apuntadorAux->inicio->sig=nuevo;
apuntadorAux->inicio=inicio_lista;
lista->fin=nuevo;
lista->tamano++;
//printf("\n\nVALORES AUXILIARES finales DE LA LISTA [%d]",dato);
//printf("\nInicio->valor: %d",apuntadorAux->inicio->valor);
//printf("\nInicio->*sig: %s",apuntadorAux->inicio->sig);
//printf("\nFin->valor: %d",apuntadorAux->fin->valor);
//printf("\nFin->*sig: %s",apuntadorAux->fin->sig);
}
}
else
{
printf("!!!!!!!!!!NO HAY MEMORIA!!!!!!!!!");
}
return lista;
}
void imprime_lista(_lista *lista)
{
_dato *nodo;
nodo=lista->inicio;
printf("\ninicio-> ");
while(nodo!=NULL)
{
printf("%d-> ",nodo->valor);
nodo=nodo->sig;
}
printf("fin de la lista\n");
printf("\nCARDINALIDAD: %d",lista->tamano);
}
int pertenencia(_lista *lista,int busca)
{
/*printf("XXX");*/
_lista *apuntador_aux;
int regresa;
apuntador_aux=lista;
while(apuntador_aux->inicio->valor!=busca && apuntador_aux->inicio->sig!=NULL)
{
apuntador_aux->inicio=apuntador_aux->inicio->sig;
}
if(apuntador_aux->inicio->valor==busca)
{
regresa=1;
}
if(apuntador_aux->inicio->sig==NULL)
{
regresa=0;
}
return regresa;
}
codigo
/*********************
**********************
** **
** conjuntos.c **
** **
**********************
*********************/
#include<string.h>
#include<stlist.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main()
{
_lista *lista_A;
_lista *lista_B;
int opc,dat,pert;
iniciaLista(lista_A);
do{
opc=0;
printf("\nIngresa valor 1° conjunto");
fflush(stdout);
scanf("%d",&dat);
/************************************/
ins_en_lista(lista_A,dat);
printf("\nDeseas ingresar otro valor ingresa 1\n");
scanf("%d",&opc);
}while(opc==1);
imprime_lista(lista_A);
/*****************/pert=pertenencia(lista_A,dat);
iniciaLista(lista_B);
do{opc=0;
printf("\nIngresa valor 2° conjunto");
scanf("%d",&dat);
ins_en_lista(lista_B,dat);
printf("\nDeseas ingresar otro valor ingresa 1");
scanf("%d",&opc);
}while(opc==1);
imprime_lista(lista_B);
}
ok funciona perfecto... pero mi bronka es que si pongo el sig. código ya no jala
(nececito hacer que no se repita un mismo valor en un conjunto, por lo cual mando llamar a pertenencia para que me indique si el elemento existe o no y asi poder )
/************************************/pert=pertenencia(lista_A,dat);
ins_en_lista(lista_A,dat);
printf("\nDeseas ingresar otro valor ingresa 1\n");
scanf("%d",&opc);
}while(opc==1);
imprime_lista(lista_A);
/*****************/
CAMBIE pert=pertenencia(lista_A,dat); de los asteriscos cortos al mas largo
espero me puedan explicar por que demonios pasa eso... por su atencion gracias