Listas Lineares Ordenadas -...
Transcript of Listas Lineares Ordenadas -...
![Page 1: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/1.jpg)
José Augusto BaranauskasDepartamento de Física e Matemática – FFCLRP-USP
[email protected]://dfm.ffclrp.usp.br/~augusto
Algoritmos eEstruturas de Dados I
Listas Lineares OrdenadasListas Lineares Ordenadas
Nesta apresentação será apresentado o ADT lista linear ordenadaUma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre os elementos que compõem a lista e que deve ser respeitada
![Page 2: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/2.jpg)
2
IntroduçãoIntrodução
Na apresentação anterior comentamos brevemente que os algoritmos de listas podem ser melhorados em termos de eficiência e simplicidade, fazendo-se uso do elemento sentinelaEsta técnica simples é válida para ambas implementações (contígua e encadeada) tanto para listas lineares como listas lineares ordenadas
![Page 3: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/3.jpg)
3
OrganizaçãoOrganização
Definição do ADT Lista OrdenadaEspecificação
Operações sobre o ADT Lista Ordenada, utilizando pré- e pós-condições
ImplementaçãoEstática (contígua, deixada como exercício)Dinâmica (encadeada)
![Page 4: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/4.jpg)
4
DefiniçãoDefinição
Uma lista linear ordenada é uma lista linear de nelementos [a1, a2, ..., ai, ..., an]
O primeiro elemento da lista é a1O segundo elemento da lista é a2...O i-ésimo elemento da lista é ai...O último elemento da lista é an
Na qual há uma relação de ordem (<, <=, >, >=) entre os elementos:
Ordem crescente: a1 < a2 < ... < an-1 < an ou a1 <= a2 <= ... <= an-1<= anOrdem decrescente: a1 > a2 > ... > an-1 > an ou a1 >= a2 >= ... >= an-1 >= an
Trataremos de listas em ordem crescente, sem nenhum prejuízo de generalidade
![Page 5: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/5.jpg)
5
EspecificaçãoEspecificação
Operações:CriaçãoDestruiçãoStatusOperações BásicasOutras Operações
![Page 6: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/6.jpg)
6
CriaçãoCriação
OrderedList::OrderedList();pré-condição: nenhumapós-condição: Lista é criada e iniciada como vazia
![Page 7: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/7.jpg)
7
DestruiçãoDestruição
OrderedList::~OrderedList();pré-condição: Lista já tenha sido criadapós-condição: Lista é destruída, liberando espaço ocupado pelo seus elementos
![Page 8: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/8.jpg)
8
StatusStatus
bool OrderedList::Empty();pré-condição: Lista já tenha sido criadapós-condição: função retorna true se a Lista está vazia; false caso contrário
![Page 9: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/9.jpg)
9
StatusStatus
bool OrderedList::Full();pré-condição: Lista já tenha sido criadapós-condição: função retorna true se a Lista está cheia; false caso contrário
![Page 10: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/10.jpg)
10
Operações BásicasOperações Básicas
void OrderedList::Insert(ListEntry x);pré-condição: Lista já tenha sido criada, não está cheiapós-condição: O item x é armazenado em ordem na Lista
O tipo ListEntry depende da aplicação e pode variar
desde um simples caracter ounúmero até uma struct ouclass com muitos campos
![Page 11: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/11.jpg)
11
Operações BásicasOperações Básicas
void OrderedList::Delete(ListEntry x);pré-condição: Lista já tenha sido criada, não está vazia e o item x pertence à listapós-condição: O item x é removido da Lista, mantendo-a ordenada
![Page 12: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/12.jpg)
12
Operações BásicasOperações Básicas
int OrderedList::Search(ListEntry x);pré-condição: Lista já tenha sido criadapós-condição: Retorna a posição p da Lista em que x foi encontrado 1 ≤ p ≤ n, onde né o número de entradas na Lista; caso exista mais de um x na Lista, retorna o primeiro encontrado; retorna zero caso xnão pertença à Lista
![Page 13: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/13.jpg)
13
Outras OperaçõesOutras Operações
void OrderedList::Clear();pré-condição: Lista já tenha sido criadapós-condição: todos os itens da Lista são descartados e ela torna-se uma Lista vazia
![Page 14: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/14.jpg)
14
Outras OperaçõesOutras Operações
int OrderedList::Size();pré-condição: Lista já tenha sido criadapós-condição: função retorna o número de itens na Lista
![Page 15: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/15.jpg)
15
Implementação EncadeadaImplementação Encadeada
Por razões de eficiência, introduziremos uma variável privada nos campos do objeto chamada sentinel, que será alocada no construtor e liberado no destruidorAlém disso, ao invés de iniciarmos
head = NULL; head
![Page 16: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/16.jpg)
16
Implementação EncadeadaImplementação Encadeada
Por razões de eficiência, introduziremos uma variável privada nos campos do objeto chamada sentinel, que será alocada no construtor e liberado no destruidorAlém disso, ao invés de iniciarmos
head = NULL;Utilizaremos:
head = sentinel;
head
sentinel
head
![Page 17: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/17.jpg)
17
Implementação EncadeadaImplementação Encadeada
As entradas de uma lista são colocadas em um estrutura (ListNode) que contém um campo com o valor existente na lista (Entry) e outro campo é um apontador para o próximo elemento na lista (NextNode)
4 8 10
4 8 10
Campo de dados(Entry)
Campo de ligação(NextNode)
Nó(ListNode)
![Page 18: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/18.jpg)
18
Implementação EncadeadaImplementação Encadeada
Nós precisamos armazenar o início da lista...
8
Campo de dados(Entry)
Campo de ligação(NextNode)
Nó(ListNode)
head
Um ponteiro armazenao início da lista
4 10
4 8 10
![Page 19: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/19.jpg)
19
Implementação EncadeadaImplementação Encadeada
Nós precisamos armazenar o início da lista e o sentinela...
8
Campo de dados(Entry)
Campo de ligação(NextNode)
Nó(ListNode)
head
Um ponteiro armazenao elemento sentinela
4 10
4 8 10
sentinel
![Page 20: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/20.jpg)
20
Implementação EncadeadaImplementação Encadeada
...e um contador que indica a quantidade de elementos na lista
8
Campo de dados(Entry)
Campo de ligação(NextNode)
Nó(ListNode)
head
4 10
4 8 10
sentinel
3 count
![Page 21: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/21.jpg)
21
QuestãoQuestão
Utilize estas idéias para escrever uma declaração de tipo que poderia implementar uma lista encadeada. A declaração deve ser um objeto com dois campos de dados
Você tem 5 minutospara escrever a declaração
![Page 22: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/22.jpg)
22
Uma SoluçãoUma Soluçãoclass OrderedList{ public:
OrderedList();~OrderedList();void Insert(int x);void Delete(int x);int Search(int x);bool Empty();bool Full();
private:// declaração de tiposstruct ListNode{ int Entry; // tipo de dado colocado na lista
ListNode *NextNode; // ligação para próximo elemento na lista};typedef ListNode *ListPointer;
// declaração de camposListPointer head, sentinel; // início da lista e sentinelaint count; // número de elementos
};
![Page 23: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/23.jpg)
23
Uma SoluçãoUma Soluçãoclass OrderedList{ public:
OrderedList();~OrderedList();void Insert(int x);void Delete(int x);int Search(int x);bool Empty();bool Full();
private:// declaração de tiposstruct ListNode{ int Entry; // tipo de dado colocado na lista
ListNode *NextNode; // ligação para próximo elemento na lista};typedef ListNode *ListPointer;
// declaração de camposListPointer head, sentinel; // início da lista e sentinelaint count; // número de elementos
};
Observe que o tipoListEntry nesse caso éum inteiro
![Page 24: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/24.jpg)
24
Construtor Construtor
OrderedList::OrderedList()
A Lista deve iniciar vazia, cuja convenção é apontar parao elemento sentinela
head
OrderedList::OrderedList()
{
...
}
sentinel
![Page 25: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/25.jpg)
25
Construtor Construtor
OrderedList::OrderedList()
A Lista deve iniciar vazia, cuja convenção é apontar parao elemento sentinela
head
OrderedList::OrderedList()
{
sentinel = new ListNode;
...
}
sentinel
![Page 26: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/26.jpg)
26
Construtor Construtor
OrderedList::OrderedList()
A Lista deve iniciar vazia, cuja convenção é apontar parao elemento sentinela
head
OrderedList::OrderedList()
{
sentinel = new ListNode;
head = sentinel;
count = 0;
}
sentinel
![Page 27: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/27.jpg)
27
Destruidor Destruidor
OrderedList::~OrderedList()
O destruidor deve retirar todos os elementos da lista enquanto ela não estiver vazia.Lembre-se que atribuir NULL a head não libera o espaço alocado anteriormente eque o elemento sentinela também deve ser liberado!
OrderedList::~OrderedList(){ ListPointer q;
while (head != sentinel){ q = head;
head = head->NextNode;delete q;
}delete sentinel;
}
head4
sentinel
![Page 28: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/28.jpg)
28
Status: Status: EmptyEmpty
bool OrderedList::Empty()
Lembre-se que a lista iniciavazia, com head = sentinel...
bool OrderedList::Empty()
{
return (head == sentinel);
}
head
sentinel
![Page 29: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/29.jpg)
29
Status: Status: FullFull
bool OrderedList::Full()
...e que não há limite quanto ao númeromáximo de elementos da lista
bool OrderedList::Full()
{
return false;
}
head4
sentinel
![Page 30: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/30.jpg)
30
Inserção Após um ElementoInserção Após um Elemento
A inserção de um elemento designado por uma variável ponteiro q que deve ser inserido em uma lista após o elemento apontado por p
p
... ...
q
4 8 10
9
![Page 31: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/31.jpg)
31
Inserção Após um ElementoInserção Após um Elemento
A inserção de um elemento designado por uma variável ponteiro q que deve ser inserido em uma lista após o elemento apontado por p
q->NextNode = p->NextNode;
p
... ...
q
4 8 10
9
![Page 32: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/32.jpg)
32
Inserção Após um ElementoInserção Após um Elemento
A inserção de um elemento designado por uma variável ponteiro q que deve ser inserido em uma lista após o elemento apontado por p
q->NextNode = p->NextNode;p->NextNode = q;
p
... ...
q
4 8 10
9
![Page 33: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/33.jpg)
33
Inserção Antes de um ElementoInserção Antes de um Elemento
A inserção de um elemento x designado por uma variável ponteiro q que deve ser inserido em uma lista antes do elemento apontado por p
p
... ...
q
4 8 10
x 7
![Page 34: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/34.jpg)
34
Inserção Antes de um ElementoInserção Antes de um Elemento
A inserção de um elemento x designado por uma variável ponteiro q que deve ser inserido em uma lista antes do elemento apontado por p
*q = *p;
p
... ...
q
4 8 10
8x 7
![Page 35: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/35.jpg)
35
Inserção Antes de um ElementoInserção Antes de um Elemento
A inserção de um elemento x designado por uma variável ponteiro q que deve ser inserido em uma lista antes do elemento apontado por p
*q = *p;p->Entry = x;
p
... ...
q
4 7 10
8x 7
![Page 36: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/36.jpg)
36
Inserção Antes de um ElementoInserção Antes de um Elemento
A inserção de um elemento x designado por uma variável ponteiro q que deve ser inserido em uma lista antes do elemento apontado por p
*q = *p;p->Entry = x;p->NextNode = q;
p
... ...
q
4 7 10
8x 7
![Page 37: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/37.jpg)
37
Operações Básicas: Operações Básicas: InsertInsert
Entretanto, se a inserção ocorrer no sentinela (no início...
p
7
sentinel
head
q
![Page 38: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/38.jpg)
38
Operações Básicas: Operações Básicas: InsertInsert
Entretanto, se a inserção ocorrer no sentinela (no início...
p->NextNode = q;
p
7
sentinel
head
q
![Page 39: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/39.jpg)
39
Operações Básicas: Operações Básicas: InsertInsert
Entretanto, se a inserção ocorrer no sentinela (no início...
p->NextNode = q;sentinel = q;
p
7head
q
sentinel
![Page 40: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/40.jpg)
40
Operações Básicas: Operações Básicas: InsertInsert
Entretanto, se a inserção ocorrer no sentinela (no início ou no fim)
p->NextNode = q;sentinel = q;
p
4 8 10
sentinel
head
12
q
![Page 41: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/41.jpg)
41
Operações Básicas: Operações Básicas: InsertInsert
Entretanto, se a inserção ocorrer no sentinela (no início ou no fim)
p->NextNode = q;sentinel = q;
p
4 8 10
sentinel
head
12
q
![Page 42: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/42.jpg)
42
Operações Básicas: Operações Básicas: InsertInsert
Entretanto, se a inserção ocorrer no sentinela (no início ou no fim)
p->NextNode = q;sentinel = q;
p
4 8 10head
12
q
sentinel
![Page 43: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/43.jpg)
43
Ponto de InserçãoPonto de Inserção
Para encontrarmos a posição onde um novo elemento xdeve ser inserido é simples, com o uso de sentinela
4 8 10
x 7
sentinel
head
![Page 44: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/44.jpg)
44
Ponto de InserçãoPonto de Inserção
Para encontrarmos a posição onde um novo elemento xdeve ser inserido é simples, com o uso de sentinela
sentinel->Entry = x;
4 8 10
x 7
sentinel
head
7
![Page 45: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/45.jpg)
45
Ponto de InserçãoPonto de Inserção
Para encontrarmos a posição onde um novo elemento xdeve ser inserido é simples, com o uso de sentinela
sentinel->Entry = x;p = head;
4 8 10
x 7
sentinel
head
p
7
![Page 46: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/46.jpg)
46
Ponto de InserçãoPonto de Inserção
Para encontrarmos a posição onde um novo elemento xdeve ser inserido é simples, com o uso de sentinela
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
p
4 8 10
x 7
sentinel
head
7
![Page 47: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/47.jpg)
47
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maior do que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
x 7
sentinel
head
![Page 48: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/48.jpg)
48
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maior do que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
7
x 7
sentinel
head
![Page 49: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/49.jpg)
49
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maior do que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
p
7
x 7
sentinel
head
![Page 50: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/50.jpg)
50
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maiordo que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
4 8 10
x 12
sentinel
head
![Page 51: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/51.jpg)
51
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maiordo que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
4 8 10
x 12
sentinel
head
12
![Page 52: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/52.jpg)
52
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maiordo que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
4 8 10
x 12
sentinel
head
12
p
![Page 53: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/53.jpg)
53
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maiordo que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
p
4 8 10
x 12
sentinel
head
12
![Page 54: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/54.jpg)
54
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maiordo que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
4 8 10
x 12
sentinel
head
12
p
![Page 55: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/55.jpg)
55
Ponto de InserçãoPonto de Inserção
Note que o fragmento de código encontra o sentinela se a lista estiver vazia ou o número inserido tem valor maiordo que qualquer outro elemento da lista ordenada
sentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
4 8 10
x 12
sentinel
head
12
p
![Page 56: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/56.jpg)
56
Operações Básicas: Operações Básicas: InsertInsert
void OrderedList::Insert(int x){ ListPointer p, q;
// Buscar local de inserçãosentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
q = new ListNode;if(q == NULL){ cout << “Memória insuficiente”;abort();
}
if(p == sentinel){ p->NextNode = q;
sentinel = q;}else{ *q = *p;
p->Entry = x;p->NextNode = q;
}count++;
}
![Page 57: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/57.jpg)
57
Operações Básicas: Operações Básicas: DeleteDelete
Diferentemente da estratégia adotada na inserção, na qual apenas um ponteiro percorre a lista ordenada até encontrar o ponto de inserção, a operação de remoção requer o percurso na lista ordenada com dois ponteirosSeja p um ponteiro que fica sempre uma posição atrás do ponteiro q na lista ordenadaApós encontrar os dois ponteiros p e q é trivial remover um elemento (ou mesmo inserir, deixado como exercício)
![Page 58: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/58.jpg)
58
Exemplo: Dois Ponteiros e Busca Exemplo: Dois Ponteiros e Busca do Elemento x=9do Elemento x=9
q
O ponteiro p fica sempre uma posição atrás de q
8head
4 10
sentinel
p
![Page 59: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/59.jpg)
59
Exemplo: Dois Ponteiros e Busca Exemplo: Dois Ponteiros e Busca do Elemento x=9do Elemento x=9
q
8head
4 10
sentinel
p
9
O ponteiro p fica sempre uma posição atrás de q
![Page 60: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/60.jpg)
60
Exemplo: Dois Ponteiros e Busca Exemplo: Dois Ponteiros e Busca do Elemento x=9do Elemento x=9
q
8head
4 10
sentinel
p
9
O ponteiro p fica sempre uma posição atrás de q
![Page 61: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/61.jpg)
61
Exemplo: Dois Ponteiros e Busca Exemplo: Dois Ponteiros e Busca do Elemento x=9do Elemento x=9
q
8head
4 10
sentinel
p
9
O ponteiro p fica sempre uma posição atrás de q
![Page 62: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/62.jpg)
62
Operações Básicas: Operações Básicas: DeleteDelete
Uma vez encontrados o ponteiro q(elemento a ser removido) e p o ponteiro para o nó precedente
p
... ...
q
![Page 63: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/63.jpg)
63
Operações Básicas: Operações Básicas: DeleteDelete
Uma vez encontrados o ponteiro q(elemento a ser removido) e p o ponteiro para o nó precedente
p->NextNode = q->NextNode;...
p
... ...
q
![Page 64: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/64.jpg)
64
Operações Básicas: Operações Básicas: DeleteDelete
Uma vez encontrados o ponteiro q(elemento a ser removido) e p o ponteiro para o nó precedente
p->NextNode = q->NextNode;delete q;
p
... ...
q
![Page 65: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/65.jpg)
65
Operações Básicas: Operações Básicas: DeleteDelete
Entretanto, se a remoção ocorrer no início da lista
head
...
qp
![Page 66: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/66.jpg)
66
Operações Básicas: Operações Básicas: DeleteDelete
Entretanto, se a remoção ocorrer no início da lista
head = q->NextNode;
head
...
qp
![Page 67: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/67.jpg)
67
Operações Básicas: Operações Básicas: DeleteDelete
Entretanto, se a remoção ocorrer no início da lista
head = q->NextNode;delete q;
head
...
qp
![Page 68: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/68.jpg)
68
Operações Básicas: Operações Básicas: DeleteDelete
void OrderedList::Delete(int x){ ListPointer p=NULL, q=head;
// Buscar local de remoçãosentinel->Entry = x;while(q->Entry < x){ p = q;
q = q->NextNode;}
// Encontrou x?if (q->Entry != x || q == sentinel){ cout << “Elemento inexistente”;abort();
}
// Local de remoçãoif(q == head) head = q->NextNode;
elsep->NextNode = q->NextNode;
delete q;count = count - 1;
}
![Page 69: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/69.jpg)
69
Operações Básicas: Operações Básicas: SearchSearch
A operação de busca é simples, considerando o uso de sentinela, como no caso da inserçãoO elemento x a ser pesquisado deve ser colocado no campo de dados do sentinelaA busca do elemento x dá-se do início da lista ordenada e prossegue até que um elemento maior ou igual a x seja encontradoHá três situações possíveis
(i) Um elemento maior do que x foi encontrado, mas não igual a x(ii) Elemento x foi encontrado como sendo sentinela(iii) Elemento x foi encontrado como parte da lista
Somente no último caso considera-se que o elemento de pesquisa x foi encontrado na lista ordenada
![Page 70: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/70.jpg)
70
Operações Básicas: Operações Básicas: SearchSearch(i) Um elemento maior do que (i) Um elemento maior do que xx foi encontrado, mas foi encontrado, mas não igual a não igual a xx
q
8head
4 10
sentinel
7
x 7A busca continua enquanto o
elemento atual < x
![Page 71: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/71.jpg)
71
Operações Básicas: Operações Básicas: SearchSearch(i) Um elemento maior do que (i) Um elemento maior do que xx foi encontrado, mas foi encontrado, mas não igual a não igual a xx
q
8head
4 10
sentinel
7
x 7A busca continua enquanto o
elemento atual < x
Note que um elemento maior do que x foi
encontrado, mas não igual a x.
Neste caso, a busca não teve sucesso.
![Page 72: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/72.jpg)
72
Operações Básicas: Operações Básicas: SearchSearch(ii) Elemento (ii) Elemento xx encontrado como sentinelaencontrado como sentinela
q
8head
4 10
sentinel
12
x 12A busca continua enquanto o
elemento atual < x
![Page 73: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/73.jpg)
73
Operações Básicas: Operações Básicas: SearchSearch(ii) Elemento (ii) Elemento xx encontrado como sentinelaencontrado como sentinela
q
8head
4 10
sentinel
12
x 12A busca continua enquanto o
elemento atual < x
![Page 74: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/74.jpg)
74
Operações Básicas: Operações Básicas: SearchSearch(ii) Elemento (ii) Elemento xx encontrado como sentinelaencontrado como sentinela
q
8head
4 10
sentinel
12
x 12A busca continua enquanto o
elemento atual < x
![Page 75: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/75.jpg)
75
Operações Básicas: Operações Básicas: SearchSearch(ii) Elemento (ii) Elemento xx encontrado como sentinelaencontrado como sentinela
sentinel
8head
4 10
q
x 12A busca continua enquanto o
elemento atual < x
Note que um elemento igual a x foi
encontrado, mas é o sentinela.
Neste caso, a busca não teve sucesso.
12
![Page 76: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/76.jpg)
76
Operações Básicas: Operações Básicas: SearchSearch(iii) Elemento (iii) Elemento xx encontrado como parte da listaencontrado como parte da lista
q
8head
4 10
sentinel
8
x 8A busca continua enquanto o
elemento atual < x
![Page 77: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/77.jpg)
77
Operações Básicas: Operações Básicas: SearchSearch(iii) Elemento (iii) Elemento xx encontrado como parte da listaencontrado como parte da lista
q
8head
4 10
sentinel
8
x 8A busca continua enquanto o
elemento atual < x
Note que um elemento igual a x foi encontrado
e não é o sentinela.Neste caso, a busca
teve sucesso!
![Page 78: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/78.jpg)
78
Operações Básicas: Operações Básicas: SearchSearch
int OrderedList::Search(int x){ int posicao=1;ListPointer q=head;
sentinel->Entry = x;while (q->Entry < x) { q = q->NextNode;
posicao++;}
if (q->Entry != x || q == sentinel)return 0;
elsereturn posicao;
}
![Page 79: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/79.jpg)
79
Busca com InserçãoBusca com Inserção
Em muitos problemas é interessante considerar a situação em que se um elemento não se encontra na lista então ele deve ser inserido; caso contrário, um contador deve ser atualizadoUm exemplo típico é a contagem do número de palavras em um textoPara tanto, nossa estrutura de dados será estendida para a seguinte definição
struct ListNode{ string Entry; // chave
int count; // contadorListNode *NextNode;
};
![Page 80: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/80.jpg)
80
Busca com InserçãoBusca com Inserçãovoid OrderedList::SearchInsert(int x){ ListPointer p, q;
// Buscar elemento ou local de inserçãosentinel->Entry = x;p = head;while(p->Entry < x)
p = p->NextNode;
if(p != sentinel && p->Entry == x)p->count++; // encontrou
else{ // não encontrou, inserir
q = new ListNode;if(q == NULL){ cout << “Memória insuficiente”;
abort();}
if(p == sentinel){ p->NextNode = q;
sentinel = q;}else{ *q = *p;
p->Entry = x;p->NextNode = q;
}p->count = 1;count++;
}}
![Page 81: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/81.jpg)
81
ExercíciosExercícios
Implemente as demais operações em listas
Clear()Size()
![Page 82: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/82.jpg)
82
Solução Solução ClearClear//SizeSize
Note que o código é diferente do destruidor, já que o sentinela deve permanecer
void OrderedList::Clear(){ ListPointer q;
while (head != sentinel){ q = head;
head = head->NextNode;delete q;
}count = 0;
}
int OrderedList::Size(){
return count;}
![Page 83: Listas Lineares Ordenadas - DCMdcm.ffclrp.usp.br/~augusto/teaching/aedi/AED-I-Listas-Ordenadas.pdf · Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre](https://reader034.fdocumentos.com/reader034/viewer/2022042810/5f992d14476c2625602ca211/html5/thumbnails/83.jpg)
83
Considerações FinaisConsiderações Finais
A maior parte das operações em listas encadeadas de tamanho n (ordenadas ou não) tem tempo O(1)
Busca, inserção ou remoção têm tempo O(n) com ou sem uso de sentinelas
Veremos nas próximas aulas estruturas de dados não lineares, as árvores, que possuem características que permitem melhorar os tempos de busca, inserção ou remoção