aula 04 estrutura de dados - each.usp.br · lista linear sequencial na última aula aprendemos...
TRANSCRIPT
![Page 1: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/1.jpg)
AULA 04ESTRUTURA DE DADOS
Lista linear sequencial (continuação)
Norton T. Roman & Luciano A. Digiampietri
![Page 2: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/2.jpg)
Lista linear sequencial
Na última aula aprendemos listas linearessequenciais:
- Utilizamos um arranjo para armazenar nossosregistros;- A inserção de registros era feita na posiçãoindicada pelo usuário.
![Page 3: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/3.jpg)
Lista linear sequencial
Na aula de hoje abordaremos dois aspectos:- Otimização da busca por elementos;- Mudança na ordem de inserção dos elementos;
![Page 4: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/4.jpg)
Busca por elementos
O usuário diz qual elemento é buscado e a funçãoretorna a posição desse elemento:
- As chaves dos elementos não estão em ordemcrescente;- Se o elemento não existir a função retorna -1;
![Page 5: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/5.jpg)
Busca por elementos (versão inicial)
int buscaSequencial(LISTA* l, TIPOCHAVE ch) {
int i = 0;
while (i < l->nroElem) {
if(ch == l->A[i].chave) return i;
else i++;
}
return -1;
}
![Page 6: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/6.jpg)
Busca por elementos (versão inicial)
int buscaSequencial(LISTA* l, TIPOCHAVE ch) {
int i = 0;
while (i < l->nroElem) {
if(ch == l->A[i].chave) return i;
else i++;
}
return -1;
}
![Page 7: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/7.jpg)
Busca por elementosIdeia: Ao invés de fazer duas comparações poriteração, seria possível fazer só uma?
- Precisamos sempre comparar a chave doelemento atual com a chave do elemento buscado;- Mas como garantir que não iremos passar doúltimo elemento?- Garantindo que a chave buscada seráencontrada!
![Page 8: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/8.jpg)
Busca por elementosIdeia: Ao invés de fazer duas comparações poriteração, seria possível fazer só uma?
- Precisamos sempre comparar a chave doelemento atual com a chave do elemento buscado;
- Mas como garantir que não iremos passar doúltimo elemento?- Garantindo que a chave buscada seráencontrada!
![Page 9: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/9.jpg)
Busca por elementosIdeia: Ao invés de fazer duas comparações poriteração, seria possível fazer só uma?
- Precisamos sempre comparar a chave doelemento atual com a chave do elemento buscado;- Mas como garantir que não iremos passar doúltimo elemento?
- Garantindo que a chave buscada seráencontrada!
![Page 10: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/10.jpg)
Busca por elementosIdeia: Ao invés de fazer duas comparações poriteração, seria possível fazer só uma?
- Precisamos sempre comparar a chave doelemento atual com a chave do elemento buscado;- Mas como garantir que não iremos passar doúltimo elemento?- Garantindo que a chave buscada seráencontrada!
![Page 11: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/11.jpg)
Busca por elementos
Criação de um elemento sentinela:- Elemento extra (um registro) adicionado à listapara auxiliar alguma operação;- Será inserido no final da lista (após o últimoelemento válido) durante as buscas;- Conterá a chave do elemento buscado.
![Page 12: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/12.jpg)
Busca por elementos (sentinela)
int buscaSentinela(LISTA* l, TIPOCHAVE ch) {
int i = 0;
l->A[l->nroElem].chave = ch;
while(l->A[i].chave != ch) i++;
if (i == l->nroElem) return -1;
else return i;
}
![Page 13: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/13.jpg)
Busca por elementos (sentinela)
int buscaSentinela(LISTA* l, TIPOCHAVE ch) {
int i = 0;
l->A[l->nroElem].chave = ch;
while(l->A[i].chave != ch) i++;
if (i == l->nroElem) return -1;
else return i;
}
![Page 14: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/14.jpg)
Busca por elementos (sentinela)
int buscaSentinela(LISTA* l, TIPOCHAVE ch) {
int i = 0;
l->A[l->nroElem].chave = ch;
while(l->A[i].chave != ch) i++;
if (i == l->nroElem) return -1;
else return i;
}
![Page 15: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/15.jpg)
Busca por elementos (sentinela)
int buscaSentinela(LISTA* l, TIPOCHAVE ch) {
int i = 0;
l->A[l->nroElem].chave = ch;
while(l->A[i].chave != ch) i++;
if (i == l->nroElem) return -1;
else return i;
}
![Page 16: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/16.jpg)
Busca por elementos (sentinela)
int buscaSentinela(LISTA* l, TIPOCHAVE ch) {
int i = 0;
l->A[l->nroElem].chave = ch;
while(l->A[i].chave != ch) i++;
if (i == l->nroElem) return -1;
else return i;
}
![Page 17: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/17.jpg)
Busca por elementos (sentinela)
Há apenas um probleminha:- Se a lista já estiver cheia, não haverá espaçopara criar o sentinela;
- O que fazer?- Criamos a lista com uma posição extra (um registro a
mais) para garantir que haverá espaço para o sentinela.
- Essa posição extra nunca terá um registro válido.
![Page 18: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/18.jpg)
Busca por elementos (sentinela)
Há apenas um probleminha:- Se a lista já estiver cheia, não haverá espaçopara criar o sentinela;- O que fazer?
- Criamos a lista com uma posição extra (um registro a
mais) para garantir que haverá espaço para o sentinela.
- Essa posição extra nunca terá um registro válido.
![Page 19: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/19.jpg)
Busca por elementos (sentinela)
Há apenas um probleminha:- Se a lista já estiver cheia, não haverá espaçopara criar o sentinela;- O que fazer?- Criamos a lista com uma posição extra (um registro a
mais) para garantir que haverá espaço para o sentinela.
- Essa posição extra nunca terá um registro válido.
![Page 20: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/20.jpg)
Modelagem
#define MAX 50
typedef int TIPOCHAVE;
typedef struct{
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct {
REGISTRO A[MAX+1];
int nroElem;
} LISTA;
![Page 21: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/21.jpg)
Busca por elementos (sentinela)
int buscaSequencial(LISTA* l,TIPOCHAVE ch) {
int i = 0;while (i < l->nroElem) {
if(ch == l->A[i].chave) return i;else i++;
}return -1;
}
int buscaSentinela(LISTA* l,TIPOCHAVE ch) {
int i = 0;l->A[l->nroElem].chave = ch;while(l->A[i].chave != ch) i++;if (i == l->nroElem) return -1;else return i;
}
![Page 22: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/22.jpg)
Busca por elementos
Mas a busca binária não é mais eficiente?
- Sim, porém ela necessita que as chaves doselementos estejam ordenadas;- Para isso, precisaremos mudar nossa função deinserção de elementos.- A função de inserção seguirá a lógica doinsertion sort .
![Page 23: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/23.jpg)
Busca por elementos
Mas a busca binária não é mais eficiente?- Sim, porém ela necessita que as chaves doselementos estejam ordenadas;
- Para isso, precisaremos mudar nossa função deinserção de elementos.- A função de inserção seguirá a lógica doinsertion sort .
![Page 24: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/24.jpg)
Busca por elementos
Mas a busca binária não é mais eficiente?- Sim, porém ela necessita que as chaves doselementos estejam ordenadas;- Para isso, precisaremos mudar nossa função deinserção de elementos.
- A função de inserção seguirá a lógica doinsertion sort .
![Page 25: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/25.jpg)
Busca por elementos
Mas a busca binária não é mais eficiente?- Sim, porém ela necessita que as chaves doselementos estejam ordenadas;- Para isso, precisaremos mudar nossa função deinserção de elementos.- A função de inserção seguirá a lógica doinsertion sort .
![Page 26: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/26.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 27: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/27.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 28: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/28.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 29: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/29.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 30: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/30.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 31: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/31.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 32: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/32.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 33: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/33.jpg)
Inserção de elementos - ordenadabool inserirElemListaOrd(LISTA* l, REGISTRO reg) {
if(l->nroElem >= MAX) return false;
int pos = l->nroElem;
while(pos > 0 && l->A[pos-1].chave > reg.chave) {
l->A[pos] = l->A[pos-1];
pos--;
}
l->A[pos] = reg;
l->nroElem++;
return true;
}
![Page 34: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/34.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;while(esq <= dir) {
meio = ((esq + dir) / 2);if(l->A[meio].chave == ch) return meio;else {
if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}}return -1;
}
![Page 35: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/35.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;
while(esq <= dir) {meio = ((esq + dir) / 2);if(l->A[meio].chave == ch) return meio;else {
if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}}return -1;
}
![Page 36: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/36.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;while(esq <= dir) {
meio = ((esq + dir) / 2);if(l->A[meio].chave == ch) return meio;else {
if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}
}
return -1;
}
![Page 37: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/37.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;while(esq <= dir) {
meio = ((esq + dir) / 2);
if(l->A[meio].chave == ch) return meio;else {
if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}
}
return -1;
}
![Page 38: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/38.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;while(esq <= dir) {
meio = ((esq + dir) / 2);if(l->A[meio].chave == ch) return meio;
else {if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}
}
return -1;
}
![Page 39: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/39.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;while(esq <= dir) {
meio = ((esq + dir) / 2);if(l->A[meio].chave == ch) return meio;else {
if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}}
return -1;
}
![Page 40: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/40.jpg)
Busca bináriaint buscaBinaria(LISTA* l, TIPOCHAVE ch) {
int esq, dir, meio;esq = 0;dir = l->nroElem-1;while(esq <= dir) {
meio = ((esq + dir) / 2);if(l->A[meio].chave == ch) return meio;else {
if(l->A[meio].chave < ch) esq = meio + 1;else dir = meio - 1;
}}return -1;
}
![Page 41: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/41.jpg)
Elementos ordenados pelas chaves
Com a ordenação dos elementos pela chave:
- A busca ficou mais eficiente (busca binária);- Não precisamos do sentinela;- O que acontece com a exclusão?
![Page 42: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/42.jpg)
Elementos ordenados pelas chaves
Com a ordenação dos elementos pela chave:- A busca ficou mais eficiente (busca binária);
- Não precisamos do sentinela;- O que acontece com a exclusão?
![Page 43: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/43.jpg)
Elementos ordenados pelas chaves
Com a ordenação dos elementos pela chave:- A busca ficou mais eficiente (busca binária);- Não precisamos do sentinela;
- O que acontece com a exclusão?
![Page 44: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/44.jpg)
Elementos ordenados pelas chaves
Com a ordenação dos elementos pela chave:- A busca ficou mais eficiente (busca binária);- Não precisamos do sentinela;- O que acontece com a exclusão?
![Page 45: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/45.jpg)
Exclusão de elementos
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int pos, j;
pos = buscaSequencial(l,ch);
if(pos == -1) return false;
for(j=pos; j < l->nroElem-1; j++) l->A[j] = l->A[j+1];
l->nroElem--;
return true;
}
![Page 46: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/46.jpg)
Exclusão de elementos
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int pos, j;
pos = buscaBinaria(l,ch);
if(pos == -1) return false;
for(j=pos; j < l->nroElem-1; j++) l->A[j] = l->A[j+1];
l->nroElem--;
return true;
}
![Page 47: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/47.jpg)
Exclusão de elementos
bool excluirElemLista(LISTA* l, TIPOCHAVE ch) {
int pos, j;
pos = buscaBinaria(l,ch);
if(pos == -1) return false;
for(j=pos; j < l->nroElem-1; j++) l->A[j] = l->A[j+1];
l->nroElem--;
return true;
}
![Page 48: AULA 04 ESTRUTURA DE DADOS - each.usp.br · Lista linear sequencial Na última aula aprendemos listas lineares sequenciais: - Utilizamos umarranjopara armazenar nossos registros;](https://reader031.vdocuments.net/reader031/viewer/2022021714/5be6b9a109d3f2d8348dbb8b/html5/thumbnails/48.jpg)
AULA 04ESTRUTURA DE DADOS
Lista linear sequencial (continuação)
Norton T. Roman & Luciano A. Digiampietri