Herança Ligada ao Sexo - Doenças Jacqueline Farinha Shimizu.
AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça...
Transcript of AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça...
![Page 1: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/1.jpg)
AULA 07ESTRUTURA DE DADOS
Lista ligada circular com nó cabeça
Norton T. Roman & Luciano A. Digiampietri
![Page 2: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/2.jpg)
Lista ligadaNa última aula aprendemos como modelar egerenciar listas ligadas utilizando o que chamamosde implementação dinâmica.
- Vantagens: não precisamos gastar memória que nãoestamos usando e não precisamos gerenciar uma lista deelementos disponíveis.- Hoje adicionaremos duas características a esta estrutura:ela será circular (o último elemento apontará para oprimeiro) e possuirá um nó cabeça (um elemento inicial quesempre encabeçará a lista).
![Page 3: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/3.jpg)
Lista ligadaNa última aula aprendemos como modelar egerenciar listas ligadas utilizando o que chamamosde implementação dinâmica.
- Vantagens: não precisamos gastar memória que nãoestamos usando e não precisamos gerenciar uma lista deelementos disponíveis.
- Hoje adicionaremos duas características a esta estrutura:ela será circular (o último elemento apontará para oprimeiro) e possuirá um nó cabeça (um elemento inicial quesempre encabeçará a lista).
![Page 4: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/4.jpg)
Lista ligadaNa última aula aprendemos como modelar egerenciar listas ligadas utilizando o que chamamosde implementação dinâmica.
- Vantagens: não precisamos gastar memória que nãoestamos usando e não precisamos gerenciar uma lista deelementos disponíveis.- Hoje adicionaremos duas características a esta estrutura:ela será circular (o último elemento apontará para oprimeiro) e possuirá um nó cabeça (um elemento inicial quesempre encabeçará a lista).
![Page 5: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/5.jpg)
Lista ligada circular com nó cabeça
Temos um ponteiro para o nó cabeça
Cada elemento indica seu sucessor e o último aponta para ocabeça
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 6: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/6.jpg)
Lista ligada circular com nó cabeça
Temos um ponteiro para o nó cabeça
Cada elemento indica seu sucessor e o último aponta para ocabeça
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 7: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/7.jpg)
Lista ligada circular com nó cabeça
Temos um ponteiro para o nó cabeça
Cada elemento indica seu sucessor e o último aponta para ocabeça
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 8: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/8.jpg)
Lista ligada circular com nó cabeça
Temos um ponteiro para o nó cabeça
Cada elemento indica seu sucessor e o último aponta para ocabeça
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 9: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/9.jpg)
Lista ligada circular com nó cabeça
Temos um ponteiro para o nó cabeça
Cada elemento indica seu sucessor e o último aponta para ocabeça
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 10: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/10.jpg)
Modelagem#include <stdio.h>
#include <malloc.h>
typedef int bool;
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct tempRegistro {
REGISTRO reg;
struct tempRegistro* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT cabeca;
} LISTA;
![Page 11: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/11.jpg)
Modelagem#include <stdio.h>
#include <malloc.h>
typedef int bool;
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct tempRegistro {
REGISTRO reg;
struct tempRegistro* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT cabeca;
} LISTA;
![Page 12: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/12.jpg)
Funções de gerenciamentoImplementaremos funções para:
Inicializar a estruturaRetornar a quantidade de elementos válidosExibir os elementos da estruturaBuscar por um elemento na estruturaInserir elementos na estruturaExcluir elementos da estruturaReinicializar a estrutura
![Page 13: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/13.jpg)
Inicialização
Para inicializarmos nossa lista ligada circular e comnó cabeça, precisamos:
- Criar o nó cabeça;- A variável cabeca precisa apontar para ele;- E o nó cabeça apontará para ele mesmo comopróximo.
![Page 14: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/14.jpg)
Inicialização
Para inicializarmos nossa lista ligada circular e comnó cabeça, precisamos:
- Criar o nó cabeça;
- A variável cabeca precisa apontar para ele;- E o nó cabeça apontará para ele mesmo comopróximo.
![Page 15: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/15.jpg)
Inicialização
Para inicializarmos nossa lista ligada circular e comnó cabeça, precisamos:
- Criar o nó cabeça;- A variável cabeca precisa apontar para ele;
- E o nó cabeça apontará para ele mesmo comopróximo.
![Page 16: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/16.jpg)
Inicialização
Para inicializarmos nossa lista ligada circular e comnó cabeça, precisamos:
- Criar o nó cabeça;- A variável cabeca precisa apontar para ele;- E o nó cabeça apontará para ele mesmo comopróximo.
![Page 17: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/17.jpg)
Inicialização
void inicializarLista(LISTA* l) {
l->cabeca = (PONT) malloc(sizeof(ELEMENTO));
l->cabeca->prox = l->cabeca;
}
![Page 18: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/18.jpg)
Inicialização
void inicializarLista(LISTA* l) {
l->cabeca = (PONT) malloc(sizeof(ELEMENTO));
l->cabeca->prox = l->cabeca;
}
![Page 19: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/19.jpg)
Inicialização
void inicializarLista(LISTA* l) {
l->cabeca = (PONT) malloc(sizeof(ELEMENTO));
l->cabeca->prox = l->cabeca;
}
![Page 20: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/20.jpg)
Inicialização
void inicializarLista(LISTA* l) {
l->cabeca = (PONT) malloc(sizeof(ELEMENTO));
l->cabeca->prox = l->cabeca;
}
![Page 21: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/21.jpg)
Retornar número de elementos
Já que optamos por não criar um campo com onúmero de elementos na lista, precisaremospercorrer todos os elementos para contar quantossão.
![Page 22: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/22.jpg)
Retornar número de elementosint tamanho(LISTA* l) {
PONT end = l->cabeca->prox;
int tam = 0;
while (end != l->cabeca) {
tam++;
end = end->prox;
}
return tam;
}
![Page 23: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/23.jpg)
Retornar número de elementosint tamanho(LISTA* l) {
PONT end = l->cabeca->prox;
int tam = 0;
while (end != l->cabeca) {
tam++;
end = end->prox;
}
return tam;
}
![Page 24: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/24.jpg)
Retornar número de elementosint tamanho(LISTA* l) {
PONT end = l->cabeca->prox;
int tam = 0;
while (end != l->cabeca) {
tam++;
end = end->prox;
}
return tam;
}
![Page 25: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/25.jpg)
Exibição/Impressão
Para exibir os elementos da estrutura precisaremositerar pelos elementos válidos e, por exemplo,imprimir suas chaves.Precisamos lembrar que o nó cabeça não é um doselementos válidos da nossa lista.
![Page 26: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/26.jpg)
Exibição/Impressão
void exibirLista(LISTA* l) {
PONT end = l->cabeca->prox;
printf("Lista: \" ");
while (end != l->cabeca) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
![Page 27: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/27.jpg)
Exibição/Impressão
void exibirLista(LISTA* l) {
PONT end = l->cabeca->prox;
printf("Lista: \" ");
while (end != l->cabeca) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
![Page 28: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/28.jpg)
Exibição/Impressão
void exibirLista(LISTA* l) {
PONT end = l->cabeca->prox;
printf("Lista: \" ");
while (end != l->cabeca) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
![Page 29: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/29.jpg)
Buscar por elemento
A função de busca deverá:Receber uma chave do usuárioRetornar o endereço em que este elemento seencontra (caso seja encontrado)Retornar NULL caso não haja um registro comessa chave na lista
Podemos usar o nó cabeça como sentinela
![Page 30: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/30.jpg)
Buscar por elemento
A função de busca deverá:Receber uma chave do usuárioRetornar o endereço em que este elemento seencontra (caso seja encontrado)Retornar NULL caso não haja um registro comessa chave na listaPodemos usar o nó cabeça como sentinela
![Page 31: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/31.jpg)
Busca sequencial
PONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;
l->cabeca->reg.chave = ch;
while (pos->reg.chave != ch) pos = pos->prox;
if (pos != l->cabeca) return pos;
return NULL;
}
![Page 32: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/32.jpg)
Busca sequencial
PONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;
l->cabeca->reg.chave = ch;
while (pos->reg.chave != ch) pos = pos->prox;
if (pos != l->cabeca) return pos;
return NULL;
}
![Page 33: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/33.jpg)
Busca sequencial
PONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;
l->cabeca->reg.chave = ch;
while (pos->reg.chave != ch) pos = pos->prox;
if (pos != l->cabeca) return pos;
return NULL;
}
![Page 34: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/34.jpg)
Busca sequencial
PONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;
l->cabeca->reg.chave = ch;
while (pos->reg.chave != ch) pos = pos->prox;
if (pos != l->cabeca) return pos;
return NULL;
}
![Page 35: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/35.jpg)
Busca sequencial
PONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;
l->cabeca->reg.chave = ch;
while (pos->reg.chave != ch) pos = pos->prox;
if (pos != l->cabeca) return pos;
return NULL;
}
![Page 36: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/36.jpg)
Busca sequencial - lista ordenada
// lista não precisa estar ordenada pelos valores das chavesPONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave ) pos = pos->prox;if () return pos;return NULL;
}
// lista ordenada pelos valores das chaves dos registrosPONT buscaSentinelaOrd(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave ch) pos = pos->prox;if () return pos;return NULL;
}
![Page 37: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/37.jpg)
Busca sequencial - lista ordenada// lista não precisa estar ordenada pelos valores das chavesPONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave != ch) pos = pos->prox;if (pos != l->cabeca) return pos;return NULL;
}
// lista ordenada pelos valores das chaves dos registrosPONT buscaSentinelaOrd(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave < ch) pos = pos->prox;if (pos != l->cabeca && pos->reg.chave==ch) return pos;return NULL;
}
![Page 38: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/38.jpg)
Busca sequencial - lista ordenada// lista não precisa estar ordenada pelos valores das chavesPONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave != ch) pos = pos->prox;if (pos != l->cabeca) return pos;return NULL;
}
// lista ordenada pelos valores das chaves dos registrosPONT buscaSentinelaOrd(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave < ch) pos = pos->prox;if (pos != l->cabeca && pos->reg.chave==ch) return pos;return NULL;
}
![Page 39: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/39.jpg)
Busca sequencial - lista ordenada// lista não precisa estar ordenada pelos valores das chavesPONT buscaSentinela(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave != ch) pos = pos->prox;if (pos != l->cabeca) return pos;return NULL;
}
// lista ordenada pelos valores das chaves dos registrosPONT buscaSentinelaOrd(LISTA* l, TIPOCHAVE ch) {
PONT pos = l->cabeca->prox;l->cabeca->reg.chave = ch;while (pos->reg.chave < ch) pos = pos->prox;if (pos != l->cabeca && pos->reg.chave==ch) return pos;return NULL;
}
![Page 40: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/40.jpg)
Inserção de um elementoO usuário passa como parâmetro um registro a serinserido na lista
Realizaremos a inserção ordenada pelo valor da chave doregistro passado e não permitiremos a inserção deelementos repetidos;
Na inserção precisamos identificar entre quais elementos onovo elemento será inserido;Alocaremos memória para o novo elemento.Precisamos saber quem será o predecessor do elemento.
![Page 41: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/41.jpg)
Inserção de um elementoO usuário passa como parâmetro um registro a serinserido na lista
Realizaremos a inserção ordenada pelo valor da chave doregistro passado e não permitiremos a inserção deelementos repetidos;Na inserção precisamos identificar entre quais elementos onovo elemento será inserido;
Alocaremos memória para o novo elemento.Precisamos saber quem será o predecessor do elemento.
![Page 42: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/42.jpg)
Inserção de um elementoO usuário passa como parâmetro um registro a serinserido na lista
Realizaremos a inserção ordenada pelo valor da chave doregistro passado e não permitiremos a inserção deelementos repetidos;Na inserção precisamos identificar entre quais elementos onovo elemento será inserido;Alocaremos memória para o novo elemento.
Precisamos saber quem será o predecessor do elemento.
![Page 43: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/43.jpg)
Inserção de um elementoO usuário passa como parâmetro um registro a serinserido na lista
Realizaremos a inserção ordenada pelo valor da chave doregistro passado e não permitiremos a inserção deelementos repetidos;Na inserção precisamos identificar entre quais elementos onovo elemento será inserido;Alocaremos memória para o novo elemento.Precisamos saber quem será o predecessor do elemento.
![Page 44: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/44.jpg)
Busca - auxiliar
PONT buscaSeqExc(LISTA* l, TIPOCHAVE ch, PONT* ant) {*ant = l->cabeca;PONT atual = l->cabeca->prox;l->cabeca->reg.chave = ch;while (atual->reg.chave<ch) {
*ant = atual;atual = atual->prox;
}if (atual != l->cabeca && atual->reg.chave == ch) return atual;return NULL;
}
![Page 45: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/45.jpg)
Busca - auxiliar
PONT buscaSeqExc(LISTA* l, TIPOCHAVE ch, PONT* ant) {*ant = l->cabeca;PONT atual = l->cabeca->prox;l->cabeca->reg.chave = ch;while (atual->reg.chave<ch) {
*ant = atual;atual = atual->prox;
}if (atual != l->cabeca && atual->reg.chave == ch) return atual;return NULL;
}
![Page 46: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/46.jpg)
Busca - auxiliar
PONT buscaSeqExc(LISTA* l, TIPOCHAVE ch, PONT* ant) {*ant = l->cabeca;PONT atual = l->cabeca->prox;l->cabeca->reg.chave = ch;while (atual->reg.chave<ch) {
*ant = atual;atual = atual->prox;
}if (atual != l->cabeca && atual->reg.chave == ch) return atual;return NULL;
}
![Page 47: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/47.jpg)
Busca - auxiliar
PONT buscaSeqExc(LISTA* l, TIPOCHAVE ch, PONT* ant) {*ant = l->cabeca;PONT atual = l->cabeca->prox;l->cabeca->reg.chave = ch;while (atual->reg.chave<ch) {
*ant = atual;atual = atual->prox;
}if (atual != l->cabeca && atual->reg.chave == ch) return atual;return NULL;
}
![Page 48: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/48.jpg)
Busca - auxiliar
PONT buscaSeqExc(LISTA* l, TIPOCHAVE ch, PONT* ant) {*ant = l->cabeca;PONT atual = l->cabeca->prox;l->cabeca->reg.chave = ch;while (atual->reg.chave<ch) {
*ant = atual;atual = atual->prox;
}if (atual != l->cabeca && atual->reg.chave == ch) return atual;return NULL;
}
![Page 49: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/49.jpg)
Busca - auxiliar
PONT buscaSeqExc(LISTA* l, TIPOCHAVE ch, PONT* ant) {*ant = l->cabeca;PONT atual = l->cabeca->prox;l->cabeca->reg.chave = ch;while (atual->reg.chave<ch) {
*ant = atual;atual = atual->prox;
}if (atual != l->cabeca && atual->reg.chave == ch) return atual;return NULL;
}
![Page 50: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/50.jpg)
Inserção ordenada - sem duplicaçãobool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
PONT ant, i;
i = buscaSeqExc(l,reg.chave,&ant);
if (i != NULL) return false;
i = (PONT) malloc(sizeof(ELEMENTO));
i->reg = reg;
i->prox = ant->prox;
ant->prox = i;
return true;
}
![Page 51: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/51.jpg)
Inserção ordenada - sem duplicaçãobool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
PONT ant, i;
i = buscaSeqExc(l,reg.chave,&ant);
if (i != NULL) return false;
i = (PONT) malloc(sizeof(ELEMENTO));
i->reg = reg;
i->prox = ant->prox;
ant->prox = i;
return true;
}
![Page 52: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/52.jpg)
Inserção ordenada - sem duplicaçãobool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
PONT ant, i;
i = buscaSeqExc(l,reg.chave,&ant);
if (i != NULL) return false;
i = (PONT) malloc(sizeof(ELEMENTO));
i->reg = reg;
i->prox = ant->prox;
ant->prox = i;
return true;
}
![Page 53: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/53.jpg)
Inserção ordenada - sem duplicaçãobool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
PONT ant, i;
i = buscaSeqExc(l,reg.chave,&ant);
if (i != NULL) return false;
i = (PONT) malloc(sizeof(ELEMENTO));
i->reg = reg;
i->prox = ant->prox;
ant->prox = i;
return true;
}
![Page 54: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/54.jpg)
Inserção ordenada - sem duplicaçãobool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
PONT ant, i;
i = buscaSeqExc(l,reg.chave,&ant);
if (i != NULL) return false;
i = (PONT) malloc(sizeof(ELEMENTO));
i->reg = reg;
i->prox = ant->prox;
ant->prox = i;
return true;
}
![Page 55: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/55.jpg)
Inserção ordenada - sem duplicaçãobool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
PONT ant, i;
i = buscaSeqExc(l,reg.chave,&ant);
if (i != NULL) return false;
i = (PONT) malloc(sizeof(ELEMENTO));
i->reg = reg;
i->prox = ant->prox;
ant->prox = i;
return true;
}
![Page 56: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/56.jpg)
Exclusão de um elementoO usuário passa a chave do elemento que ele querexcluir
Se houver um elemento com esta chave na lista,exclui este elemento da lista, acerta os ponteirosenvolvidos e retorna true.Caso contrário, retorna false
Para esta função precisamos saber quem é opredecessor do elemento a ser excluído.
![Page 57: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/57.jpg)
Exclusão de um elementoO usuário passa a chave do elemento que ele querexcluir
Se houver um elemento com esta chave na lista,exclui este elemento da lista, acerta os ponteirosenvolvidos e retorna true.Caso contrário, retorna falsePara esta função precisamos saber quem é opredecessor do elemento a ser excluído.
![Page 58: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/58.jpg)
Exclusão de um elemento
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
PONT ant, i;
i = buscaSeqExc(l,ch,&ant);
if (i == NULL) return false;
ant->prox = i->prox;
free(i);
return true;
}
![Page 59: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/59.jpg)
Exclusão de um elemento
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
PONT ant, i;
i = buscaSeqExc(l,ch,&ant);
if (i == NULL) return false;
ant->prox = i->prox;
free(i);
return true;
}
![Page 60: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/60.jpg)
Exclusão de um elemento
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
PONT ant, i;
i = buscaSeqExc(l,ch,&ant);
if (i == NULL) return false;
ant->prox = i->prox;
free(i);
return true;
}
![Page 61: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/61.jpg)
Exclusão de um elemento
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
PONT ant, i;
i = buscaSeqExc(l,ch,&ant);
if (i == NULL) return false;
ant->prox = i->prox;
free(i);
return true;
}
![Page 62: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/62.jpg)
Exclusão de um elemento
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
PONT ant, i;
i = buscaSeqExc(l,ch,&ant);
if (i == NULL) return false;
ant->prox = i->prox;
free(i);
return true;
}
![Page 63: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/63.jpg)
Exclusão de um elemento
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
PONT ant, i;
i = buscaSeqExc(l,ch,&ant);
if (i == NULL) return false;
ant->prox = i->prox;
free(i);
return true;
}
![Page 64: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/64.jpg)
Reinicialização da lista
Para reinicializar a estrutura, precisamos excluirtodos os elementos válidos e atualizar o campoprox do nó cabeça.
![Page 65: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/65.jpg)
Reinicialização da lista
Para reinicializar a estrutura, precisamos excluirtodos os elementos válidos e atualizar o campoprox do nó cabeça.
![Page 66: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/66.jpg)
Reinicialização da lista
void reinicializarLista(LISTA* l) {
PONT end = l->cabeca->prox;
while (end != l->cabeca) {
PONT apagar = end;
end = end->prox;
free(apagar);
}
l->cabeca->prox = l->cabeca;
}
![Page 67: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/67.jpg)
Reinicialização da lista
void reinicializarLista(LISTA* l) {
PONT end = l->cabeca->prox;
while (end != l->cabeca) {
PONT apagar = end;
end = end->prox;
free(apagar);
}
l->cabeca->prox = l->cabeca;
}
![Page 68: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/68.jpg)
Reinicialização da lista
void reinicializarLista(LISTA* l) {
PONT end = l->cabeca->prox;
while (end != l->cabeca) {
PONT apagar = end;
end = end->prox;
free(apagar);
}
l->cabeca->prox = l->cabeca;
}
![Page 69: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/69.jpg)
Reinicialização da lista
void reinicializarLista(LISTA* l) {
PONT end = l->cabeca->prox;
while (end != l->cabeca) {
PONT apagar = end;
end = end->prox;
free(apagar);
}
l->cabeca->prox = l->cabeca;
}
![Page 70: AULA 07 ESTRUTURA DE DADOS · AULA 07 ESTRUTURA DE DADOS Lista ligada circular com nó cabeça Norton T. Roman & Luciano A. Digiampietri. Lista ligada Na última aula aprendemos como](https://reader033.fdocumentos.com/reader033/viewer/2022042303/5eceefc2b8001b5f79091c1a/html5/thumbnails/70.jpg)
AULA 07ESTRUTURA DE DADOS
Lista ligada circular com nó cabeça
Norton T. Roman & Luciano A. Digiampietri