ATPS FINAL COM LISTAS SIMPLESMENTE ENCADEADAS
Por: robsonbraz • 5/5/2015 • Trabalho acadêmico • 1.449 Palavras (6 Páginas) • 444 Visualizações
[pic 1]
FACULDADE ANHANGUERA DE ANÁPOLIS
CIÊNCIA DA COMPUTAÇÃO
ATIVIDADES PRÁTICAS SUPERVISIONADAS
Estrutura de Dados
PROF. DA DISCIPLINA : Mário Sérgio Sabbag Cunha
DATA DA ENTREGA : 09 /06 /2011
Ciência da computação
ATIVIDADES PRÁTICAS SUPERVISIONADAS
Curso: CIÊNCIA DA COMPUTAÇÃO
DATA: 09 /06 /2011
MATÉRIA: ESTRUTURA DE DADOS
SERIÉ: 3ª PERÍODO
Prof: Mário Sérgio Sabbag Cunha
ALUNOS QUE EFETUARAM ESTA ATIVIDADE:
Robson Braz Viana * RA: 1018844729
Hugo Henrique Crisostomo RA: 1034974359
Samuel Alves Santiago RA: 1041973795
Jônatas Guilherme Rocha da Silva RA: 1013817473
2ª parte da ATPS de estrutura de dados I
Definimos uma estrutura de dados com alocação dinâmica de memória para o desafio proposto. Essa estrutura é composta por um vetor de listas encadeadas (na qual cada lista encadeada corresponde a uma pilha de blocos, sendo que cada célula dessa lista vai corresponder a um bloco). Por exemplo, as duas configurações mostradas logo abaixo e uma representação do desafio proposto pela atividade, será da seguinte forma.
Blocos não-movidos Blocos movidos
[pic 2][pic 3]
Abaixo o código-fonte do programa ‘MONDO DOS BLOCOS’
Com estrutura de listas simplesmente encadeadas
# include
# include
# include
// definição da estrutura utilizada no código
struct Blocos{
int elemento;
struct Blocos *next;
};
// criação do tipo de Célula correspondente
typedef struct Blocos vetorLista;
vetorLista *inserir(vetorLista *L[],int ind,int valor)
{
vetorLista *novo; /* ponteiro para a nova celula */
vetorLista *ant = *(L+ind); /* percorrer listas*/
// alocando memória dinamicamente
// e retornando uma Célula para o ponteiro 'novo'
novo = malloc( sizeof (vetorLista) );
novo->elemento = valor;
if(*(L+ind) != NULL)
{
// percorre ate uma celula ante do final
while(ant->next != NULL)
ant = ant->next;
novo->next = ant->next;
ant->next = novo;
return *(L+ind);
}else
novo->next = *(L+ind);
return novo;
}
// imprimir dados da lista
void imprimirLista(vetorLista *L[])
{
vetorLista *p;
int indice = 0;
clrscr();
printf(" MUNDO DOS BLOCOS\n");
printf("\n --------------------------------\n");
while(indice < 10)
{
printf(" %d: ",indice);
for(p = *(L+indice++); p != NULL ;p=p->next)
printf(" %d ",p->elemento);
if(indice < 10)
puts("\n |");
}
printf("\n --------------------------------\n");
}
vetorLista *moverListas(vetorLista *L[],int indOrigem,int indDestino)
{
//ponteiro para percorrer lista destino
vetorLista *dest = *(L+indDestino);
if(*(L+indDestino) != NULL)
{
// percorrer ate uma célula antes do final da lista de destino
while(dest->next != NULL)
dest = dest->next;
dest->next = *(L+indOrigem);
return *(L+indDestino);
}else
return *(L+indOrigem);
}
int convertInt()
...