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

TAD - Comparação entre Lista e Árvore (Dúvida)


cyberguy

Pergunta

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<<"***************************************";
}

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...