53
Listas (Parte 2) Túlio Toffolo [email protected] www.toffolo.com.br BCC202 – Aula 10 Algoritmos e Estruturas de Dados I

Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Listas (Parte 2) Túlio Toffolo – [email protected] www.toffolo.com.br

BCC202 – Aula 10

Algoritmos e Estruturas de Dados I

Page 2: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

•  Características: •  Tamanho da lista não é pré-definido

•  Cada elemento guarda quem é o próximo

•  Elementos não estão contíguos na memória

Listas Encadeadas

prox

info

NULL

info

NULL

info

NULL

prox

prox

-

NULL

2

Page 3: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Sobre os Elementos da Lista

info

prox

•  Elemento: guarda as informações sobre cada elemento.

•  Para isso define-se cada elemento como uma estrutura que possui:

•  Campos de informações

•  Ponteiro para o próximo elemento

3

Page 4: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Sobre a Lista

•  Uma lista pode ter uma célula cabeça

•  Uma lista pode ter um apontador para o último elemento

info

proxprox

info

prox

info

NULL

Último

4

Page 5: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Cria Lista Vazia

NULL

Cabeça

Último

NULL

5

Page 6: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção de Elementos na Lista

•  3 opções de posição onde pode inserir:

•  1ª. Posição

•  Última posição

•  Após um elemento qualquer E

info

proxprox

info

prox

info

NULL

Último

6

Page 7: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção na Primeira Posição

info

proxprox

info

prox

info

NULL

Último

info

NULLprox

7

Page 8: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção na Última Posição

info

proxprox

info

prox

info

NULL

Último

info

NULL

8

prox

Page 9: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção Após o Elemento E

prox

info

prox

info

NULL

Último

info

NULLprox

Elem E

info

prox

9

Page 10: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada de Elementos na Lista

•  3 opções de posição onde pode retirar:

•  1ª. Posição

•  Última posição

•  Um elemento qualquer E

info

proxprox

info

prox

info

NULL

Último

10

Page 11: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada do Elemento da Primeira Posição

info

proxprox

info

prox

info

NULL

Último

11

Page 12: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada do Elemento E da Lista

info

proxprox

info

prox

info

NULL

Último

Elem E

Anterior

12

Page 13: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada do Último Elemento da Lista

info

proxprox

info

prox

info

NULL

Último

Anterior

NULL

13

Page 14: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Estrutura da Lista

typedef struct { int chave; /* outros componentes */} TItem;typedef struct celula { struct celula *pProx; TItem item; /* outros componentes */} TCelula;typedef struct { TCelula *pPrimeiro, *pUltimo;} TLista;

14

Page 15: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Funções Principais de Listas

/* Procedimentos e funções padrões da TAD */void TLista_Inicia(TLista *pLista);int TLista_EhVazia(TLista *pLista);int TLista_Insere(TLista *pLista, TItem x);int TLista_RetiraPrimeiro(TLista *pLista, TItem *pX);void TLista_Imprime(TLista *pLista);

15

Page 16: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (com cabeça)

/* Inicia as variáveis da lista */void TLista_Inicia(TLista *pLista) { pLista->pPrimeiro = (TCelula*) malloc(sizeof(TCelula)); pLista->pUltimo = pLista->pPrimeiro; pLista->pPrimeiro->pProx = NULL;}/* Retorna se a lista é vazia */int TLista_EhVazia(TLista *pLista) { return (pLista->pPrimeiro == pLista->pUltimo);}

16

Page 17: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (com cabeça)

/* Insere um item no final da lista */int TLista_Insere(TLista *pLista, TItem x) { pLista->pUltimo->pProx = (TCelula*) malloc(sizeof (TCelula)); pLista->pUltimo = pLista->pUltimo->pProx; pLista->pUltimo->Item = x; pLista->pUltimo->pProx = NULL;}

17

Page 18: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (com cabeça)

/* Retira o primeiro item da lista */int TLista_RetiraPrimeiro(TLista *pLista, TItem *pX) { if (TLista_EhVazia(pLista)) return 0; TCelula *pAux; pAux = pLista->pPrimeiro->pProx; *pX = pAux->item; pLista->pPrimeiro->pProx = pAux->pProx; free(pAux); return 1;}

18

Page 19: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (com cabeça)

/* Imprime os elementos da lista no terminal */void TLista_Imprime(TLista *pLista) { TCelula *pAux; pAux = pLista->pPrimeiro->pProx; while (pAux != NULL) { printf("%d\n", pAux->item.chave); pAux = pAux->pProx; /* próxima célula */ }}

19

Page 20: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Listas com e sem Cabeça

info

NULL

info

NULL

info

NULL

prox

proxNULL

20

Primeiro

prox

info

NULL

info

NULL

info

NULL

prox

prox

-

NULL

Page 21: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Sobre a Lista sem Cabeça

•  Uma lista tem o ponteiro para a primeiro elemento

•  Uma lista pode ter um apontador para o último elemento

info

prox

info

