Ir para conteúdo
Fórum Script Brasil

Cristian Kirsch Foesch

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Posts postados por Cristian Kirsch Foesch

  1. Pessoal estou fazendo uma arvore binaria em C, e quando vou compilar da esse  erro, já tentei mudar o diretório e nada, e eu não uso antivírus, somente o windows defender

    image.thumb.png.1e6ce421a4a59f9771bbdcc12b1def52.png

    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    
    
    int main();
    void insere (struct no *&praiz, struct no *novo);
    void emordem (struct no *raiz);
    void preordem (struct no *raiz);
    void posordem (struct no *raiz);
    int pesquisa (struct no *aux1, int itemaux);
    void remove (struct no *&aux1);
    
    struct no
    {
    int item;
    struct no *esq, *dir;
    };
    struct no *raiz, *aux1, *aux2;
    
    
    int main()
    {
    char c, op = '1', auxitem[3];
    int achou;
    
    
    raiz = (struct no*) NULL; // inicializa a arvore vazia
    while (op != '0')
    {
    
    puts(" 	 Arvores Binarias de Busca  ");
    puts("1. Inserir Elemento na Arvore");
    puts("2. Consultar Elemento na Arvore");
    puts("3. Remover Elemento da Arvore");
    
    puts("4. Mostrar Arvore em Pre - Ordem");
    puts("5. Mostrar Arvore em In - Ordem");
    puts("6. Mostrar Arvore em Pos - Ordem");
    
    puts("0. Sair");
    printf("Digite sua opcao: ");
    op = getche();
    
    switch(op)
    {
    case '1': // insere
    {
    aux1 = (struct no *) malloc(sizeof(struct no));
    printf("\n\nDigite Elemento a ser inserido: ");
    gets(auxitem);
    aux1->item = atoi(auxitem);
    aux1->esq = aux1->dir = (struct no*) NULL;
    if (raiz == (struct no *) NULL)
    raiz = aux1;
    else
    {
    aux2 = raiz;
    insere(aux2, aux1);
    }
    }
    break;
    
    case '2': // consulta
    {
    if (raiz == (struct no *) NULL)
    printf("\n\nElemento Não Encontrado. Arvore vazia !");
    else
    {
    printf("\n\nDigite Elemento a ser pesquisado: ");
    gets(auxitem);
    achou = pesquisa(raiz, (atoi(auxitem)));
    if (achou)
    puts("Achou !");
    else
    puts ("não achou !");
    }
    }
    break;
    
    case '3': // remove
    {
    if (raiz == (struct no *) NULL)
    printf("\n\nNão Foi Possível Remover. A arvore vazia !");
    else
    {
    printf("\n\nDigite Elemento a ser removido: ");
    gets(auxitem);
    achou = pesquisa(raiz, (atoi(auxitem)));
    if (!achou)
    puts("Não Foi Possível Remover. O elemento não existe na arvore !");
    else // acha o endereco a ser modificado e passa p/ a funcao remove
    {
    if (raiz->item == atoi(auxitem)) // remove o nó que estah
    remove(raiz); // ocupando a raiz da arvore
    else
    {
    aux1 = raiz;
    while((aux1->dir->item != atoi(auxitem)) && (aux1->esq->item != atoi(auxitem)))
    {
    if (atoi(auxitem) <= aux1->item)
    aux1 = aux1->esq;
    else
    aux1 = aux1->dir;
    } // while
    if (aux1->dir->item == atoi(auxitem))
    remove(aux1->dir);
    else
    remove(aux1->esq);
    } // else if raiz->item == auxitem
    } // else if !achou
    } // else if raiz == NULL
    } // case '3'
    break;
    
    case '4': // imprime em pre ordem
    {
    printf("\n\nMostrar em Pre - Ordem: ");
    preordem(raiz);
    }
    break;
    
    case '5': // imprime In - Ordem (central)
    {
    printf("\n\nMostrar em In - Ordem: ");
    emordem(raiz);
    }
    break;
    
    case '6': //Mostrar em Pos - Ordem
    {
    printf("\n\nImprimindo os componentes em pos-ordem: ");
    posordem(raiz);
    }
    break;
    
    case '0': break;
    
    default : puts("\nOpcao invalida");
    } /* switch */
    puts("\nPressione <ENTER> para continuar");
    while ((c = getchar()) != '\n');
    } /* while */
    } /* funcao main () */
    
    void insere (struct no *&praiz, struct no *novo)
    {
    if (praiz == (struct no *) NULL)
    praiz = novo;
    else
    {
    if (novo->item <= praiz->item)
    insere(praiz->esq, novo);
    else
    insere(praiz->dir, novo);
    }
    }
    
    int pesquisa (struct no *aux1, int itemaux)
    {
    if (aux1 == (struct no *) NULL) // não achou
    return(0);
    if (aux1->item == itemaux) // achou
    return(1);
    if (itemaux <= aux1->item)
    pesquisa(aux1->esq, itemaux);
    else
    pesquisa(aux1->dir, itemaux);
    } /* funcao pesquisa */
    
    void remove (struct no *&aux1)
    {
    struct no *temp;
    
    if (aux1->dir == (struct no *) NULL)
    {
    temp = aux1;
    aux1 = aux1->esq;
    free(temp);
    }
    else
    if (aux1->esq == (struct no *) NULL)
    {
    temp = aux1;
    aux1 = aux1->dir;
    free(temp);
    }
    else // ambas as subarvores do nó a ser removido estao ocupadas
    {
    temp = aux1->dir;
    
    while (temp->esq != (struct no *) NULL) // acha a posicao mais a
    temp = temp->esq; // esquerda possivel na
    // subarvore da direita
    
    temp->esq = aux1->esq; // liga esta posicao com a subarvore
    // esquerda do nó a ser removido
    temp = aux1;
    aux1 = aux1->dir; // faz a subarvore da direita assumir o lugar do
    // nó a ser removido
    free(temp);
    }
    } 
    
    
    /* funcao remove */
    
    void inordem (struct no *raiz)
    {
    if (raiz != (struct no *) NULL)
    {
    inordem(raiz->esq);
    printf("%d ", raiz->item);
    inordem(raiz->dir);
    }
    }
    
    void preordem (struct no *raiz)
    {
    if (raiz != (struct no *) NULL)
    {
    printf("%d ", raiz->item);
    preordem(raiz->esq);
    preordem(raiz->dir);
    }
    }
    
    void posordem (struct no *raiz)
    {
    if (raiz != (struct no *) NULL)
    
    {
    posordem(raiz->esq);
    posordem(raiz->dir);
    printf("%d ", raiz->item);
    }
    }

     

  2. 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");	
    } 

     

  3. 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");	
    } 

     

×
×
  • Criar Novo...