Hola tengo una duda cuando meto la siguiente combinacion en mi programa :
elijo opcion 1 guardo numero 2 vuelvo a elejir opcion 1 y guardo numero 1 se rompe alguien me puede decir ¿por que?
aqui les pongo el codigo
Código C:
Ver original#include<stdio.h>
#include<stdlib.h>
struct nodo{
int dato;
nodo *siguiente;
};
int menu();
void *crear(void *);
void *eliminar(void *);
void *mostrar(void *);
main(){
void *p=NULL;
int x;
do{
x=menu();
switch(x){
case 1: p=crear(p);
continue;
case 2: p=eliminar(p);
break;
case 3: p=mostrar(p);
continue;
}
}while(x<4);
}
int menu(){
int x;
do{
printf("1.- Introducir elemento a la Lista\n"); printf("2.- Eliminar elemento de la Lista\n"); printf("3.- Mostar elementos de la Lista\n"); printf("Elige una Opcion => "); }while(x<1&&x>4);
return x;
}
void *crear(void *p){
nodo *q,*aux,*aux1;
q
=(nodo
*)malloc(sizeof(nodo
)); q->siguiente=NULL;
printf("Dame un numero para ingresar en la Lista\t"); if(p==NULL){
p=q;
}
else{
aux=(nodo*)p;
if(q->dato<aux->dato){
q->siguiente=aux;
p=q;
}
else{
aux=(nodo*)p;
while(aux->dato<q->dato&&aux->siguiente!=NULL){
aux1=aux;
aux=aux->siguiente;
}
}
if(aux->siguiente==NULL&&aux->dato<q->dato){
aux->siguiente=q;
}
else{
aux1->siguiente=q;
q->siguiente=aux;
}
}
return (p);
}
void *eliminar(void *p){
nodo *q,*aux,*aux1;
int x;
aux=(nodo*)p;
printf("Numero a eliminar de la Lista\t"); if(p==NULL){
}
else{
while(aux->dato<x&&aux->siguiente!=NULL){
aux1=aux;
aux=aux->siguiente;
}
if(aux->dato==x){
if(aux==p){
if(aux==NULL){
p=NULL;
}
else{
p=aux->siguiente;
}
}
else{
if(aux->siguiente==NULL){
aux1->siguiente=NULL;
}
else{
aux1=aux->siguiente;
}
}
}
else{
printf("Elemento no existente"); }
}
return p;
}
void *mostrar(void *p){
nodo*s;
s=(nodo*)p;
if(p==NULL){
}
else{
do{
s=s->siguiente;
}while(s!=NULL);
}
return p;
}