prox

info

NULL

Último

21

Primeiro

Page 22: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Cria Lista sem Cabeça Vazia

NULL

Primeiro

Último

NULL

22

Page 23: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção de Elementos na Lista sem Cabeça

•  3 opções de posição onde pode inserir:

•  1ª. Posição

•  Última posição

•  Após um elemento qualquer E

info

prox

info

prox

info

NULL

Último

23

Primeiro

Page 24: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção na Primeira Posição

info

prox

info

prox

info

NULL

Último

info

NULLprox

24

Primeiro

Page 25: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção na Última Posição

info

prox

info

prox

info

NULL

Último

info

NULL

25

prox

Primeiro

Page 26: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Inserção Após o Elemento E

info

prox

info

NULL

Último

info

NULLprox

Elem E

info

prox

26

Primeiro

Page 27: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada de Elementos na Lista

•  3 opções de posição onde pode retirar:

•  1ª. Posição

•  Última posição

•  Um elemento qualquer E

info

prox

info

prox

info

NULL

Último

27

Primeiro

Page 28: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada do Elemento da Primeira Posição

info

prox

info

prox

info

NULL

Último

28

Primeiro

Page 29: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada do Elemento E da Lista

info

prox

info

prox

info

NULL

Último

Elem E

Anterior

29

Primeiro

Page 30: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Retirada do Último Elemento da Lista

info

prox

info

prox

info

NULL

Último

Anterior

NULL

30

Primeiro

Page 31: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (sem cabeça)

/* Inicia as variáveis da lista */void TLista_Inicia(TLista *pLista) { pLista->pPrimeiro = NULL; pLista->pUltimo = NULL;}/* Retorna se a lista é vazia */int TLista_EhVazia(TLista *pLista) { return (pLista->pPrimeiro == NULL);}

31

Page 32: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (sem cabeça)

/* Insere um item no final da lista */int TLista_Insere(TLista *pLista, TItem x) { if (pLista->pPrimeiro == NULL) { pLista->pPrimeiro = (TCelula*) malloc(sizeof(TCelula)); pLista->pUltimo = pLista->pPrimeiro; } else { pLista->pUltimo->pProx = (TCelula*) malloc(sizeof(TCelula)); pLista->pUltimo = pLista->pUltimo->pProx; } pLista->pUltimo->Item = *pItem; pLista->pUltimo->pProx = NULL;}

32

Page 33: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (sem cabeça)

/* Retira o primeiro item da lista */int TLista_RetiraPrimeiro(TLista *pLista, TItem *pX) { if (TLista_EhVazia(pLista)) return 0; TCelula *pAux; pAux = pLista->pPrimeiro; *pX = pAux->Item; pLista->pPrimeiro = pLista->pPrimeiro->pProx; free(pAux); if (pLista->pPrimeiro == NULL) pLista->pUltimo = NULL; /* lista vazia */ return 1;}

33

Page 34: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Operações em Listas (sem cabeça)

/* Imprime os elementos da lista no terminal */void TLista_Imprime(TLista *pLista) { TCelula *pAux; pAux = pLista->pPrimeiro; while (pAux != NULL) { printf("%d\n", pAux->item.chave); pAux = pAux->pProx; /* próxima célula */ }}

34

Page 35: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Listas Encadeadas

•  Vantagens: •  Permite inserir ou retirar itens do meio da lista a um custo

constante (importante quando a lista tem de ser mantida em ordem).

•  Bom para aplicações em que não existe previsão sobre o crescimento da lista (o tamanho máximo da lista não precisa ser definido a priori).

•  Desvantagens:

•  Utilização de memória extra para armazenar os apontadores.

•  Percorrer a lista, procurando o i-ésimo elemento, tem custo O(n).

35

Page 36: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Perguntas?

36

Page 37: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Exercícios

•  Qual seria a vantagem de uma lista duplamente encadeada?

•  Escreva uma função que retorna o elemento na posição p de uma lista encadeada:

• 

int TLista_Elemento(TLista *pLista, int p, TItem *pX);

•  A função deve retornar 0 se não for possível retornar o elemento ou 1 caso contrário.

37

Page 38: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Perguntas?

38

Page 39: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Exemplo de Uso de Listas

•  Num vestibular, cada candidato tem direito a três opções para tentar uma vaga em um dos sete cursos oferecidos.

•  Para cada candidato é lido um registro:

•  Chave: número de inscrição do candidato.

•  NotaFinal: média das notas do candidato.

•  Opção: vetor contendo a primeira, a segunda e a terceira opções de curso do candidato.

39

Page 40: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Exemplo de Uso de Listas

•  Problema: distribuir os candidatos entre os cursos, segundo a nota final e as opções apresentadas por candidato.

•  Em caso de empate, os candidatos serão atendidos na ordem de inscrição para os exames.

40

Page 41: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Exemplo de Uso de Listas

Solução 01

•  Ordenar registros pelo campo NotaFinal, respeitando a ordem de inscrição;

