Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho...

Post on 16-Apr-2015

108 views 3 download

Transcript of Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho...

Versão 07/12/11 Slide 1

IFTO

ESTRUTURA DE DADOS AULA 05Prof. Manoel Campos da Silva Filho

Tecnólogo em Processamento de Dados / Unitins

Mestre em Engenharia Elétrica / UnB

http://lab.ifto.edu.br/~mcampos

http://manoelcampos.com

mcampos at ifto.edu.br

Versão 07/12/11 Slide 2

Trabalho

O algoritmo apresentado nos slides seguintes implementa uma lista encadeada, onde cada elemento será inserido no final da lista (por questões de simplificação, por enquanto). Assim, a variável l será um ponteiro para o último elemento da lista.

Com isto, em cada um dos slides seguintes, faça uma figura para representar a situação da lista encadeada após a execução das instruções apresentadas.

Cada variável existente no slide deve ser representada graficamente. Todos os slides contendo código devem possuir imagens para representar as variáveis utilizadas, principalmente variáveis do tipo “struct lista” e “struct lista *”

Para cada linha de código deve ser incluído um comentário, explicando o que ocorre na execução da mesma. Nenhuma linha pode ficar sem ser comentada. Os comentários devem informar o que a instrução faz e o porquê a mesma está sendo utilizada (por exemplo, indicando o porquê de determinado valor estar sendo utilizado na instrução.

Nos slides que tiverem instruções em negrito, o aluno deverá considerar apenas tais linhas para criar os desenhos que representam as variáveis daquele trecho de código.

O trabalho deve ser resolvido em duplas e ao final, postado pelo Moodle. Os dois integrantes do grupo devem enviar o arquivo. Os alunos tem até o final das 4 aulas para fazer o trabalho.

Versão 07/12/11 Slide 3

Iniciando

struct lista {

int dado;

struct lista *prox;

};

struct lista *l = NULL;

int quant = 0;

??

l

??

quant

Versão 07/12/11 Slide 4

Inserindo 1o elemento na lista

struct lista *novo = NULL;??

novo

Versão 07/12/11 Slide 5

Inserindo 1o elemento na lista

novo = (struct lista *)malloc(sizeof(struct lista));

__ _

dado prox

Versão 07/12/11 Slide 6

Inserindo 1o elemento na lista

int dado;printf(“Digite o dado a ser inserido: ”);scanf(“%d”, &dado);novo->dado = dado;

Versão 07/12/11 Slide 7

Inserindo 1o elemento na lista

novo->prox = l;

Versão 07/12/11 Slide 8

Inserindo 1o elemento na lista

l = novo;quant++;

Versão 07/12/11 Slide 9

Inserindo 2o elemento na lista

struct lista *novo = NULL;

Versão 07/12/11 Slide 10

Inserindo 2o elemento na lista

novo = (struct lista *)malloc(sizeof(struct lista));

Versão 07/12/11 Slide 11

Inserindo 2o elemento na lista

int dado;printf(“Digite o dado a ser inserido: ”);scanf(“%d”, &dado);novo->dado = dado;

Versão 07/12/11 Slide 12

Inserindo 2o elemento na lista

novo->prox = l;

Versão 07/12/11 Slide 13

Inserindo 2o elemento na lista

l = novo;quant++;

Versão 07/12/11 Slide 14

Inserindo 3o elemento na lista

struct lista *novo = NULL;

Versão 07/12/11 Slide 15

Inserindo 3o elemento na lista

novo = (struct lista *)malloc(sizeof(struct lista));

Versão 07/12/11 Slide 16

Inserindo 3o elemento na lista

int dado;printf(“Digite o dado a ser inserido: ”);scanf(“%d”, &dado);novo->dado = dado;

Versão 07/12/11 Slide 17

Inserindo 3o elemento na lista

novo->prox = l;

Versão 07/12/11 Slide 18

Inserindo 3o elemento na lista

l = novo;quant++;

Versão 07/12/11 Slide 19

Inserindo 4o elemento na lista

struct lista *novo = NULL;

Versão 07/12/11 Slide 20

Inserindo 4o elemento na lista

novo = (struct lista *)malloc(sizeof(struct lista));

Versão 07/12/11 Slide 21

Inserindo 4o elemento na lista

int dado;printf(“Digite o dado a ser inserido: ”);scanf(“%d”, &dado);novo->dado = dado;

Versão 07/12/11 Slide 22

Inserindo 4o elemento na lista

novo->prox = l;

Versão 07/12/11 Slide 23

Inserindo 4o elemento na lista

l = novo;quant++;

Versão 07/12/11 Slide 24

Inserindo 5o elemento na lista

struct lista *novo = NULL;

Versão 07/12/11 Slide 25

Inserindo 5o elemento na lista

novo = (struct lista *)malloc(sizeof(struct lista));

Versão 07/12/11 Slide 26

Inserindo 5o elemento na lista

int dado;printf(“Digite o dado a ser inserido: ”);scanf(“%d”, &dado);novo->dado = dado;

Versão 07/12/11 Slide 27

Inserindo 5o elemento na lista

novo->prox = l;

Versão 07/12/11 Slide 28

Inserindo 5o elemento na lista

l = novo;quant++;

Versão 07/12/11 Slide 29

Excluindo elemento

Apesar de em uma lista encadeada não haver um índice para poder acessar as posições, o algoritmo implementado considera que o primeiro elemento é o da posição 0, o segundo da posição 1, e assim por diante.

A variável pos indicará a posição a ser excluída.

Versão 07/12/11 Slide 30

Excluindo último elemento (5°)

int pos = 4;struct lista *excluir = NULL;

//Informe o valor da variável quant //neste momento, colocando o valor//dentro do quadrado acima

Versão 07/12/11 Slide 31

Excluindo último elemento (5°)

if(pos == quant-1) {

excluir = l;

//continua no próximo slide......

}

Versão 07/12/11 Slide 32

Excluindo último elemento (5°)

if(pos == quant-1) { excluir = l; l = l->prox; //continua no próximo slide......}

Versão 07/12/11 Slide 33

Excluindo último elemento (5°)

if(pos == quant-1) { excluir = l; l = l->prox; free(excluir) //continua no próximo slide......}

Versão 07/12/11 Slide 34

Excluindo último elemento (5°)

if(pos == quant-1) { excluir = l; l = l->prox; free(excluir); quant--;}

Versão 07/12/11 Slide 35

Excluindo 2° elemento

int pos = 1;int i = quant-1;

Versão 07/12/11 Slide 36

Excluindo 2° elemento

struct lista *excluir = NULL;

Versão 07/12/11 Slide 37

Excluindo 2° elemento

struct lista *tmp = l;

Versão 07/12/11 Slide 38

Excluindo 2° elemento

if(pos == quant-1) { //........................

} else { //Mostrar as variáveis, graficamente, quando o valor de i for igual a 3

while(i > pos+1) {

tmp = tmp->prox; //continua no próximo slide

} //continua no próximo slide...

}

Versão 07/12/11 Slide 39

Excluindo 2° elemento

if(pos == quant-1) { //........................

} else { //Mostrar as variáveis, graficamente, quando o valor de i for igual a 3

while(i > pos+1) {

tmp = tmp->prox;

i--;

} //continua no próximo slide...

}

Versão 07/12/11 Slide 40

Excluindo 2° elemento

if(pos == quant-1) { //........................

} else { //Mostrar as variáveis, graficamente, quando o valor de i for igual a 2

while(i > pos+1) { tmp = tmp->prox; i--; } excluir = tmp->prox; //continua no próximo slide...

}

Versão 07/12/11 Slide 41

Excluindo 2° elemento

if(pos == quant-1) { //........................

} else { while(i > pos+1) {

tmp = tmp->prox;

i--;

}

excluir = tmp->prox;

tmp->prox = excluir->prox; //continua no próximo slide...

}

Versão 07/12/11 Slide 42

Excluindo 2° elementoif(pos == quant-1) {

//........................

} else { while(i > pos+1) {

tmp = tmp->prox;

i--;

}

excluir = tmp->prox;

tmp->prox = excluir->prox;

free(excluir);quant--;

}

Versão 07/12/11 Slide 43

Exibindo os elementos da lista

struct lista *tmp = l;

int i = quant-1;

Versão 07/12/11 Slide 44

Exibindo os elementos da lista

while(tmp != NULL) { //Mostrar variáveis graficamente quando i for 2

printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

Versão 07/12/11 Slide 45

Exibindo os elementos da lista

while(tmp != NULL) { //Mostrar variáveis graficamente quando i for 2

printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

Versão 07/12/11 Slide 46

Exibindo os elementos da lista

while(tmp != NULL) { //Mostrar variáveis graficamente quando i for 1

printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

Versão 07/12/11 Slide 47

Exibindo os elementos da lista

while(tmp != NULL) { //Mostrar variáveis graficamente quando i for 1

printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

Versão 07/12/11 Slide 48

Exibindo os elementos da lista

while(tmp != NULL) { //Mostrar variáveis graficamente quando i for 0

printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

Versão 07/12/11 Slide 49

Exibindo os elementos da lista

while(tmp != NULL) { //Mostrar variáveis graficamente quando i for 0

printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

Versão 07/12/11 Slide 50

Exibindo os elementos da lista

while(tmp != NULL) { printf("%d)\t%d\n", i, tmp->dado);

tmp=tmp->prox;

i--;

}

printf(“\n----------------------------------------\n”);

Versão 07/12/11 Slide 51

FIM