Ver Mensaje Individual
  #9 (permalink)  
Antiguo 21/04/2010, 16:43
batiguason
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ayuda con listas dinamicas en C :)

bueno supongo que no es elcódigo más optimo pero para empezar creo que esta bn

Código:
#include<stdio.h>
#include<stdlib.h>
typedef struct n{
	int dato;
	struct n *sig;
}NODO;
NODO *raiz;
int inserta_orden(int nv) {
	NODO *principal,*anterior,*nuevo_nodo;
	nuevo_nodo=(NODO*)malloc(sizeof(NODO));
	nuevo_nodo->dato=nv;
	nuevo_nodo->sig=NULL;
	principal=raiz;
	anterior=raiz;
	if (raiz==NULL) {
		raiz=nuevo_nodo;
		return 0;
	}
		if (nuevo_nodo->dato < principal->dato) {
			raiz=nuevo_nodo;
			raiz->sig=principal;
			return 0;
		}
		while (principal->dato < nuevo_nodo->dato) {
			if (principal->sig==NULL)
				break;	
				anterior=principal;
				principal=principal->sig;
			}
			if (principal->sig!=NULL) {
				anterior->sig=nuevo_nodo;
				nuevo_nodo->sig=principal;
			}
		    else
				principal->sig=nuevo_nodo;
}
void imprimir(int num) {
	NODO *aux;
	int i;
	aux=raiz;
	printf("\nImprime:");
	for(i=0;i<num;i++) {
		printf("\n%i",aux->dato);
		aux=aux->sig;
	}
}
int eliminar(int del) {
	NODO *principal,*anterior;
	if (raiz==NULL) {
		printf("\nTu lista esta vacia");
		return 0;
	}
	principal=raiz;
	anterior=raiz;
	if (principal->sig==NULL && principal->dato==del) {
		free(principal);
		raiz=NULL;
	}
	else {
		while (principal->dato!=del&&principal->sig!=NULL) {
			anterior=principal;
			principal=principal->sig;
		}
		if (principal->dato==del) 
			if(principal->sig==NULL) {
				anterior->sig=NULL;
				free(principal);
			}
			else if(principal==raiz)
				free(principal);
			else {
				anterior->sig=principal->sig;
				free(principal);
			}
		else
			printf("\nDato no encontrado");
	}
}
main () {
	int i,num,veces,borrar;
	raiz=NULL;
	printf("\nCuantos números deseas leer? ");
	scanf("%i",&veces);
	for(i=0;i<veces;i++) {
		printf("\nDame un numero ");
		scanf("%i",&num);
		inserta_orden(num);
	}
	imprimir(num);
	return 0;
}
Por cierto mi fúncion eliminar no funciono :S jahajajaja sali de un problema para entrar en otro me podrian ayudar o decirme si tengo algún error plz :)