Atps estrura de dados
Etapas 3, 4 e 5
Descrição das principais funções
Função CriaLista
A função recebe um ponteiro para TBloco chamado bloco e um int t que é o tamanho da lista. É alocada memória através do malloc. Essa função chama a função CriaListaVazia e depois a função LInsere para inserir na lista o valor cada elemento com a posição em que ele está.
//Criação da lista. void CriaLista(TBloco* bloco, int t)
{
int i ; bloco->tam = t ; // t corresponde ao tamanho da lista bloco->lista = (TLista*)malloc(sizeof(TLista)*t); //Aloca memória para a lista com o tamanho t for ( i =0; ilista[i])); //Cria a lista vazia . LInsere(&(bloco->lista[i]), i); }
}
Função FLVazia
A função recebe um ponteiro para TLista.[1] e aloca na memória. O ponteiro para a ultima posição passa a apontar para o da primeira posição e o da primeira passa a apontar para NULL, para indicar que não há nenhum elemento na lista.
//Inicializa uma lista vazia void FLVazia(TLista* pLista )
{
pLista->pPrimeiro = (Apontador) malloc ( sizeof (TipoCelula)) ; // Alocação na memória pLista->pUltimo = pLista->pPrimeiro ; //Faz o ultimo apontar o primeiro pLista->pPrimeiro->pProx = NULL; //Faz o ponteiro para o proximo apontar para NULL
}
Função MoveAacimaB
A função recebe um ponteiro para o tipo TBloco chamado bloco e dois inteiros (a e b). Comparamos se os blocos procurados não são os mesmos e chamamos a função ProcuraBloco que retorna para pA e pB os ponteiros referentes aos blocos que desejamos movimentar. Verificamos se os blocos não estão na mesma lista, e se estiverem não é feita modificação. Verifica se há algum bloco em cima do que vai ser movimentado, caso haja retornamos os blocos para suas posições originais e o próximo apontar para NULL. Manipulando os ponteiros colocamos o bloco A em cima do bloco B.
//Move o bloco a para cima do bloco