Ver Mensaje Individual
  #10 (permalink)  
Antiguo 03/03/2013, 06:34
Macas
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Printar lista enlazada

Me sigue sin funcionar, yo creo que el problema esta en el printar.

Si voy añadiendo nodos y los voy printando no hay problema, pero si luego elimino alguno y los printo todos es cuando me hace un segment fault.

Código:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "datos.h"

void afegirDNS(char dominio[20])
	
{	
	NodeDNS *Aux;	
	Aux=(NodeDNS *)malloc(sizeof(NodeDNS));

	strcpy(Aux->nombre,dominio);
	Aux->DNSseguent=NULL;

	if(PrimerNode==NULL)
	{
		PrimerNode=Aux;
		UltimNode=Aux;
	}
	else
	{
		UltimNode->DNSseguent=Aux;
		UltimNode=Aux;
	
	}
	
}

void printarLlistaDNS()
{
	NodeDNS *Temp;	

	Temp=PrimerNode;
	
	while(Temp)
	{
		printf("%s ->", Temp->nombre); 
		Temp=Temp->DNSseguent;
	}
	printf("NULL\n");
	
}

void printarprimer()
{
	
	if (PrimerNode!=NULL)
	{
		printf("El primer node es: %s\n\n",PrimerNode->nombre);
	}
	else
	{
		printf("Llista buida");
	}
}

void printarultim()
{

	if (UltimNode!=NULL)
	{
		printf("El ultim node es: %s\n\n",UltimNode->nombre);
	}
	else
	{
		printf("Llista buida");
	}

}

void eliminarNode(char dominio[20])
{
		
	
	NodeDNS *Actual;
	NodeDNS *Anterior;
	
	Actual=PrimerNode;
	Anterior=NULL;

	 while(Actual) 
	 {//cicle

        if(strcmp(Actual->nombre,dominio)==0)//Hemos encontrado el elemento a eliminar
            
			if(!Anterior)   //Es el primer node de la llista
			{   
                PrimerNode=Actual->DNSseguent;
			}
            else 
			{				//Si no es el primer node
                Anterior->DNSseguent = Actual->DNSseguent;
				UltimNode=Anterior;

				if(!strcmp(Actual->nombre, UltimNode->nombre)) 
				{
					UltimNode = Anterior;
				}

            }
            
            //allibera
            free(Actual);

            //surt del cicle
            break;
        }

  
        Anterior = Actual;
        Actual = Actual->DNSseguent;
	
}

void main()
{
	int opcion=0;
	char dominio[20];
	
	while(1)
	{
		printf("\n1- A");
		printf("%c",164);
		printf("adir DNS: \n\n");
		printf("2- Printar primer element\n\n");
		printf("3- Printar ultim element\n\n");
		printf("4- Printar tots els elements\n\n");
		printf("5- Eliminar un domini\n\n");

		printf("Seleccione una opcion: ");
		
		scanf("%d",&opcion);
		printf("\n\n");
			switch(opcion)
			{
				case 1:		printf("Introdueix el nom de domini: ");
							scanf("%s",dominio);
							afegirDNS(dominio);
							
							break;
				case 2:		printarprimer();
							break;
			
				case 3:		printarultim();
							break;

				case 4:		printf("\n");
							printarLlistaDNS();
							break;

				case 5:		printf("Introdueix el domini que vols eliminar: ");
							scanf("%s",dominio);
							eliminarNode(dominio);
							break;
			}
	}

	system("Pause");
}