Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...
Transcript of Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...
![Page 1: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/1.jpg)
Listas Ligadas
Listas Ligadas
SCC0202 - Algoritmos e Estruturas de Dados I
Prof. Fernando V. Paulovich*Baseado no material do Prof. Gustavo Batista
http://www.icmc.usp.br/[email protected]
Instituto de Ciências Matemáticas e de Computação (ICMC)Universidade de São Paulo (USP)
4 de setembro de 2013
![Page 2: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/2.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 3: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/3.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 4: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/4.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Ponteiros podem ser usados para construir estruturas, taiscomo listas, a partir de componentes simples chamadosnó
![Page 5: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/5.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Um nó possui uma seta apontando para fora. Essa setarepresenta um ponteiro que aponta para outro nó,formando uma lista ligada
![Page 6: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/6.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Listas ligadas são úteis pois podem ser utilizadas paraimplementar o TAD lista. Nesse caso, as operaçõesinserção (ordenada) e remoção no meio da lista podemser mais eficientes
Uma segunda vantagem é o fato de não ser necessárioinformar o número de elementos em tempo de compilação
![Page 7: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/7.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Listas ligadas são úteis pois podem ser utilizadas paraimplementar o TAD lista. Nesse caso, as operaçõesinserção (ordenada) e remoção no meio da lista podemser mais eficientesUma segunda vantagem é o fato de não ser necessárioinformar o número de elementos em tempo de compilação
![Page 8: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/8.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de remoção pode ser feitada seguinte maneira
![Page 9: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/9.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de remoção pode ser feitada seguinte maneira
![Page 10: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/10.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de remoção pode ser feitada seguinte maneira
![Page 11: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/11.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de remoção pode ser feitada seguinte maneira
![Page 12: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/12.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de inserção pode ser feitada seguinte maneira
![Page 13: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/13.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de inserção pode ser feitada seguinte maneira
![Page 14: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/14.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de inserção pode ser feitada seguinte maneira
![Page 15: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/15.jpg)
Listas LigadasListas Ligadas - Discussão Intuitiva
Discussão Intuitiva
Por exemplo, uma operação de inserção pode ser feitada seguinte maneira
![Page 16: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/16.jpg)
Listas LigadasTAD Listas e Listas Ligadas
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 17: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/17.jpg)
Listas LigadasTAD Listas e Listas Ligadas
Relembrando: TAD Listas
Principais operaçõesCriar listaApagar listaInserir item (última posição)Remover item (dado uma chave)Recuperar item (dado uma chave)Contar número de itensVerificar se a lista está vaziaVerificar se a lista está cheiaImprimir lista
![Page 18: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/18.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Antes de começarmos, precisamos definir como a listaserá representada
Uma forma bastante comum é manter uma variávelponteiro para o primeiro elemento da lista ligada
![Page 19: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/19.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Antes de começarmos, precisamos definir como a listaserá representadaUma forma bastante comum é manter uma variávelponteiro para o primeiro elemento da lista ligada
![Page 20: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/20.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Antes de começarmos, precisamos definir como a listaserá representadaUma forma bastante comum é manter uma variávelponteiro para o primeiro elemento da lista ligada
![Page 21: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/21.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Antes de começarmos, precisamos definir como a listaserá representadaUma forma bastante comum é manter uma variávelponteiro para o primeiro elemento da lista ligada
![Page 22: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/22.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Convenciona-se que essa variável ponteiro deve ter valorNULL quando a lista estiver vazia
Portanto, essa deve ser a iniciação da lista e também aforma de se verificar se ela se encontra vazia
![Page 23: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/23.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Convenciona-se que essa variável ponteiro deve ter valorNULL quando a lista estiver vaziaPortanto, essa deve ser a iniciação da lista e também aforma de se verificar se ela se encontra vazia
![Page 24: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/24.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Outro detalhe importante é quanto as posições
Na implementação com vetores, uma posição é um valorinteiro entre 0 e o campo fimCom listas ligadas, uma posição passa ser um ponteiroque aponta um determinado nó da lista
Vamos analisar cada uma das operações do TAD Lista
![Page 25: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/25.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Outro detalhe importante é quanto as posiçõesNa implementação com vetores, uma posição é um valorinteiro entre 0 e o campo fim
Com listas ligadas, uma posição passa ser um ponteiroque aponta um determinado nó da lista
Vamos analisar cada uma das operações do TAD Lista
![Page 26: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/26.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Outro detalhe importante é quanto as posiçõesNa implementação com vetores, uma posição é um valorinteiro entre 0 e o campo fimCom listas ligadas, uma posição passa ser um ponteiroque aponta um determinado nó da lista
Vamos analisar cada uma das operações do TAD Lista
![Page 27: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/27.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas e Listas Ligadas
Outro detalhe importante é quanto as posiçõesNa implementação com vetores, uma posição é um valorinteiro entre 0 e o campo fimCom listas ligadas, uma posição passa ser um ponteiroque aponta um determinado nó da lista
Vamos analisar cada uma das operações do TAD Lista
![Page 28: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/28.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas I
Criar listaPré-condição: existir espaço na memóriaPós-condição: inicia a estrutura de dados
Limpar listaPré-condição: nenhumaPós-condição: remove a estrutura de dados da memória
![Page 29: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/29.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas II
Inserir itemPré-condição: existe memória disponívelPós-condição: insere um item na última posição, retornatrue se a operação foi executada com sucesso, false casocontrário
Remover item (dado uma chave)
Pré-condição: nenhumaPós-condição: remove um determinado item da lista dadouma chave, retorna true se a operação foi executada comsucesso, false caso contrário
![Page 30: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/30.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas III
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
Contar número de itensPré-condição: nenhumaPós-condição: retorna o número de itens na lista
![Page 31: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/31.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas IV
Verificar se a lista está vaziaPré-condição: nenhumaPós-condição: retorna true se a lista estiver vazia e falsecaso-contrário
Verificar se a lista está cheia (???)
Pré-condição: nenhumaPós-condição: retorna true se a lista estiver cheia e falsecaso-contrário
![Page 32: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/32.jpg)
Listas LigadasTAD Listas e Listas Ligadas
TAD Listas V
Imprimir listaPré-condição: nenhumaPós-condição: imprime na tela os itens da lista
![Page 33: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/33.jpg)
Listas LigadasListas Ligadas - Implementação
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 34: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/34.jpg)
Listas LigadasListas Ligadas - Implementação
Listas Ligadas
1 #ifndef LISTALIGADA_H2 #define LISTALIGADA_H34 #include "Item.h"56 typedef struct lista_ligada LISTA_LIGADA;78 LISTA_LIGADA *criar_lista();9 void apagar_lista(LISTA_LIGADA **lista);
1011 int inserir_item(LISTA_LIGADA *lista, ITEM *item);12 int remover_item(LISTA_LIGADA *lista, int chave);13 ITEM *recuperar_item(LISTA_LIGADA *lista, int chave);1415 int vazia(LISTA_LIGADA *lista);16 int cheia(LISTA_LIGADA *lista);17 int tamanho(LISTA_LIGADA *lista);18 void imprimir(LISTA_LIGADA *lista);1920 #endif
![Page 35: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/35.jpg)
Listas LigadasListas Ligadas - Implementação
Lista Ligada
Para se criar uma lista ligada, é necessário criar um nóque possua um ponteiro para outro nó
1 typedef struct NO {2 ITEM *item;3 struct NO *proximo;4 } NO;
![Page 36: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/36.jpg)
Listas LigadasListas Ligadas - Implementação
Lista Ligada
Para se criar uma lista ligada, é necessário criar um nóque possua um ponteiro para outro nó
1 typedef struct NO {2 ITEM *item;3 struct NO *proximo;4 } NO;
![Page 37: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/37.jpg)
Listas LigadasListas Ligadas - Implementação
Função para Apagar Nó
1 void apagar_no(NO *no) {2 apagar_item(&(no->item));3 free(no);4 }
![Page 38: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/38.jpg)
Listas LigadasListas Ligadas - Implementação
Lista Ligada
Considerando a estrutura NO, para a definição da listaligada o que falta é a indicação da posição de memória doprimeiro nó
Também incluiremos a posição para o último nó paraacelerar a inserção de itens no final da lista e uma variáveltamanho
1 struct lista_ligada {2 NO *inicio;3 NO *fim;4 int tamanho;5 };
![Page 39: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/39.jpg)
Listas LigadasListas Ligadas - Implementação
Lista Ligada
Considerando a estrutura NO, para a definição da listaligada o que falta é a indicação da posição de memória doprimeiro nóTambém incluiremos a posição para o último nó paraacelerar a inserção de itens no final da lista e uma variáveltamanho
1 struct lista_ligada {2 NO *inicio;3 NO *fim;4 int tamanho;5 };
![Page 40: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/40.jpg)
Listas LigadasListas Ligadas - Implementação
Lista Ligada
Considerando a estrutura NO, para a definição da listaligada o que falta é a indicação da posição de memória doprimeiro nóTambém incluiremos a posição para o último nó paraacelerar a inserção de itens no final da lista e uma variáveltamanho
1 struct lista_ligada {2 NO *inicio;3 NO *fim;4 int tamanho;5 };
![Page 41: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/41.jpg)
Listas LigadasListas Ligadas - Implementação
Lista Ligada
Considerando a estrutura NO, para a definição da listaligada o que falta é a indicação da posição de memória doprimeiro nóTambém incluiremos a posição para o último nó paraacelerar a inserção de itens no final da lista e uma variáveltamanho
1 struct lista_ligada {2 NO *inicio;3 NO *fim;4 int tamanho;5 };
![Page 42: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/42.jpg)
Listas LigadasListas Ligadas - Implementação
Criar lista
Pré-condição: nenhumaPós-condição: inicia a estrutura de dados
![Page 43: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/43.jpg)
Listas LigadasListas Ligadas - Implementação
Criar lista
1 LISTA_LIGADA *criar_lista() {2 LISTA_LIGADA *lista = (LISTA_LIGADA *)malloc(sizeof(←↩
LISTA_LIGADA));3
4 if(lista != NULL) {5 lista->inicio = NULL;6 lista->fim = NULL;7 lista->tamanho = 0;8 }9
10 return lista;11 }
![Page 44: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/44.jpg)
Listas LigadasListas Ligadas - Implementação
Inserir item (última posição)
Pré-condição: existe memória disponívelPós-condição: insere um item na última posição,retorna true se a operação foi executada com sucesso,false caso contrário
![Page 45: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/45.jpg)
Listas LigadasListas Ligadas - Implementação
Memória Disponível
Diferente da implementação com vetores, a lista ligadanão requer especificar um tamanho para a estrutura
Entretanto, a memória heap não é ilimitada e é sempreimportante verificar se existe memória disponível aochamar malloc()Em C, o procedimento malloc() atribui o valor NULL àvariável ponteiro quando não existe memória disponível
![Page 46: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/46.jpg)
Listas LigadasListas Ligadas - Implementação
Memória Disponível
Diferente da implementação com vetores, a lista ligadanão requer especificar um tamanho para a estruturaEntretanto, a memória heap não é ilimitada e é sempreimportante verificar se existe memória disponível aochamar malloc()
Em C, o procedimento malloc() atribui o valor NULL àvariável ponteiro quando não existe memória disponível
![Page 47: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/47.jpg)
Listas LigadasListas Ligadas - Implementação
Memória Disponível
Diferente da implementação com vetores, a lista ligadanão requer especificar um tamanho para a estruturaEntretanto, a memória heap não é ilimitada e é sempreimportante verificar se existe memória disponível aochamar malloc()Em C, o procedimento malloc() atribui o valor NULL àvariável ponteiro quando não existe memória disponível
![Page 48: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/48.jpg)
Listas LigadasListas Ligadas - Implementação
Inserir item (última posição)
1 int inserir_item(LISTA_LIGADA *lista, ITEM *item) {2 NO *pnovo = (NO *) malloc(sizeof (NO));34 if (pnovo != NULL) {5 pnovo->item = item;6 pnovo->proximo = NULL;78 if (lista->inicio == NULL) {9 lista->inicio = pnovo;
10 } else {11 lista->fim->proximo = pnovo;12 }1314 lista->fim = pnovo;15 lista->tamanho++;16 return 1;17 } else {18 return 0;19 }20 }
![Page 49: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/49.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 50: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/50.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 51: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/51.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 52: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/52.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 53: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/53.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 54: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/54.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 55: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/55.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
Pré-condição: nenhumaPós-condição: recupera o item dado uma chave, retornatrue se a operação foi executada com sucesso, false casocontrário
![Page 56: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/56.jpg)
Listas LigadasListas Ligadas - Implementação
Recuperar item (dado uma chave)
1 ITEM *recuperar_item(LISTA_LIGADA *lista, int chave) {2 NO *paux = lista->inicio;34 while (paux != NULL) {5 if (paux->item->chave == chave) {6 return paux->item;7 }8 paux = paux->proximo;9 }
1011 return NULL;12 }
![Page 57: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/57.jpg)
Listas LigadasListas Ligadas - Implementação
Verificar se a lista está vazia
Pré-condição: nenhumaPós-condição: retorna true se a lista estiver vazia efalse caso-contrário
1 int vazia(LISTA_LIGADA *lista) {2 return (lista->inicio == NULL);3 }
![Page 58: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/58.jpg)
Listas LigadasListas Ligadas - Implementação
Remover item (dado uma chave)
Pré-condição: a lista não está vaziaPós-condição: remove um determinado item da listadado uma chave, retorna true se a operação foiexecutada com sucesso, false caso contrário
![Page 59: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/59.jpg)
Listas LigadasListas Ligadas - Implementação
Remover item (dado uma chave)
1 int remover_item(LISTA_LIGADA *lista, int chave) {2 NO *prem = lista->inicio;3 NO *pant = NULL;45 while(prem != NULL && prem->item->chave != chave) {6 pant = prem;7 prem = prem->proximo;8 }9
10 if(prem != NULL) {11 if(prem == lista->inicio) {12 lista->inicio = prem->proximo;13 } else {14 pant->proximo = prem->proximo;15 }1617 if(prem == lista->fim) {18 lista->fim = pant;19 }2021 lista->tamanho--;22 apagar_no(prem);23 return 1;24 }25 return 0;26 }
![Page 60: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/60.jpg)
Listas LigadasListas Ligadas - Implementação
Exercício
Implementar as demais operações do TAD ListasApagar listaInserir item (por posição)Remover item (por posição)Recuperar item (por posição)Contar número de itensImprimir lista
![Page 61: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/61.jpg)
Listas LigadasListas Ligadas - Implementação
Exercício
ExercíciosCrie funções que implementem as seguintes operações:
Verificar se a lista L está ordenada (crescente oudecrescente)Fazer uma cópia da Lista L1 em outra L2Fazer uma cópia da Lista L1 em L2, eliminando repetidosInverter L1, colocando o resultado em L2Inverter a própria L1Intercalar L1 com L2, gerando L3 ordenada (considereL1 e L2 ordenadas)Eliminar de L1 todas as ocorrências de um dado item (L1está ordenada)
![Page 62: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/62.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 63: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/63.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Introdução
Das operações anteriores, a mais complexa é aremoção de um elemento dado uma chave
Isso porque o algoritmo precisa apontar para o itemanterior ao que será removido, o que no caso daremoção do primeiro elemento se configura umaexceção que precisa ser tratada a parteUma solução que simplifica a implementação é substituiro ponteiro para início por um nó cabeçaUm nó cabeça é um nó normal da lista, mas esse ésempre o primeiro nó e a informação armazenadanão tem valor
![Page 64: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/64.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Introdução
Das operações anteriores, a mais complexa é aremoção de um elemento dado uma chaveIsso porque o algoritmo precisa apontar para o itemanterior ao que será removido, o que no caso daremoção do primeiro elemento se configura umaexceção que precisa ser tratada a parte
Uma solução que simplifica a implementação é substituiro ponteiro para início por um nó cabeçaUm nó cabeça é um nó normal da lista, mas esse ésempre o primeiro nó e a informação armazenadanão tem valor
![Page 65: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/65.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Introdução
Das operações anteriores, a mais complexa é aremoção de um elemento dado uma chaveIsso porque o algoritmo precisa apontar para o itemanterior ao que será removido, o que no caso daremoção do primeiro elemento se configura umaexceção que precisa ser tratada a parteUma solução que simplifica a implementação é substituiro ponteiro para início por um nó cabeça
Um nó cabeça é um nó normal da lista, mas esse ésempre o primeiro nó e a informação armazenadanão tem valor
![Page 66: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/66.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Introdução
Das operações anteriores, a mais complexa é aremoção de um elemento dado uma chaveIsso porque o algoritmo precisa apontar para o itemanterior ao que será removido, o que no caso daremoção do primeiro elemento se configura umaexceção que precisa ser tratada a parteUma solução que simplifica a implementação é substituiro ponteiro para início por um nó cabeçaUm nó cabeça é um nó normal da lista, mas esse ésempre o primeiro nó e a informação armazenadanão tem valor
![Page 67: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/67.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Nó Cabeça e Lista Vazia
A lista com nó cabeça será vazia quando o próximo donó cabeça apontar para NULL
1 typedef struct lista_ligada LISTA_LIGADA;2
3 struct lista_ligada {4 NO *cabeca;5 NO *fim;6 int tamanho;7 };8
9 int vazia(LISTA_LIGADA *lista) {10 return (lista->cabeca->proximo == NULL);11 }
![Page 68: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/68.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Implementação das Demais Operações
A implementação das demais operações é similar a listaligada padrão (sem nó cabeça), a única alteração ésubstituir as referências ao ponteiro início pelo próximodo nó cabeça
O grande ganho é na remoção dado uma chave, já quenão é necessário tratar separadamente quando o item a seremover é o primeiro
![Page 69: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/69.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Implementação das Demais Operações
A implementação das demais operações é similar a listaligada padrão (sem nó cabeça), a única alteração ésubstituir as referências ao ponteiro início pelo próximodo nó cabeçaO grande ganho é na remoção dado uma chave, já quenão é necessário tratar separadamente quando o item a seremover é o primeiro
![Page 70: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/70.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Remover item (dado uma chave)
1 int remover_item(LISTA_LIGADA *lista, int chave) {2 if (!vazia(lista)) {3 NO *paux = lista->cabeca;45 while (paux->proximo != NULL &&6 paux->proximo->item->chave != chave) {7 paux = paux->proximo;8 }9
10 if (paux->proximo != NULL) {11 NO *prem = paux->proximo;12 paux->proximo = prem->proximo;1314 if (prem == lista->fim) {15 lista->fim = paux;16 }1718 apagar_no(prem);19 lista->tamanho--;20 return 1;21 }22 }23 return 0;24 }
![Page 71: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/71.jpg)
Listas LigadasListas Ligadas com Nó Cabeça
Exercício
Implementar as demais operações do TAD listas usando oconceito de lista ligada com nó cabeça
![Page 72: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/72.jpg)
Listas LigadasListas Ligadas Circulares
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 73: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/73.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares
Um diferente tipo de implementação de listas ligadassubstitui a definição de que o próximo do último é NULLpor a próximo do último ser o primeiro
![Page 74: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/74.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares
Um diferente tipo de implementação de listas ligadassubstitui a definição de que o próximo do último é NULLpor a próximo do último ser o primeiro
![Page 75: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/75.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares
A partir de um nó da lista pode-se chegar a qualqueroutro nó
Nessa implementação somente um ponteiro para o fim dalista é necessário, não sendo necessário um ponteiro parao início. Isso porque o início é o próximo do fim
![Page 76: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/76.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares
A partir de um nó da lista pode-se chegar a qualqueroutro nóNessa implementação somente um ponteiro para o fim dalista é necessário, não sendo necessário um ponteiro parao início. Isso porque o início é o próximo do fim
![Page 77: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/77.jpg)
Listas LigadasListas Ligadas Circulares
Exercício I
O problema de JosefoUm pequeno exército se viu rodeado certa vez por um exércitomais forte que ele. A única chance para não serem esmagadosseria que alguém fosse buscar reforço montado no único cavaloda tropa. Para decidir quem seria o sortudo a ir buscar ajuda,decidiu-se colocar todos os soldados em um círculo,sorteando-se então um nome de um soldado e um número M.A partir do soldado sorteado, o M-ésimo soldado no sentidohorário seria retirado da roda tendo que ficar no campo debatalha. Procedendo-se desta forma, o último soldado querestasse no círculo seria aquele que iria buscar ajuda.
![Page 78: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/78.jpg)
Listas LigadasListas Ligadas Circulares
Exercício II
ExercícioImplemente um procedimento que resolva o problema deJosefo. Esse procedimento deve receber como entradauma lista e o número M e retornar o item encontrado.
1 ITEM *josefo(LISTA_LIGADA_CIRCULAR *lista, int M) {2 ...3 }
![Page 79: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/79.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares (Sentinela)
No caso especial da busca em listas circulares, o empregode um nó cabeça pode reduzir a quantidade de testesnecessários
A ideia é colocar a chave de busca no nó cabeça ecomeçar a busca no próximo nóSe o item encontrado for a cabeça, a busca não tevesucesso. Assim um teste é “economizado” já que não épreciso testar se a lista acabouNesse caso, o nó cabeça é chamado de sentinela
![Page 80: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/80.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares (Sentinela)
No caso especial da busca em listas circulares, o empregode um nó cabeça pode reduzir a quantidade de testesnecessáriosA ideia é colocar a chave de busca no nó cabeça ecomeçar a busca no próximo nó
Se o item encontrado for a cabeça, a busca não tevesucesso. Assim um teste é “economizado” já que não épreciso testar se a lista acabouNesse caso, o nó cabeça é chamado de sentinela
![Page 81: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/81.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares (Sentinela)
No caso especial da busca em listas circulares, o empregode um nó cabeça pode reduzir a quantidade de testesnecessáriosA ideia é colocar a chave de busca no nó cabeça ecomeçar a busca no próximo nóSe o item encontrado for a cabeça, a busca não tevesucesso. Assim um teste é “economizado” já que não épreciso testar se a lista acabou
Nesse caso, o nó cabeça é chamado de sentinela
![Page 82: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/82.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares (Sentinela)
No caso especial da busca em listas circulares, o empregode um nó cabeça pode reduzir a quantidade de testesnecessáriosA ideia é colocar a chave de busca no nó cabeça ecomeçar a busca no próximo nóSe o item encontrado for a cabeça, a busca não tevesucesso. Assim um teste é “economizado” já que não épreciso testar se a lista acabouNesse caso, o nó cabeça é chamado de sentinela
![Page 83: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/83.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares (Sentinela)
No caso especial da busca em listas circulares, o empregode um nó cabeça pode reduzir a quantidade de testesnecessáriosA ideia é colocar a chave de busca no nó cabeça ecomeçar a busca no próximo nóSe o item encontrado for a cabeça, a busca não tevesucesso. Assim um teste é “economizado” já que não épreciso testar se a lista acabouNesse caso, o nó cabeça é chamado de sentinela
![Page 84: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/84.jpg)
Listas LigadasListas Ligadas Circulares
Listas Ligadas Circulares (Sentinela)
1 typedef struct lista_ligada LISTA_LIGADA;23 struct lista_ligada {4 NO *sentinela;5 NO *fim;6 int tamanho;7 };89
10 ITEM *recuperar_item(LISTA_LIGADA *lista, int chave) {11 lista->sentinela->item->chave = chave;12 NO *paux = lista->sentinela;1314 do {15 paux = paux->proximo;16 } while (paux->item->chave != chave);1718 return (paux != lista->sentinela) ? paux->item : NULL;19 }
![Page 85: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/85.jpg)
Listas LigadasListas Ligadas Ordenadas
Sumário
1 Listas Ligadas - Discussão Intuitiva
2 TAD Listas e Listas Ligadas
3 Listas Ligadas - Implementação
4 Listas Ligadas com Nó Cabeça
5 Listas Ligadas Circulares
6 Listas Ligadas Ordenadas
![Page 86: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/86.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 3
![Page 87: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/87.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 7
![Page 88: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/88.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 7
![Page 89: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/89.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 5
![Page 90: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/90.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 5inicio.chave menor que novo.chave
![Page 91: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/91.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 5p->proximo.chave maior que novo.chave
![Page 92: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/92.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 5
![Page 93: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/93.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 5
![Page 94: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/94.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 6inicio.chave menor que novo.chave
![Page 95: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/95.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 6p->proximo.chave menor que novo.chave
![Page 96: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/96.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 6p->proximo.chave maior que novo.chave
![Page 97: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/97.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 6p->proximo.chave maior que novo.chave
![Page 98: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/98.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 6
![Page 99: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/99.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 6
![Page 100: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/100.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8inicio.chave menor que novo.chave
![Page 101: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/101.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8p->proximo.chave menor que novo.chave
![Page 102: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/102.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8p->proximo.chave menor que novo.chave
![Page 103: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/103.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8p->proximo.chave menor que novo.chave
![Page 104: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/104.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8P->proximo não existe
![Page 105: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/105.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8P->proximo não existe
![Page 106: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/106.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Lista Ligada
Inserindo valor 8P->proximo não existe
![Page 107: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/107.jpg)
Listas LigadasListas Ligadas Ordenadas
Comentários sobre a Implementação
Não precisa do ponteiro fim porque a inserção será emqualquer posição de lista
Novamente o emprego do nó cabeça facilita aimplementação uma vez que vamos buscar a posiçãoanterior da de inserção, e no caso de ser o menor item dalista isso não representará exceção
![Page 108: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/108.jpg)
Listas LigadasListas Ligadas Ordenadas
Comentários sobre a Implementação
Não precisa do ponteiro fim porque a inserção será emqualquer posição de listaNovamente o emprego do nó cabeça facilita aimplementação uma vez que vamos buscar a posiçãoanterior da de inserção, e no caso de ser o menor item dalista isso não representará exceção
![Page 109: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/109.jpg)
Listas LigadasListas Ligadas Ordenadas
Inserção Ordenada - Implementação
1 int inserir_item(LISTA_LIGADA *lista, ITEM *item) {2 NO *pnovo = (NO *) malloc(sizeof (NO));34 if (pnovo != NULL) {5 pnovo->item = item;6 pnovo->proximo = NULL;78 NO *paux = lista->cabeca;9
10 while ((paux->proximo != NULL) &&11 (paux->proximo->item->chave < item->chave)) {12 paux = paux->proximo;13 }1415 pnovo->proximo = paux->proximo;16 paux->proximo = pnovo;17 lista->tamanho++;1819 return 1;20 } else {21 return 0;22 }23 }
![Page 110: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/110.jpg)
Listas LigadasListas Ligadas Ordenadas
Busca em Lista Ordenada
Lembrete: é possível tirar vantagem em uma busca se alista é ordenada
1 ITEM *recuperar_item(LISTA_LIGADA *lista, int chave) {2 if (!vazia(lista)) {3 NO *paux = lista->cabeca->proximo;45 while (paux != NULL) {6 if (paux->item->chave == chave) {7 return paux->item;8 } else if (paux->item->chave > chave) {9 return 0;
10 }11 paux = paux->proximo;12 }13 }14 return NULL;15 }
![Page 111: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/111.jpg)
Listas LigadasListas Ligadas Ordenadas
Lista Ordenada - Outras Operações
As demais operações implementadas podem deixar a listadesordenada?
Poderia ocorrer com a remoção de elementos, entretanto
Com vetores, a implementação deslocava os elementosCom listas ligadas, os nós removidos não alteram aordem dos demais
![Page 112: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/112.jpg)
Listas LigadasListas Ligadas Ordenadas
Lista Ordenada - Outras Operações
As demais operações implementadas podem deixar a listadesordenada?Poderia ocorrer com a remoção de elementos, entretanto
Com vetores, a implementação deslocava os elementosCom listas ligadas, os nós removidos não alteram aordem dos demais
![Page 113: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/113.jpg)
Listas LigadasListas Ligadas Ordenadas
Lista Ordenada - Outras Operações
As demais operações implementadas podem deixar a listadesordenada?Poderia ocorrer com a remoção de elementos, entretanto
Com vetores, a implementação deslocava os elementos
Com listas ligadas, os nós removidos não alteram aordem dos demais
![Page 114: Listas Ligadas - 0.5cmSCC0202 - Algoritmos e Estruturas de ...](https://reader036.fdocument.pub/reader036/viewer/2022071321/62cdc51c89e2cf0c59684f2d/html5/thumbnails/114.jpg)
Listas LigadasListas Ligadas Ordenadas
Lista Ordenada - Outras Operações
As demais operações implementadas podem deixar a listadesordenada?Poderia ocorrer com a remoção de elementos, entretanto
Com vetores, a implementação deslocava os elementosCom listas ligadas, os nós removidos não alteram aordem dos demais