Arvore com lista em C
#include
using namespace std;
// LISTA
typedef struct { int Chave;
} TipoItem;
typedef struct TipoCelula *TipoApontador;
typedef struct TipoCelula { TipoItem Item; TipoApontador Prox;
} TipoCelula;
typedef struct { TipoApontador Primeiro, Ultimo;
} TipoLista;
// ARVORE typedef struct Registro { char Palavra[50]; TipoLista Paginas;
} Registro;
typedef struct No * Apont; typedef struct No { Registro Reg; Apont Esq, Dir;
} No;
typedef Apont IndiceRemissivo;
// FUNÇÕES LISTA
void FLVazia(TipoLista *Lista)
{ Lista -> Primeiro = (TipoApontador) malloc(sizeof(TipoCelula)); Lista -> Ultimo = Lista -> Primeiro; Lista -> Primeiro -> Prox = NULL;
}
void InsereNaLista(TipoItem x, TipoLista *Lista)
{ Lista -> Ultimo -> Prox = (TipoApontador) malloc(sizeof(TipoCelula)); Lista -> Ultimo = Lista -> Ultimo -> Prox; Lista -> Ultimo -> Item = x; Lista -> Ultimo -> Prox = NULL;
}
void Imprime(TipoLista Lista)
{ TipoApontador Aux; Aux = Lista.Primeiro -> Prox; while (Aux != NULL) { printf("%d\n", Aux -> Item.Chave); Aux = Aux -> Prox; }
}
// FUNÇÕES ARVORE void PesquisaPalavraInserePagina(Registro *x, Apont *p, int n)
{ if (*p == NULL) { printf("Erro : Registro nao esta presente na arvore\n"); return; } if ( strcmp( x->Palavra, (*p)->Reg.Palavra ) < 0 ) { PesquisaPalavraInserePagina(x, &(*p)->Esq , n); return; } if ( strcmp( x->Palavra, (*p)->Reg.Palavra ) > 0 ) PesquisaPalavraInserePagina(x, &(*p)->Dir, n); else{ TipoItem temp; temp.Chave=n; InsereNaLista (temp, &(*p)->Reg.Paginas); }
}
void InsereNaArvore(Registro x, Apont *p)
{ if (*p == NULL) { *p = (Apont)malloc(sizeof(No)); (*p)->Reg = x; (*p)->Esq = NULL; (*p)->Dir = NULL; FLVazia(&(*p)->Reg.Paginas); return; } if ( strcmp( x.Palavra, (*p)->Reg.Palavra ) < 0 ) {