14/04/2010, 17:37
|
| | Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 9 meses Puntos: 0 | |
Respuesta: ayuda con listas dinamicas en C :) Ps modifique mi código raramente solo funciono una vez y luego mi viejo amigo segmentation fault salio :D muchas gracias a las respuestas anteriores por cierto me sirvieron para hacerlo un poco mas simple mi código :D.
Código:
#include <stdio.h>
#include <stdlib.h>
typedef struct n{
int dato;
struct n *sig;
}NODO;
NODO *raiz;
void insertaInicio(int d) {
NODO *aux;
aux=(NODO *)malloc(sizeof(NODO));
aux->dato=d;
aux->sig=NULL;
if (raiz==NULL) raiz=aux;
else {
aux->sig=raiz;
raiz=aux;
}
}
void imprimeLista() {
NODO *aux;
aux=raiz;
printf("\nImprime");
while (aux!=NULL) {
printf("\nDato: %d", aux->dato);
aux=aux->sig;
}
}
void eliminar() {
int eliminar;
NODO *auxiliar,*anterior;
printf("\nQue dato desea eliminar ?");
scanf("%i",&eliminar);
printf("\n%i",eliminar);
auxiliar=raiz;
anterior=raiz;
while(auxiliar->sig!=NULL) {
printf("\nciclo bien");
if(auxiliar->dato == eliminar){
printf("\nentre");
anterior->sig=auxiliar->sig;
free(auxiliar);
break;
}
anterior=auxiliar;
auxiliar=auxiliar->sig;
}
if (eliminar==auxiliar->dato){
}
}
void insertar_orden(int nuevo_valor) {
NODO *principal,*anterior,*nuevo_nodo;
nuevo_nodo=(NODO *)malloc(sizeof(NODO));
anterior=raiz;
principal=raiz;
if (principal==NULL) {
principal->dato=nuevo_valor;
principal->sig=principal;
}
else {
nuevo_nodo->dato=nuevo_valor;
while (principal->sig!=NULL)
if (principal->dato <= nuevo_nodo->dato) {
anterior=principal;
principal=principal->sig;
}
else {
anterior->sig=nuevo_nodo;
nuevo_nodo->sig=principal;
raiz=nuevo_nodo;
break;
}
}
}
void eliminaFinal() {
NODO *aux;
NODO *ant;
aux=raiz;
ant=raiz;
if (raiz!= NULL) { //la lista no esta vacia
while (aux->sig !=NULL) {
ant=aux;
aux=aux->sig;
}
if (raiz->sig==NULL) {
free(aux); //quiere decir que la lista solo tiene un nodo
raiz=NULL;
}
else {
free(aux);
ant->sig=NULL;
}
}
}
main() {
int i,valor;
raiz->sig=NULL;
for (i=0;i<3;i++) {
printf("\nDame el valor a insertar ");
scanf("%i",&valor);
insertar_orden(valor);
}
eliminar();
imprimeLista();
getchar();
}
|