versão 07/12/11slide 1 ifto estrutura de dados aula 05 prof. manoel campos da silva filho...

51
Versão 07/12/11 Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. 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

Upload: internet

Post on 16-Apr-2015

108 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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

Page 2: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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.

Page 3: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 3

Iniciando

struct lista {

int dado;

struct lista *prox;

};

struct lista *l = NULL;

int quant = 0;

??

l

??

quant

Page 4: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 4

Inserindo 1o elemento na lista

struct lista *novo = NULL;??

novo

Page 5: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 5

Inserindo 1o elemento na lista

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

__ _

dado prox

Page 6: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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;

Page 7: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 7

Inserindo 1o elemento na lista

novo->prox = l;

Page 8: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 8

Inserindo 1o elemento na lista

l = novo;quant++;

Page 9: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 9

Inserindo 2o elemento na lista

struct lista *novo = NULL;

Page 10: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 10

Inserindo 2o elemento na lista

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

Page 11: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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;

Page 12: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 12

Inserindo 2o elemento na lista

novo->prox = l;

Page 13: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 13

Inserindo 2o elemento na lista

l = novo;quant++;

Page 14: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 14

Inserindo 3o elemento na lista

struct lista *novo = NULL;

Page 15: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 15

Inserindo 3o elemento na lista

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

Page 16: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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;

Page 17: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 17

Inserindo 3o elemento na lista

novo->prox = l;

Page 18: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 18

Inserindo 3o elemento na lista

l = novo;quant++;

Page 19: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 19

Inserindo 4o elemento na lista

struct lista *novo = NULL;

Page 20: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 20

Inserindo 4o elemento na lista

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

Page 21: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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;

Page 22: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 22

Inserindo 4o elemento na lista

novo->prox = l;

Page 23: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 23

Inserindo 4o elemento na lista

l = novo;quant++;

Page 24: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 24

Inserindo 5o elemento na lista

struct lista *novo = NULL;

Page 25: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 25

Inserindo 5o elemento na lista

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

Page 26: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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;

Page 27: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 27

Inserindo 5o elemento na lista

novo->prox = l;

Page 28: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 28

Inserindo 5o elemento na lista

l = novo;quant++;

Page 29: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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.

Page 30: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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

Page 31: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 31

Excluindo último elemento (5°)

if(pos == quant-1) {

excluir = l;

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

}

Page 32: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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......}

Page 33: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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......}

Page 34: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 34

Excluindo último elemento (5°)

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

Page 35: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 35

Excluindo 2° elemento

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

Page 36: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 36

Excluindo 2° elemento

struct lista *excluir = NULL;

Page 37: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 37

Excluindo 2° elemento

struct lista *tmp = l;

Page 38: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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...

}

Page 39: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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...

}

Page 40: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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...

}

Page 41: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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...

}

Page 42: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 43: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 43

Exibindo os elementos da lista

struct lista *tmp = l;

int i = quant-1;

Page 44: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 45: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 46: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 47: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 48: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 49: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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--;

}

Page 50: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

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”);

Page 51: Versão 07/12/11Slide 1 IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia

Versão 07/12/11 Slide 51

FIM