Cristian Kirsch Foesch

Membros
  • Content Count

    3
  • Joined

  • Last visited

Community Reputation

0 Neutro

About 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 #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"); }