|
hp2FEM
0.1
|
00001 #ifndef ACTREE_HPP 00002 #define ACTREE_HPP 00003 00004 #include "acdp.h" 00005 00006 typedef int (*fcmp) (void *, void *); // funcao de comparacao 00007 typedef void (*fprt) (FILE *, void *); // funcao de impressao 00008 00009 // definicao de uma classe para representar o no' da arvore generica 00010 class acNodeTree 00011 { 00012 friend class acTree; 00013 00014 private: 00015 acNodeTree *l, *r; // pointer para os filhos 00016 void *dados; // pointer para os dados 00017 public: 00018 acNodeTree *GetLeft() { return(l); } 00019 acNodeTree *GetRight() { return(r); } 00020 void *GetData() { return(dados); } 00021 }; 00022 00023 00024 class acTree 00025 { 00026 private: 00027 acNodeTree *head; // inicio da arvore 00028 int sizedados; // numero de bytes dos dados 00029 fcmp cmp; // funcao de comparacao 00030 fprt prt; // funcao de impressao 00031 int size_tree(acNodeTree *); 00032 void Print(FILE *fp, acNodeTree *); 00033 void cnivel(long nivel, acNodeTree *); 00034 void setniv(long nivel, acNodeTree *); 00035 long NumNiveis; // numero de niveis 00036 long *vecniv; // vetor com niveis 00037 void setvec (void **v, long &i, acNodeTree *t); 00038 // void setvec (void huge * huge *v, long &i, acNodeTree *t); 00039 // acNodeTree *Rebuild (void huge * huge *v, long n); 00040 acNodeTree *Rebuild (void **v, long n); 00041 acNodeTree *resttree(long, FILE *); 00042 void savetree(FILE *, acNodeTree *); 00043 void errorcmp(); // erro de comparacao 00044 void erroralloc(); // erro de alocacao 00045 void errorinit(); // erro de inicializacao 00046 void errorprt(); // erro de impressao 00047 00048 00049 public: 00050 00051 // Funcao para retornar o inicio da arvore 00052 acNodeTree *GetHead() { return(head); } 00053 00054 00055 /********************************************* 00056 * Construtor e destrutor da arvore generica * 00057 *********************************************/ 00058 00059 /* 00060 ** Construtores 00061 ** 00062 ** Formas de uso: 00063 ** 00064 ** acTree tree(sizeof(tipo), func_comp); 00065 ** Cria tree e armazena tamanho dos dados e 00066 ** a funcao de comparacao para pesquisa e 00067 ** e insercao ordenada. 00068 ** 00069 ** acTree tree(sizeof(tipo), func_comp, func_prt); 00070 ** Cria tree e armazena tamanho dos dados, 00071 ** da funcao de comparacao para pesquisa e 00072 ** e insercao ordenada e funcao de impressao/gravacao. 00073 */ 00074 acTree() 00075 { 00076 head = 0; 00077 sizedados = 0; 00078 cmp = 0; 00079 prt = 0; 00080 } 00081 00082 acTree(int s, fcmp c) 00083 { 00084 head = 0; 00085 sizedados = s; 00086 cmp = c; 00087 prt = 0; 00088 } 00089 00090 acTree(int s, fcmp c, fprt p) 00091 { 00092 head = 0; 00093 sizedados = s; 00094 cmp = c; 00095 prt = p; 00096 } 00097 00098 // Coloca dados em uma arvore criada sem argumentos 00099 void SetTreeData(int s, fcmp c) 00100 { 00101 head = 0; 00102 sizedados = s; 00103 cmp = c; 00104 prt = 0; 00105 } 00106 00107 // Funcao para deletar todos os nos de uma arvore 00108 void Clear(acNodeTree *n = 0, int first = 1); 00109 00110 // Funcao para deletar um no' a partir de uma chave 00111 // Se deletar retorna 1 e em caso contrario retorna 0 00112 int DelNode(void *); 00113 00114 // Funcao para inserir um dado na arvore 00115 // Se inserir, retorna 1 e em caso contrario retorna 0 00116 // -1 -> erro 00117 int Insert(void *val); 00118 00119 // funcao para inserir um dado na arvore 00120 // Se inserir, retorna o ponteiro para o no' criado 00121 // e em caso contrario, retorna NULL 00122 void *InsRet(void *val); 00123 00124 // Funcao para inserir ou deletar um dado na arvore 00125 // Se inserir, retorna 1 e se deletar retorna 0 00126 // -1 -> erro 00127 int InsDel(void *val); 00128 00129 // Funcao para retornar o tamanho de uma arvore 00130 int Size(); 00131 00132 // Funcao que retorna um pointer para um no' 00133 // se nao achar, retorna NULL 00134 void *Search(void *x); 00135 00136 // grava ou imprime a arvore 00137 void Print(FILE *fp) { if (prt) Print(fp, head); } 00138 00139 // grava arvore 00140 void Save(FILE *fp); 00141 00142 // recurepa uma arvore 00143 void Restore(long n, FILE *fp); 00144 00145 // imprime numero de niveis da arvore 00146 int PrintNivels(FILE *); 00147 00148 // Rebalancea arvore 00149 void Balance(); 00150 00151 // Reordena arvore 00152 void Reorder(); 00153 00154 }; 00155 00156 00157 #endif // ACTREE_HPP
1.7.6.1