•  Percorrer cada conjunto de registros com mesma NotaFinal, começando pelo conjunto de NotaFinal 10, seguido pelo de NotaFinal 9, e assim por diante.

•  Para um conjunto de mesma NotaFinal tenta-se encaixar cada registro desse conjunto em um dos cursos, na primeira das três opções em que houver vaga (se houver).

41

Page 42: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Exemplo de Uso de Listas

int main() { ordena os registros pelo campo NotaFinal; for Nota = 10 até 0 do while houver registro com mesma nota { if existe vaga em um dos cursos de opcao insere registro no conjunto de aprovados; else insere registro no conjunto de reprovados; } imprime aprovados por curso; imprime reprovados;}

42

Page 43: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Exemplo de Uso de Listas

•  Uma boa maneira de representar um conjunto de registros é com o uso de listas.

•  Ao serem lidos, os registros são armazenados em listas para cada nota.

•  Após a leitura do último registro os candidatos estão automaticamente ordenados por NotaFinal.

•  Dentro de cada lista, os registros estão ordenados por ordem de inscrição, desde que os registros sejam lidos na ordem de inscrição de cada candidato e inseridos nesta ordem.

43

Page 44: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Representação da Classificação dos Alunos

44

Page 45: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Vestibular – Classificação dos Alunos por Curso

•  As listas de registros são percorridas, iniciando-se pela de NotaFinal 10, seguida pela de NotaFinal 9, e assim sucessivamente.

•  Cada registro é retirado e colocado em uma das listas dos cursos, na primeira das três opções em que houver vaga.

•  Se não houver vaga, o registro é colocado no próximo curso ou em uma lista de reprovados.

•  Ao final a estrutura conterá a relação de candidatos aprovados em cada curso.

45

Page 46: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Vestibular – Classificação dos Alunos por Curso

46

Page 47: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Vestibular – Segundo Refinamento

int main() { lê número de vagas para cada curso; inicializa listas de aprovados e reprovados; lê registro; while Chave != 0 { insere registro nas listas, conforme nota; lê registro; }}

47

Page 48: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

for Nota = 10 até 0 do { while houver próximo registro com mesma NotaFinal { retira registro da lista; if existe vaga em um dos cursos de opção { insere registro na lista de aprovados; decrementa o número de vagas do curso; } else insere registro na lista de reprovados; obtém próximo registro; }}imprime aprovados por curso;imprime reprovados;

Vestibular – Segundo Refinamento

48

Page 49: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

#define NOPCOES 3#define NCURSOS 7typedef struct { int chave; char notaFinal; char opcao[NOPCOES];} TItem;typedef struct Celula { TItem Item; struct Celula *pProx;} TCelula;typedef struct { TCelula *pPrimeiro, *pUltimo;} TLista;

Vestibular – Estrutura Final da Lista em C

49

Page 50: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

/* função que lê os registros da entrada */void LeRegistro(TipoItem *registro) { /* os valores lidos estao separados por espaços */ int i, TEMP; scanf("%d %d", &(registro->chave), &TEMP); registro->NotaFinal = TEMP; for (i = 0; i < NOPCOES; i++) { scanf("%d", &TEMP); registro->opcao[i] = TEMP; } scanf(“%*[^\n]”); /* limpa buffer - fflush(stdin);*/ getchar();}

Vestibular – Estrutura Final da Lista em C

50

Page 51: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

/* função principal (main) do programa */int main(int argc, char *argv[]) { /* variáves utilizadas */ TItem registro; TLista classificacao[11]; TLista aprovados[NCURSOS]; TLista reprovados; int vagas[NCURSOS]; int passou; int i, nota; for (i = 1; i <= NCURSOS; i++) scanf("%ld", &vagas[i-1]); scanf("%*[^\n]"); /* limpa buffer – fflush(stdin); */ getchar();

Vestibular – Estrutura Final da Lista em C

51

Page 52: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

for (i = 0; i <= 10; i++) TLista_Inicia(&(classificacao[i])); for (i = 0; i < NCURSOS; i++) TLista_Inicia(&(aprovados[i])); TLista_Inicia(&reprovados); Leregistro(&registro); while (registro.chave != 0) { TLista_Insere(&classificacao[registro.notaFinal], &registro); Leregistro(&registro); }/* Exercício: * Implementar o resto na aula prática * e entregar até o final da aula de amanhã. */

Vestibular – Estrutura Final da Lista em C

52

Page 53: Listas (Parte 2) - Universidade Federal de Ouro Pretoparte_2).pdf · Listas Encadeadas prox info NULL info NULL info NULL prox prox - NULL 2 . Sobre os Elementos da Lista info

Vestibular – Refinamento Final

•  O exemplo mostra a importância de utilizar tipos abstratos de dados para escrever programas, em vez de utilizar detalhes particulares de implementação.

•  Altera-se a implementação rapidamente. Não é necessário procurar as referências diretas às estruturas de dados por todo o código.

•  Este aspecto é particularmente importante em programas de grande porte.

53