aula 05 estrutura de dados · aula 05 estrutura de dados lista ligada (implementação estática)...
TRANSCRIPT
![Page 1: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/1.jpg)
AULA 05ESTRUTURA DE DADOS
Lista ligada (implementação estática)
Norton T. Roman & Luciano A. Digiampietri
![Page 2: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/2.jpg)
Lista linear sequencialNa última aula aprendemos listas linearessequenciais.Realizamos a inserção ordenada pela chave:
- A busca era feita de maneira eficiente (buscabinária);- Porém a inserção e a exclusão eram custosas,pois potencialmente precisariam deslocar várioselementos.
![Page 3: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/3.jpg)
Lista linear sequencialNa última aula aprendemos listas linearessequenciais.Realizamos a inserção ordenada pela chave:
- A busca era feita de maneira eficiente (buscabinária);
- Porém a inserção e a exclusão eram custosas,pois potencialmente precisariam deslocar várioselementos.
![Page 4: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/4.jpg)
Lista linear sequencialNa última aula aprendemos listas linearessequenciais.Realizamos a inserção ordenada pela chave:
- A busca era feita de maneira eficiente (buscabinária);- Porém a inserção e a exclusão eram custosas,pois potencialmente precisariam deslocar várioselementos.
![Page 5: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/5.jpg)
Lista ligada
Para evitar o deslocamento de elementos durante ainserção e a exclusão utilizaremos uma lista ligada:
- É uma estrutura linear (cada elemento possui no máximoum predecessor e um sucessor);- A ordem lógica dos elementos (a ordem “vista” pelousuário) não é a mesma ordem física (em memória principal)dos elementos.
- Cada elemento precisa indicar quem é o seu sucessor.
![Page 6: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/6.jpg)
Lista ligada
Para evitar o deslocamento de elementos durante ainserção e a exclusão utilizaremos uma lista ligada:
- É uma estrutura linear (cada elemento possui no máximoum predecessor e um sucessor);
- A ordem lógica dos elementos (a ordem “vista” pelousuário) não é a mesma ordem física (em memória principal)dos elementos.
- Cada elemento precisa indicar quem é o seu sucessor.
![Page 7: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/7.jpg)
Lista ligada
Para evitar o deslocamento de elementos durante ainserção e a exclusão utilizaremos uma lista ligada:
- É uma estrutura linear (cada elemento possui no máximoum predecessor e um sucessor);- A ordem lógica dos elementos (a ordem “vista” pelousuário) não é a mesma ordem física (em memória principal)dos elementos.
- Cada elemento precisa indicar quem é o seu sucessor.
![Page 8: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/8.jpg)
Lista ligada
Para evitar o deslocamento de elementos durante ainserção e a exclusão utilizaremos uma lista ligada:
- É uma estrutura linear (cada elemento possui no máximoum predecessor e um sucessor);- A ordem lógica dos elementos (a ordem “vista” pelousuário) não é a mesma ordem física (em memória principal)dos elementos.
- Cada elemento precisa indicar quem é o seu sucessor.
![Page 9: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/9.jpg)
Lista ligada (implementaçãoestática)
Chamaremos de lista ligada implementaçãoestática, porque nossos registros serãoarmazenados em um arranjo criado inicialmente.Adicionalmente, cada elemento da nossa lista teráum campo para indicar a posição (no arranjo) deseu sucessor.
![Page 10: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/10.jpg)
Lista ligada (ideia geral)
Temos um arranjo de elementos
Cada elemento indica seu sucessor
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 11: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/11.jpg)
Lista ligada (ideia geral)
Temos um arranjo de elementos
Cada elemento indica seu sucessor
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 12: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/12.jpg)
Lista ligada (ideia geral)
Temos um arranjo de elementos
Cada elemento indica seu sucessor
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 13: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/13.jpg)
Lista ligada (ideia geral)
Temos um arranjo de elementos
Cada elemento indica seu sucessor
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 14: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/14.jpg)
Lista ligada (ideia geral)
Temos um arranjo de elementos
Cada elemento indica seu sucessor
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 15: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/15.jpg)
Lista ligada (ideia geral)
Temos um arranjo de elementos
Cada elemento indica seu sucessor
Como excluímos o elemento 8?
Como inserimos o elemento 1?
![Page 16: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/16.jpg)
Lista ligada (ideia geral)
Precisamos tomar alguns cuidados:
Precisamos saber onde está o primeiro elemento;Precisamos saber quais são os elementosdisponíveis.
![Page 17: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/17.jpg)
Lista ligada (ideia geral)
Precisamos tomar alguns cuidados:Precisamos saber onde está o primeiro elemento;
Precisamos saber quais são os elementosdisponíveis.
![Page 18: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/18.jpg)
Lista ligada (ideia geral)
Precisamos tomar alguns cuidados:Precisamos saber onde está o primeiro elemento;Precisamos saber quais são os elementosdisponíveis.
![Page 19: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/19.jpg)
Modelagem
#define MAX 50
#define INVALIDO -1
typedef int TIPOCHAVE;
typedef struct{
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct{
REGISTRO reg;
int prox;
} ELEMENTO;
typedef struct {
ELEMENTO A[MAX];
int inicio;
int dispo;
} LISTA;
![Page 20: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/20.jpg)
Modelagem
#define MAX 50
#define INVALIDO -1
typedef int TIPOCHAVE;
typedef struct{
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct{
REGISTRO reg;
int prox;
} ELEMENTO;
typedef struct {
ELEMENTO A[MAX];
int inicio;
int dispo;
} LISTA;
![Page 21: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/21.jpg)
Modelagem
#define MAX 50
#define INVALIDO -1
typedef int TIPOCHAVE;
typedef struct{
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct{
REGISTRO reg;
int prox;
} ELEMENTO;
typedef struct {
ELEMENTO A[MAX];
int inicio;
int dispo;
} LISTA;
![Page 22: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/22.jpg)
Modelagem
#define MAX 50
#define INVALIDO -1
typedef int TIPOCHAVE;
typedef struct{
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct{
REGISTRO reg;
int prox;
} ELEMENTO;
typedef struct {
ELEMENTO A[MAX];
int inicio;
int dispo;
} LISTA;
![Page 23: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/23.jpg)
Modelagem
#define MAX 50
#define INVALIDO -1
typedef int TIPOCHAVE;
typedef struct{
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct{
REGISTRO reg;
int prox;
} ELEMENTO;
typedef struct {
ELEMENTO A[MAX];
int inicio;
int dispo;
} LISTA;
![Page 24: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/24.jpg)
Modelagem
![Page 25: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/25.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 26: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/26.jpg)
Inicialização
Para inicializarmos nossa lista ligada, precisamos:- Colocar todos os elementos na “lista” dedisponíveis;- Acertar a variável dispo (primeiro itemdisponível);- Acertar a variável inicio (para indicar que não hánenhum item válido);
![Page 27: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/27.jpg)
Inicialização
void inicializarLista(LISTA* l) {
int i;
for (i=0; i<MAX-1; i++)
l->A[i].prox = i + 1;
l->A[MAX-1].prox=INVALIDO;
l->inicio=INVALIDO;
l->dispo=0;
}
![Page 28: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/28.jpg)
Inicialização
void inicializarLista(LISTA* l) {
int i;
for (i=0; i<MAX-1; i++)
l->A[i].prox = i + 1;
l->A[MAX-1].prox=INVALIDO;
l->inicio=INVALIDO;
l->dispo=0;
}
![Page 29: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/29.jpg)
Inicialização
void inicializarLista(LISTA* l) {
int i;
for (i=0; i<MAX-1; i++)
l->A[i].prox = i + 1;
l->A[MAX-1].prox=INVALIDO;
l->inicio=INVALIDO;
l->dispo=0;
}
![Page 30: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/30.jpg)
Inicialização
void inicializarLista(LISTA* l) {
int i;
for (i=0; i<MAX-1; i++)
l->A[i].prox = i + 1;
l->A[MAX-1].prox=INVALIDO;
l->inicio=INVALIDO;
l->dispo=0;
}
![Page 31: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/31.jpg)
Inicialização
void inicializarLista(LISTA* l) {
int i;
for (i=0; i<MAX-1; i++)
l->A[i].prox = i + 1;
l->A[MAX-1].prox=INVALIDO;
l->inicio=INVALIDO;
l->dispo=0;
}
![Page 32: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/32.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 válidos para contarquantos são.
![Page 33: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/33.jpg)
Retornar número de elementos
int tamanho(LISTA* l) {
int i = l->inicio;
int tam = 0;
while (i != INVALIDO) {
tam++;
i = l->A[i].prox;
}
return tam;
}
![Page 34: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/34.jpg)
Retornar número de elementos
int tamanho(LISTA* l) {
int i = l->inicio;
int tam = 0;
while (i != INVALIDO) {
tam++;
i = l->A[i].prox;
}
return tam;
}
![Page 35: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/35.jpg)
Retornar número de elementos
int tamanho(LISTA* l) {
int i = l->inicio;
int tam = 0;
while (i != INVALIDO) {
tam++;
i = l->A[i].prox;
}
return tam;
}
![Page 36: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/36.jpg)
Retornar número de elementos
int tamanho(LISTA* l) {
int i = l->inicio;
int tam = 0;
while (i != INVALIDO) {
tam++;
i = l->A[i].prox;
}
return tam;
}
![Page 37: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/37.jpg)
Exibição/Impressão
Para exibir os elementos da estrutura precisaremositerar pelos elementos válidos e, por exemplo,imprimir suas chaves.
![Page 38: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/38.jpg)
Exibição/Impressão
void exibirLista(LISTA* l) {
int i = l->inicio;
printf("Lista: \" ");
while (i != INVALIDO) {
printf("%i ", l->A[i].reg.chave);
i = l->A[i].prox;
}
printf("\"\n");
}
![Page 39: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/39.jpg)
Buscar por elemento
A função de busca deverá:Receber uma chave do usuárioRetornar a posição em que este elemento seencontra no arranjo (caso seja encontrado)Retornar INVALIDO caso não haja um registrocom essa chave na lista
![Page 40: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/40.jpg)
Busca sequencial (lista ordenada)
int buscaSequencialOrd(LISTA* l, TIPOCHAVE ch) {
int i = l->inicio;
while (i != INVALIDO && l->A[i].reg.chave < ch)
i = l->A[i].prox;
if (i != INVALIDO && l->A[i].reg.chave == ch)
return i;
else return INVALIDO;
}
![Page 41: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/41.jpg)
Busca sequencial (lista ordenada)
int buscaSequencialOrd(LISTA* l, TIPOCHAVE ch) {
int i = l->inicio;
while (i != INVALIDO && l->A[i].reg.chave < ch)
i = l->A[i].prox;
if (i != INVALIDO && l->A[i].reg.chave == ch)
return i;
else return INVALIDO;
}
![Page 42: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/42.jpg)
Busca sequencial (lista ordenada)
int buscaSequencialOrd(LISTA* l, TIPOCHAVE ch) {
int i = l->inicio;
while (i != INVALIDO && l->A[i].reg.chave < ch)
i = l->A[i].prox;
if (i != INVALIDO && l->A[i].reg.chave == ch)
return i;
else return INVALIDO;
}
![Page 43: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/43.jpg)
Busca sequencial (lista ordenada)
int buscaSequencialOrd(LISTA* l, TIPOCHAVE ch) {
int i = l->inicio;
while (i != INVALIDO && l->A[i].reg.chave < ch)
i = l->A[i].prox;
if (i != INVALIDO && l->A[i].reg.chave == ch)
return i;
else return INVALIDO;
}
![Page 44: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/44.jpg)
Busca sequencial (lista ordenada)
int buscaSequencialOrd(LISTA* l, TIPOCHAVE ch) {
int i = l->inicio;
while (i != INVALIDO && l->A[i].reg.chave < ch)
i = l->A[i].prox;
if (i != INVALIDO && l->A[i].reg.chave == ch)
return i;
else return INVALIDO;
}
![Page 45: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/45.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;O novo elemento será inserido no lugar do primeiro queestiver na lista de disponíveis.
![Page 46: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/46.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;
O novo elemento será inserido no lugar do primeiro queestiver na lista de disponíveis.
![Page 47: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/47.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;O novo elemento será inserido no lugar do primeiro queestiver na lista de disponíveis.
![Page 48: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/48.jpg)
Inserção ordenadaQueremos inserir o 8
Ele será inserido na primeiraposição disponível (posiçãofísica)
Temos que descobrir entrequais elementos será inserido(ordem lógica)
Temos que acertar os“ponteiros”
![Page 49: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/49.jpg)
Inserção ordenadaQueremos inserir o 8
Ele será inserido na primeiraposição disponível (posiçãofísica)
Temos que descobrir entrequais elementos será inserido(ordem lógica)
Temos que acertar os“ponteiros”
![Page 50: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/50.jpg)
Inserção ordenadaQueremos inserir o 8
Ele será inserido na primeiraposição disponível (posiçãofísica)
Temos que descobrir entrequais elementos será inserido(ordem lógica)
Temos que acertar os“ponteiros”
![Page 51: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/51.jpg)
Inserção ordenadaQueremos inserir o 8
Ele será inserido na primeiraposição disponível (posiçãofísica)
Temos que descobrir entrequais elementos será inserido(ordem lógica)
Temos que acertar os“ponteiros”
![Page 52: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/52.jpg)
Inserção ordenada
Iniciaremos por uma função auxiliar que retira oprimeiro elemento da lista de disponíveis e retornasua posição no arranjo.
![Page 53: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/53.jpg)
Inserção ordenada - função auxiliar
int obterNo(LISTA* l) {
int resultado = l->dispo;
if (l->dispo != INVALIDO)
l->dispo = l->A[l->dispo].prox;
return resultado;
}
![Page 54: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/54.jpg)
Inserção ordenada - parte 1bool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if (l->dispo == INVALIDO) return false;
int ant = INVALIDO;
int i = l->inicio;
TIPOCHAVE ch = reg.chave;
while ((i != INVALIDO) && (l->A[i].reg.chave<ch)){
ant = i;
i = l->A[i].prox;
}
if (i!=INVALIDO && l->A[i].reg.chave==ch) return false;
![Page 55: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/55.jpg)
Inserção ordenada - parte 1bool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if (l->dispo == INVALIDO) return false;
int ant = INVALIDO;
int i = l->inicio;
TIPOCHAVE ch = reg.chave;
while ((i != INVALIDO) && (l->A[i].reg.chave<ch)){
ant = i;
i = l->A[i].prox;
}
if (i!=INVALIDO && l->A[i].reg.chave==ch) return false;
![Page 56: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/56.jpg)
Inserção ordenada - parte 1bool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if (l->dispo == INVALIDO) return false;
int ant = INVALIDO;
int i = l->inicio;
TIPOCHAVE ch = reg.chave;
while ((i != INVALIDO) && (l->A[i].reg.chave<ch)){
ant = i;
i = l->A[i].prox;
}
if (i!=INVALIDO && l->A[i].reg.chave==ch) return false;
![Page 57: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/57.jpg)
Inserção ordenada - parte 1bool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if (l->dispo == INVALIDO) return false;
int ant = INVALIDO;
int i = l->inicio;
TIPOCHAVE ch = reg.chave;
while ((i != INVALIDO) && (l->A[i].reg.chave<ch)){
ant = i;
i = l->A[i].prox;
}
if (i!=INVALIDO && l->A[i].reg.chave==ch) return false;
![Page 58: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/58.jpg)
Inserção ordenada - parte 1bool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if (l->dispo == INVALIDO) return false;
int ant = INVALIDO;
int i = l->inicio;
TIPOCHAVE ch = reg.chave;
while ((i != INVALIDO) && (l->A[i].reg.chave<ch)){
ant = i;
i = l->A[i].prox;
}
if (i!=INVALIDO && l->A[i].reg.chave==ch) return false;
![Page 59: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/59.jpg)
Inserção ordenada - parte 2i = obterNo(l);
l->A[i].reg = reg;
if (ant == INVALIDO) {
l->A[i].prox = l->inicio;
l->inicio = i;
} else {
l->A[i].prox = l->A[ant].prox;
l->A[ant].prox = i;
}
return true;
}
![Page 60: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/60.jpg)
Inserção ordenada - parte 2i = obterNo(l);
l->A[i].reg = reg;
if (ant == INVALIDO) {
l->A[i].prox = l->inicio;
l->inicio = i;
}
else {
l->A[i].prox = l->A[ant].prox;
l->A[ant].prox = i;
}
return true;
}
![Page 61: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/61.jpg)
Inserção ordenada - parte 2i = obterNo(l);
l->A[i].reg = reg;
if (ant == INVALIDO) {
l->A[i].prox = l->inicio;
l->inicio = i;
} else {
l->A[i].prox = l->A[ant].prox;
l->A[ant].prox = i;
}
return true;
}
![Page 62: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/62.jpg)
Inserção ordenada - parte 2i = obterNo(l);
l->A[i].reg = reg;
if (ant == INVALIDO) {
l->A[i].prox = l->inicio;
l->inicio = i;
} else {
l->A[i].prox = l->A[ant].prox;
l->A[ant].prox = i;
}
return true;
}
![Page 63: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/63.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 de elementosválidos e o insere na lista de disponíveis.Adicionalmente, acerta os ponteiros envolvidos eretorna true.Caso contrário, retorna false
![Page 64: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/64.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;if (ant == INVALIDO) l->inicio = l->A[i].prox;else l->A[ant].prox = l->A[i].prox;devolverNo(l,i);return true;
}
![Page 65: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/65.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}
if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;if (ant == INVALIDO) l->inicio = l->A[i].prox;else l->A[ant].prox = l->A[i].prox;devolverNo(l,i);return true;
}
![Page 66: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/66.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;
if (ant == INVALIDO) l->inicio = l->A[i].prox;else l->A[ant].prox = l->A[i].prox;devolverNo(l,i);return true;
}
![Page 67: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/67.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;if (ant == INVALIDO) l->inicio = l->A[i].prox;
else l->A[ant].prox = l->A[i].prox;devolverNo(l,i);return true;
}
![Page 68: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/68.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;if (ant == INVALIDO) l->inicio = l->A[i].prox;else l->A[ant].prox = l->A[i].prox;
devolverNo(l,i);return true;
}
![Page 69: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/69.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;if (ant == INVALIDO) l->inicio = l->A[i].prox;else l->A[ant].prox = l->A[i].prox;devolverNo(l,i);
return true;}
![Page 70: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/70.jpg)
Exclusão de um elementobool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int ant = INVALIDO;int i = l->inicio;while ((i != INVALIDO) && (l->A[i].reg.chave<ch)) {
ant = i;i = l->A[i].prox;
}if (i==INVALIDO || l->A[i].reg.chave!=ch) return false;if (ant == INVALIDO) l->inicio = l->A[i].prox;else l->A[ant].prox = l->A[i].prox;devolverNo(l,i);return true;
}
![Page 71: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/71.jpg)
Exclusão de um elemento - funçãoauxiliar
Desejamos devolver um elemento para a lista dedisponíveis
Em que posição da lista iremos colocar esseelemento?Na que é mais fácil de inserir: no início
![Page 72: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/72.jpg)
Exclusão de um elemento - funçãoauxiliar
Desejamos devolver um elemento para a lista dedisponíveis
Em que posição da lista iremos colocar esseelemento?
Na que é mais fácil de inserir: no início
![Page 73: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/73.jpg)
Exclusão de um elemento - funçãoauxiliar
Desejamos devolver um elemento para a lista dedisponíveis
Em que posição da lista iremos colocar esseelemento?Na que é mais fácil de inserir: no início
![Page 74: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/74.jpg)
Exclusão de um elemento - funçãoauxiliar
void devolverNo(LISTA* l, int j) {
l->A[j].prox = l->dispo;
l->dispo = j;
}
![Page 75: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/75.jpg)
Reinicialização da lista
Para reinicializar a estrutura basta chamarmos afunção de inicialização.
![Page 76: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/76.jpg)
Reinicialização da lista
void reinicializarLista(LISTA* l) {
inicializarLista(l);
}
![Page 77: AULA 05 ESTRUTURA DE DADOS · AULA 05 ESTRUTURA DE DADOS Lista ligada (implementação estática) Norton T. Roman & Luciano A. Digiampietri](https://reader034.vdocuments.mx/reader034/viewer/2022042113/5e8f422cb7960329710024b0/html5/thumbnails/77.jpg)
AULA 05ESTRUTURA DE DADOS
Lista ligada (implementação estática)
Norton T. Roman & Luciano A. Digiampietri