Ir para conteúdo
Fórum Script Brasil

cyberguy

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre cyberguy

cyberguy's Achievements

0

Reputação

  1. Olá pessoal, estou com uma dúvida em um exercício que pede o seguinte: criar um programa que faça uma comparação entre uma lista e uma árvore, e exibir o resultado. Porém o main.cpp deve conter apenas uma biblioteca .h, com os protótipos das funções da lista e da árvore. O problema é que eu só estou conseguindo fazer inserindo ‘#includes’ da lista e da árvore no arquivo .h, pois quando eu tento inserir os protótipos das funções, dá erro. Se alguém puder me ajudar e me mostrar aonde eu estou errando, eu agradeço. Segue abaixo os códigos que desenvolvi: ListaApo.cpp //Implementação de Lista com Apontador #include <stdlib.h> #include <stdio.h> #include "elemento.h" int contL; struct Celula { Elemento Item; Celula *Prox; }; struct TipoLista { Celula *Primeiro, *Ultimo; }; void FLVazia(TipoLista &Lista) { Lista.Primeiro = (Celula*)malloc(sizeof(Celula)); Lista.Ultimo = Lista.Primeiro; (*Lista.Ultimo).Prox = NULL; } int Vazia(TipoLista Lista) { return(Lista.Ultimo == Lista.Primeiro); } void Insere(Elemento x, TipoLista &Lista) { (*Lista.Ultimo).Prox = (Celula*)malloc(sizeof(Celula)); Lista.Ultimo = (*Lista.Ultimo).Prox; (*Lista.Ultimo).Item = x; (*Lista.Ultimo).Prox = NULL; } void InsereInicio(Elemento x, TipoLista &Lista) { Celula *p = (Celula*)malloc(sizeof(Celula)); (*p).Item = x; (*p).Prox = (*Lista.Primeiro).Prox; (*Lista.Primeiro).Prox = p; } void Limpa(TipoLista &Lista) { Celula *aux = (*Lista.Primeiro).Prox; Celula *aux_prox; while (aux != NULL) { aux_prox = (*aux).Prox; free(aux); aux = aux_prox; } Lista.Ultimo = Lista.Primeiro; (*Lista.Ultimo).Prox = NULL; } Celula *Localiza(TipoLista Lista, int Valor) { Celula *p = Lista.Primeiro; while ((*p).Prox != NULL) { contL++; if ((*(*p).Prox).Item.Valor == Valor) return(p); p = (*p).Prox; } return(NULL); } void Retira(Celula *p, TipoLista &Lista, Elemento &Item) { Celula *q; if (Vazia(Lista) || p == NULL || (*p).Prox == NULL) printf("\nErro\n"); else { q = (*p).Prox; Item = (*q).Item; (*p).Prox = (*q).Prox; if ((*p).Prox == NULL) Lista.Ultimo = p; free(q); } } void Imprime(TipoLista Lista) { Celula *aux = (*Lista.Primeiro).Prox; int cont = 1; printf(">> Elementos da Lista <<\n"); while (aux != NULL) { printf("Elemento %d = ", cont++); printf("%d\n", (*aux).Item.Valor); aux = (*aux).Prox; } printf("-----------------------\n"); } Arvore.cpp //Implementação de Árvore Binária de Busca #include <stdlib.h> #include <stdio.h> #include "elemento.h" int contA; typedef struct Nodo{ Elemento Item; Nodo *Esq, *Dir; }*TipoArvore; void Inicializa(TipoArvore &Tree) { Tree = NULL; } void Pesquisa(Elemento x, TipoArvore p) { if (p == NULL) ;//printf("\nRegistro não esta na arvore\n"); else { contA++; if (x.Valor <= (*p).Item.Valor) Pesquisa(x, (*p).Esq); else Pesquisa(x, (*p).Dir); } } void Insere(Elemento x, TipoArvore &p) { if (p == NULL) { p = (Nodo*)malloc(sizeof(Nodo)); (*p).Item = x; (*p).Esq = NULL; (*p).Dir = NULL; } else if (x.Valor <= (*p).Item.Valor) Insere(x, (*p).Esq); else if (x.Valor > (*p).Item.Valor) Insere(x, (*p).Dir); } void Antecessor(Nodo *q, TipoArvore &r) { if ((*r).Dir != NULL) Antecessor(q, (*r).Dir); else { (*q).Item = (*r).Item; q = r; r = (*r).Esq; free(q); } } void Retira(Elemento x, TipoArvore &p) { Nodo* Aux; if (p == NULL) printf("\nRegistro não esta na arvore\n"); else if (x.Valor < (*p).Item.Valor) Retira(x, (*p).Esq); else if (x.Valor >(*p).Item.Valor) Retira(x, (*p).Dir); else if ((*p).Dir == NULL) { Aux = p; p = (*p).Esq; free(Aux); } else if ((*p).Esq != NULL) Antecessor(p, (*p).Esq); else { Aux = p; p = (*p).Dir; free(Aux); } } elemento.h #ifndef __elemento_h #define __elemento_h struct Elemento { int Valor; }; #include "Arvore.cpp" #include "ListaApo.cpp" #endif Main.cpp (Arquivo principal que fará as comparações) #include <iostream> #include "elemento.h" using namespace std; int nu,con; Elemento e; float mediaTree, mediaList; int main(){ cout << "NUMERO ******** ARVORE ******** LISTA" << endl; for (nu = 100; nu <= 2000; nu += 100){ contA = 0; contL = 0; TipoArvore tree; TipoLista lst; Inicializa(tree); FLVazia(lst); for (con = 1; con <= nu; con++){ e.Valor = 1 + rand() % nu; Insere(e, tree); Insere(e, lst); } for (con = 1; con <= (2 * nu); con++){ e.Valor = 1 + rand() % (2 * nu); Pesquisa(e, tree); Localiza(lst, e.Valor); } mediaTree = contA / (2.0 * nu); mediaList = contL / (2.0 * nu); cout << nu << "\t\t" << mediaTree << "\t\t" << mediaList << endl; } cout<<"***************************************"; }
  2. Na minha mente tem pensamentos... O.o

×
×
  • Criar Novo...