Ir para conteúdo
Fórum Script Brasil
  • 0

Codigo de lista não compila


Cristian Kirsch Foesch

Pergunta

Pessoal eu tenho esse código que esta compilando mas quando vou executar alguma das funções ele trava, alguém  pode me ajudar?

 

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

typedef struct lista{
	int info;
	struct lista *prox;
 }Lista;

Lista *cria(){
	return NULL;
}


Lista* insere_ordenado (Lista*l, int v){
    Lista* novo = cria ();
    Lista* ant = NULL;
    Lista* p = l;
while (p!=NULL && p->info < v){
	ant=p;
	p=p->prox;
}
if(ant==NULL){
	novo->prox=l;
	l=novo;
}
else {
	novo->prox= ant->prox;
	ant->prox=novo;
}
return l;
}

Lista *conecta(Lista* l1, Lista *l2){
	lista*p,*q;
	
if(l1=NULL) return l2;
	p=l1;
do{q=p;
	p=p->prox;
	}
while(p!=NULL);
	q->prox=l2;
	
return l1;
}

Lista *separa(Lista*l,int n){
	lista *p, *q;
	
	for(p=l;p!=NULL;p=p->prox)
	   if(p->info==n){
	   	q=p->prox=NULL;
	   }
	return q; 
}
   
Lista* constroi (int n,int* v){
	Lista*p;
	Lista*q;
	int i;
	q=NULL;
for(i=n-1;i<=0;i--)
{p=(Lista*)malloc(sizeof(Lista));
	p->prox=q;
	p->info=v[i];
	q=p;
}
return q;
}

Lista* retira_prefixo (Lista* l, int n) {
	Lista* p;
	Lista* q;
	int m=1;
	p=l;
	while (p != NULL && m<=n) {
		m=m+1;
		q=p->prox;
		free(p);
		p=q;
		}
		return p;
}

void opcoes (){
	printf ("Escolha a opcao\n");
	printf ("1 - Inserir um dado\n");
	printf ("2 - Conecta listas \n");
	printf ("3 - Separa listas\n ");
	printf ("4 - Retirar um Elemento\n");
	printf ("5 - Insere Ordenado\n");
	printf ("6 - Sair\n");
	printf ("Digite um valor fora da lista para repetir o menu\n");
}

main ()
{
	Lista *l,*l1,*l2=NULL, *ret;	
	int op, a, x, v;	
	opcoes ();
	scanf ("%d",&op);

	while (op!=6){
		switch (op){
		case 1:
			printf ("Digite o valor\n");	
			scanf ("%d",&a);
			l=insere_ordenado(l,a);
		break;
		case 2:printf ("Digite o valor da lista 1\n");	
			   scanf ("%d",&a);
	    	l1=insere_ordenado(l,a);
		printf ("Digite o valor da lista 2 \n");	
		scanf ("%d",&a);
		 	l2=insere_ordenado(l,a);
		l=conecta (l1,l2); break;
		case 3: printf ("Digite o valor aonde voce quer separar a lista\n");	
			scanf ("%d",&a);
		l=separa (l,a); break;
		case 4: 
			printf ("Informe o valor para remover da lista\n");
			scanf ("%d",&v);
			ret=retira_prefixo (l,v);break;
		case 5:printf ("Informe o valor para remover da lista\n");
			scanf ("%d",&v); 
		l=insere_ordenado (l,v);break;
		default: printf ("\nOpcao invalida\n\n");
			opcoes();
		}
	printf ("\nInforme a opcao\n");
	scanf ("%d",&op);
}
system ("pause");	
} 

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...