versão 07/12/11slide 1 ifto estrutura de dados aula 05 prof. manoel campos da silva filho...
TRANSCRIPT
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