Jump to content

Linked List


Guest
 Share

Recommended Posts

Tenho aqui um problema, eu estou a estudar Estrutura de Dados e estou com algumas duvidas em Linked Lists. O meu programa compila normalmente, mas esta a dar me erro na funçao Imprimir,mas nao penso que seja dessa função, só não estou a ver de onde venha o erro, se me poderem ajudar agradecia

/* Listas Ligadas */

#include<stdio.h>
#include<stdlib.h>


typedef struct no *Ptno;

struct no 
{
Ptno Ptseg;
int Elem;
};

Ptno Criar_no (int x)  /* Create a node */
{
Ptno no;

if((no= malloc(sizeof(struct no)))==NULL)
	return NULL;

no->Elem=x;
no->Ptseg=NULL;

return no;
}

void imprimir(Ptno head)  /* Print the list */
{
Ptno no;

if(head==NULL)
	{
		printf("Erro!\n");
		exit(1);
	}

printf("Elementos da lista:\n");

for(no=head;no!=NULL;no=no->Ptseg)
	{
		printf("%d",no->Elem);
		putchar('\n');
	}
}


/*void remover_no(Ptno no) 
{
if (no != NULL && *no != NULL)
{
	Ptno no1 = no;
	no1 = (*no1)->next;
	free(no);
}
}*/

void InserirElemento(Ptno head, int elem)   /* Add elements to the list */
{
Ptno NoInserir; /* Node to create */
Ptno NoAnt=NULL;   /* Node before the actual node*/    /* GDB dá me erro aqui */
Ptno NoActual=head; /* Actual Node */

if ((NoInserir = Criar_no(elem))==NULL)
	{
		printf("Erro na alocaçao de memoria!!");
		exit(1);
	}



while(NoActual != NULL)
	{
		NoAnt = NoActual;
		NoActual = NoActual->Ptseg;
	} 

if (NoAnt==NULL)
	{
		NoInserir->Ptseg = head;
		head = NoInserir;
	}
else
	{
		NoInserir->Ptseg = NoActual;
		NoAnt->Ptseg = NoInserir;
	}
}


int main(void)
{
Ptno head=NULL;
/*int valor1;
int valor2;
int valor3; */
int i;

/*printf("Introduza um valor para introduzir na lisa:");
scanf("%d",&valor1); putchar('\n');

printf("Introduza um valor para introduzir na lista:");
scanf("%d",&valor2); putchar('\n');

printf("Introduza um valor para introduzir na lista:");
scanf("%d",&valor3); putchar('\n'); */

/* Criar o 1º no 

Ptno n1 = head = Criar_no(valor1);
if(n1==NULL)
	{
		printf("Erro a criar o 1º no\n");
		exit(1);
	}

* Criar 2º No 

Ptno n2 = Criar_no(valor2);
if(n2==NULL)
	{
		printf("Erro ao criar o 2º no\n");
		exit(1);
	}
else
	n1->Ptseg=n2;

 Criar 3º No 

Ptno n3=Criar_no(valor3);
if(n3==NULL)
	{
		printf("Erro nao criar o 3º no\n");
		exit(1);
	}
else
	n2->Ptseg=n3; */

/* Imprimir a lista */

for(i=0;i<10;i++)
	InserirElemento(head,i);




imprimir(head);

/*remover_no(n3);


imprimir(head); */

return 0;

}	

Não liguem ao código comentado 🙂

Agradeço desde já o tempo despendido

Codigo no pastebin

http://www.pastebin.org/402189

Output

http://pastebin.org/402188

Link to comment
Share on other sites

/* Listas Ligadas */

#include<stdio.h>
#include<stdlib.h>


typedef struct no *Ptno;

struct no 
{
Ptno Ptseg;
int Elem;
};

Ptno Criar_no (int x)  /* Create a node */
{
Ptno no;

if((no= malloc(sizeof(struct no)))==NULL)
	return NULL;

no->Elem=x;
no->Ptseg=NULL;

return no;
}

void imprimir(Ptno head)  /* Print the list */
{
Ptno no;

if(head==NULL)
	{
		printf("Erro!\n");
		exit(1);
	}

printf("Elementos da lista:\n");

for(no=head;no!=NULL;no=no->Ptseg)
	{
		printf("%d",no->Elem);
		putchar('\n');
	}
}


/*void remover_no(Ptno no) 
{
if (no != NULL && *no != NULL)
{
	Ptno no1 = no;
	no1 = (*no1)->next;
	free(no);
}
}*/

void InserirElemento(Ptno *head, int elem)   /* Add elements to the list */
{
Ptno NoInserir; /* Node to create */
Ptno NoAnt=NULL;   /* Node before the actual node*/
Ptno NoActual=head; /* Actual Node */

if ((NoInserir = Criar_no(elem))==NULL)
	{
		printf("Erro na alocaçao de memoria!!");
		exit(1);
	}



while(NoActual != NULL)
	{
		NoAnt = NoActual;
		NoActual = NoActual->Ptseg;
	} 

if (NoAnt==NULL)
	{
		NoInserir->Ptseg = head;
		head = NoInserir;
	}
else
	{
		NoInserir->Ptseg = NoActual;
		NoAnt->Ptseg = NoInserir;
	}
}


int main(void)
{
Ptno head=NULL;
/*int valor1;
int valor2;
int valor3; */
int i;

/*printf("Introduza um valor para introduzir na lisa:");
scanf("%d",&valor1); putchar('\n');

printf("Introduza um valor para introduzir na lista:");
scanf("%d",&valor2); putchar('\n');

printf("Introduza um valor para introduzir na lista:");
scanf("%d",&valor3); putchar('\n'); */

/* Criar o 1º no 

Ptno n1 = head = Criar_no(valor1);
if(n1==NULL)
	{
		printf("Erro a criar o 1º no\n");
		exit(1);
	}

* Criar 2º No 

Ptno n2 = Criar_no(valor2);
if(n2==NULL)
	{
		printf("Erro ao criar o 2º no\n");
		exit(1);
	}
else
	n1->Ptseg=n2;

 Criar 3º No 

Ptno n3=Criar_no(valor3);
if(n3==NULL)
	{
		printf("Erro nao criar o 3º no\n");
		exit(1);
	}
else
	n2->Ptseg=n3; */

/* Imprimir a lista */

for(i=0;i<10;i++)
	InserirElemento(&head,i);




imprimir(head);

/*remover_no(n3);


imprimir(head); */

return 0;

}	

Obrigado IceBrain e Masterkorp pela ajuda 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.