SlideShare uma empresa Scribd logo
1 de 48
INE5408
Estruturas de Dados
Estruturas de Dados básicas
utilizando Vetores
- Listas
Lista - Definição
Uma Lista é um conjunto de dados
dispostos e / ou acessáveis em uma
seqüência determinada.
– Este conjunto de dados pode possuir uma
ordem intrínseca (Lista Ordenada) ou não;
– este conjunto de dados pode ocupar
espaços de memória fisicamente
consecutivos, espelhando a sua ordem, ou
não;
– se os dados estiverem dispersos
fisicamente, para que este conjunto seja
uma lista, ele deve possuir operações e
informações adicionais que permitam que
seja tratado como tal (Lista Encadeada).
Vimos dois aspectos
Em um projeto de software, dois aspectos
devem ser considerados:
• de que forma estão organizados os dados,
qual a sua estrutura;
• quais procedimentos atuam sobre estes
dados, que operações podem ser realizadas
sobre eles.
• Vamos ver agora estes aspectos para as
listas.
Listas • A Lista é uma estrutura de dados
cujo funcionamento é inspirado
no de uma lista “natural”.
20
55
4
12
89
24
89
55
24
20
12
4 • Uma lista pode ser ordenada ou
não:
• quando for ordenada, pode o ser por
alguma característica intrínseca dos
dados (ex: ordem alfabética);
• pode também refletir a ordem
cronológica (ordem de inserção) dos
dados;
• em Smalltalk, a OrderedCollection é
uma lista cronológica (add:), a
SortedCollection é uma lista ordenada
por um critério interno.
Listas usando Vetores
-1
0
1
2
3
4
5
Lista
cheia
Lista
vazia
20
55
4
12
89
24
• Vetores possuem um espaço
limitado para o
armazenamento de dados;
• necessitamos definir um
espaço grande o suficiente
para a lista;
• necessitamos de um
indicador de qual elemento
do vetor é o atual último
elemento da lista.
Modelagem de Listas utilizando Programação
Estruturada
• Modelaremos a Estrutura de Dados Lista
utilizando a técnica da Programação
Orientada a Objeto, armazenando os dados
em um Vetor (Array).
– Veremos somente algoritmos;
– veremos algoritmos tanto para uma lista
cronológica quanto para uma lista ordenada.
• Procedimento Didático:
– modelagem da Lista e de seus algoritmos usando
Orientação a Objetos;
– exercícios.
Modelagem da Lista
• Aspecto Estrutural:
– necessitamos de um vetor para armazenar as informações;
– necessitamos de um indicador da posição atual do último
elemento da lista;
– necessitamos de uma constante que nos diga quando a lista
está cheia e duas outras para codificar erros.
• Pseudo-código:
constantes MAXLISTA = 100;
classe Lista {
inteiro dados[MAXLISTA];
inteiro último;
};
Modelagem da Lista
• Aspecto Funcional:
– colocar e retirar dados da lista;
– testar se a lista está vazia ou cheia (dentre
outros testes);
– inicializar a lista e garantir a ordem de seus
elementos.
Modelagem da Lista
• Operações: adicionar e retirar dados da lista
– Adiciona(dado)
– AdicionaNoInício(dado)
– AdicionaNaPosição(dado, posição)
– AdicionaEmOrdem(dado)
– Retira()
– RetiraDoInício()
– RetiraDaPosição(posição)
– RetiraEspecífico(dado)
Modelagem da Lista
• Operações: testar a lista
–ListaCheia
–ListaVazia
–Posição(dado)
–Contém(dado)
–Igual(dado1, dado2)
–Maior(dado1, dado2)
–Menor(dado1, dado2)
Modelagem da Lista
• Operações: inicializar ou limpar a lista
–InicializaLista
–DestróiLista
Construtor Lista
Lista()
início
último <- -1;
fim;
Algoritmo DestróiLista
MÉTODO destróiLista()
início
último <- -1;
fim;
Observação: este algoritmo parece redundante.
Colocar a sua semântica em separado da
inicialização, porém, é importante. Mais tarde
veremos que, utilizando alocação dinâmica de
memória, possuir um destrutor para Lista é muito
importante.
Algoritmo ListaCheia
Booleano MÉTODO listaCheia()
início
SE (último = MAXLISTA - 1) ENTÃO
RETORNE(Verdadeiro)
SENÃO
RETORNE(Falso);
fim;
Algoritmo ListaVazia
Booleano MÉTODO listaVazia()
início
SE (último = -1) ENTÃO
RETORNE(Verdadeiro)
SENÃO
RETORNE(Falso);
fim;
Algoritmo Adiciona
• Procedimento:
– testamos se há espaço;
– incrementamos o último;
– adicionamos o novo dado.
• Parâmetros:
– o dado a ser inserido;
4
5
20
55
4
12
89
24
Algoritmo Adiciona
Constantes
ERROLISTACHEIA = -1;
ERROLISTAVAZIA = -2;
ERROPOSIÇÃO = -3;
Inteiro MÉTODO adiciona(inteiro dado)
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
último <- último + 1;
dados[último] <- dado;
RETORNE(último);
FIM SE
fim;
Algoritmo Retira
• Procedimento:
– testamos se há elementos;
– decrementamos o último;
– devolvemos o último elemento.
Algoritmo Retira
Inteiro MÉTODO retira()
início
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último – 1;
RETORNE(dados[último + 1]);
FIM SE
fim;
Observação: note que aqui se aplicam as mesmas restrições
das diversas variantes do algoritmo desempilha.
Algoritmo AdicionaNoInício
• Procedimento:
– testamos se há espaço;
– incrementamos o último;
– empurramos tudo para
trás;
– adicionamos o novo dado
na primeira posição.
• Parâmetros:
– o dado a ser inserido;
4
55
4
12
89
24 5
55
4
12
89
24
20
Algoritmo AdicionaNoInício
Inteiro MÉTODO adicionaNoInício(inteiro dado)
variáveis
inteiro posição; //Variável auxiliar para “caminhar”
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
último <- último + 1;
posição <- último;
ENQUANTO (posição > 0) FAÇA
//Empurrar tudo para trás
dados[posição] <-
aLista.dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[0] <- dado;
RETORNE(0);
FIM SE
fim;
Algoritmo AdicionaNoInício
Inteiro MÉTODO adicionaNoInício(inteiro dado)
variáveis
inteiro posição; //Variável auxiliar para “caminhar”
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
último <- último + 1;
posição <- último;
ENQUANTO (posição > 0) FAÇA
//Empurrar tudo para trás
dados[posição] <-
aLista.dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[0] <- dado;
RETORNE(0);
FIM SE
fim;
Algoritmo AdicionaNoInício
Inteiro MÉTODO adicionaNoInício(inteiro dado)
variáveis
inteiro posição; //Variável auxiliar para “caminhar”
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
último <- último + 1;
posição <- último;
ENQUANTO (posição > 0) FAÇA
//Empurrar tudo para trás
dados[posição] <-
aLista.dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[0] <- dado;
RETORNE(0);
FIM SE
fim;
Algoritmo AdicionaNoInício
Inteiro MÉTODO adicionaNoInício(inteiro dado)
variáveis
inteiro posição; //Variável auxiliar para “caminhar”
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
último <- último + 1;
posição <- último;
ENQUANTO (posição > 0) FAÇA
//Empurrar tudo para trás
dados[posição] <-
aLista.dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[0] <- dado;
RETORNE(0);
FIM SE
fim;
Algoritmo RetiraDoInício
• Procedimento:
– testamos se há elementos;
– decrementamos o último;
– salvamos o primeiro
elemento;
– empurramos tudo para a
frente.
5
4
20
55
4
12
89
24
55
4
12
89
24 20
Algoritmo RetiraDoInício
Inteiro MÉTODO retiraDoInício()
variáveis
inteiro posição, valor;
início
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[0];
posição <- 0;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para a frente
dados[posição] <-
aLista.dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
fim;
Algoritmo RetiraDoInício
Inteiro MÉTODO retiraDoInício()
variáveis
inteiro posição, valor;
início
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[0];
posição <- 0;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para a frente
dados[posição] <-
aLista.dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
fim;
Algoritmo RetiraDoInício
Inteiro MÉTODO retiraDoInício()
variáveis
inteiro posição, valor;
início
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[0];
posição <- 0;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para a frente
dados[posição] <-
aLista.dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
fim;
Algoritmo RetiraDoInício
Inteiro MÉTODO retiraDoInício()
variáveis
inteiro posição, valor;
início
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[0];
posição <- 0;
ENQUANTO (posição <= aLista.último) FAÇA
//Empurrar tudo para a frente
dados[posição] <-
aLista.dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
fim;
Algoritmo AdicionaNaPosição
• Procedimento:
– testamos se há espaço e se a posição existe;
– incrementamos o último;
– empurramos tudo para trás a partir da posição;
– adicionamos o novo dado na posição informada.
• Parâmetros:
– o dado a ser inserido;
– a posição onde inserir;
Algoritmo AdicionaNaPosição
Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino)
variáveis
inteiro posição;
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
SE (destino > último + 1 OU destino < 0) ENTÃO
RETORNE(ERROPOSIÇÃO);
FIM SE
último <- último + 1;
posição <- último;
ENQUANTO (posição > destino) FAÇA
//Empurrar tudo para trás
dados[posição] <-
aLista.dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[destino] <- dado;
RETORNE(aonde);
FIM SE
fim;
Algoritmo AdicionaNaPosição
Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino)
variáveis
inteiro posição;
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
SE (destino > último + 1 OU destino < 0) ENTÃO
RETORNE(ERROPOSIÇÃO);
FIM SE
último <- último + 1;
posição <- último;
ENQUANTO (posição > destino) FAÇA
//Empurrar tudo para trás
dados[posição] <-
dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[destino] <- dado;
RETORNE(aonde);
FIM SE
fim;
Algoritmo AdicionaNaPosição
Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino)
variáveis
inteiro posição;
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
SE (destino > último + 1 OU destino < 0) ENTÃO
RETORNE(ERROPOSIÇÃO);
FIM SE
último <- último + 1;
posição <- último;
ENQUANTO (posição > destino) FAÇA
//Empurrar tudo para trás
dados[posição] <-
dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[destino] <- dado;
RETORNE(aonde);
FIM SE
fim;
Algoritmo AdicionaNaPosição
Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino)
variáveis
inteiro posição;
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
SE (destino > último + 1 OU destino < 0) ENTÃO
RETORNE(ERROPOSIÇÃO);
FIM SE
último <- último + 1;
posição <- último;
ENQUANTO (posição > destino) FAÇA
//Empurrar tudo para trás
dados[posição] <-
dados[posição - 1];
posição <- posição - 1;
FIM ENQUANTO
dados[destino] <- dado;
RETORNE(aonde);
FIM SE
fim;
Algoritmo RetiraDaPosição
• Procedimento:
– testamos se há elementos e se a posição
existe;
– decrementamos o último;
– salvamos elemento na posição;
– empurramos tudo para frente até posição.
• Parâmetros:
– o dado a ser inserido;
– a posição onde inserir;
Algoritmo RetiraDaPosição
Inteiro MÉTODO retiraDaPosição(inteiro fonte)
variáveis
inteiro posição, valor;
início
SE (fonte > último OU fonte < 0) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[fonte];
posição <- fonte;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para frente
dados[posição] <-
dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
FIM SE
fim;
Algoritmo RetiraDaPosição
Inteiro MÉTODO retiraDaPosição(inteiro fonte)
variáveis
inteiro posição, valor;
início
SE (fonte > último OU fonte < 0) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[fonte];
posição <- fonte;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para frente
dados[posição] <-
dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
FIM SE
fim;
Algoritmo RetiraDaPosição
Inteiro MÉTODO retiraDaPosição(inteiro fonte)
variáveis
inteiro posição, valor;
início
SE (fonte > último OU fonte < 0) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[fonte];
posição <- fonte;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para frente
dados[posição] <-
dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
FIM SE
fim;
Algoritmo RetiraDaPosição
Inteiro MÉTODO retiraDaPosição(inteiro fonte)
variáveis
inteiro posição, valor;
início
SE (fonte > último OU fonte < 0) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[fonte];
posição <- fonte;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para frente
dados[posição] <-
dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
FIM SE
fim;
Algoritmo RetiraDaPosição
Inteiro MÉTODO retiraDaPosição(inteiro fonte)
variáveis
inteiro posição, valor;
início
SE (fonte > último OU fonte < 0) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
último <- último - 1;
valor <- dados[fonte];
posição <- fonte;
ENQUANTO (posição <= último) FAÇA
//Empurrar tudo para frente
dados[posição] <-
dados[posição + 1];
posição <- posição + 1;
FIM ENQUANTO
RETORNE(valor);
FIM SE
FIM SE
fim;
Algoritmo AdicionaEmOrdem
• Procedimento:
– necessitamos de uma função para
comparar os dados (maior);
– testamos se há espaço;
– procuramos pela posição onde inserir
comparando dados;
– chamamos adicionaNaPosição.
• Parâmetros:
– o dado a ser inserido;
Algoritmo Maior
Booleano MÉTODO maior(inteiro dado1, inteiro dado2)
início
SE (dado1 > dado2) ENTÃO
RETORNE(Verdadeiro)
SENÃO
RETORNE(Falso);
FIM SE
fim;
Observação: quando o dado a ser armazenado em uma lista for
algo mais complexo do que um inteiro, a comparação de
precedência não será mais tão simples (ex.: Empregado1 >
Empregado2) e será resultado de um conjunto mais complexo
de operações.
Para deixar os algoritmos de operações sobre lista
independentes do tipo de dado específico armazenado na lista,
usamos uma função deste tipo.
Algoritmo AdicionaEmOrdem
Inteiro MÉTODO adicionaEmOrdem(inteiro dado)
variáveis
inteiro posição; //Variável auxiliar para “caminhar”
início
SE (listaCheia) ENTÃO
RETORNE(ERROLISTACHEIA)
SENÃO
posição <- 0;
ENQUANTO (posição <= último E
maior(dado, dados[posição])) FAÇA
//Encontrar posição para inserir
posição <- posição + 1;
FIM ENQUANTO
RETORNE(adicionaNaPosição(dado, posição));
FIM SE
fim;
Algoritmo RetiraEspecífico
• Retira um dado específico da lista.
• Procedimento:
– testamos se há elementos;
– testamos se o dado existe e qual sua
posição;
– necessitamos de uma função
Posição(dado);
– chamamos RetiraDaPosição.
• Parâmetros:
– o dado a ser retirado;
Algoritmo Posição
Inteiro MÉTODO posição(inteiro dado)
variáveis
inteiro posição;
início
posição <- 0;
ENQUANTO (posição <= último E
NÃO(IGUAL(dado, dados[posição]))) FAÇA
posição <- posição + 1;
FIM ENQUANTO
SE (posição > último) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
RETORNE(posição);
FIM SE
fim;
Algoritmo RetiraEspecífico
Inteiro MÉTODO retiraEspecífico(inteiro dado)
variáveis
inteiro posição;
início
SE (listaVazia) ENTÃO
RETORNE(ERROLISTAVAZIA)
SENÃO
posição <- posição(dado);
SE (posição < 0) ENTÃO
RETORNE(ERROPOSIÇÃO)
SENÃO
RETORNE(retiraDaPosição(posição));
FIM SE
FIM SE
fim;
Algoritmos Restantes
• As seguintes funções ficam por conta do
aluno :
– booleano Contém(dado)
– booleano Igual(dado1, dado2)
– booleano Menor(dado1, dado2)
Exercício de Implementação 3
Implemente uma lista em um vetor utilizando a
linguagem de programação “C++” com Orientação a
Objeto.
– Crie uma classe Lista;
– esta deverá ser uma lista de elementos da classe Agenda;
– A classe Agenda representa um nome de 30 posições e um
número de telefone;
– crie um método maior(a,b) que compare os nomes de duas
entradas;
– programe todos os métodos documentando cada método,
inclusive com dicionário de dados;
– crie um programa principal que execute todas os métodos de
lista a partir de um menu. O método procurar específico
deverá basear-se no nome em uma Agenda;
– além destes métodos, o programa deverá ser capaz de listar
a lista em ordem alfabética.

Mais conteúdo relacionado

Semelhante a Estruturas de Dados básicas utilizando Vetores

Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Javadanrleywillian1
 
7082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-201809037082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-20180903Ademar Trindade
 
Estruturas de Dados - Listas Encadeadas (Linked List)
Estruturas de Dados - Listas Encadeadas (Linked List)Estruturas de Dados - Listas Encadeadas (Linked List)
Estruturas de Dados - Listas Encadeadas (Linked List)Erick Petrucelli
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Eduardo S. Pereira
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binariaRicardo Bolanho
 
Programando em python listas
Programando em python   listasProgramando em python   listas
Programando em python listassamuelthiago
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteirosRobson Eduardo
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?pmatiello
 

Semelhante a Estruturas de Dados básicas utilizando Vetores (20)

Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Java
 
Array list
Array listArray list
Array list
 
Array List
Array ListArray List
Array List
 
7082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-201809037082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-20180903
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estruturas de Dados - Listas Encadeadas (Linked List)
Estruturas de Dados - Listas Encadeadas (Linked List)Estruturas de Dados - Listas Encadeadas (Linked List)
Estruturas de Dados - Listas Encadeadas (Linked List)
 
05 listas
05 listas05 listas
05 listas
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula 11
Aula 11Aula 11
Aula 11
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
 
Programando em python listas
Programando em python   listasProgramando em python   listas
Programando em python listas
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
 
Java Coleções
Java ColeçõesJava Coleções
Java Coleções
 
PHP 5.3 - Arrays
PHP 5.3 - ArraysPHP 5.3 - Arrays
PHP 5.3 - Arrays
 
Capítulo 6
Capítulo 6Capítulo 6
Capítulo 6
 
8 collections-i
8 collections-i8 collections-i
8 collections-i
 

Mais de ssuserd654cb1

Aula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptxAula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptxssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptssuserd654cb1
 
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.pptAula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptssuserd654cb1
 
Aula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.pptAula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptssuserd654cb1
 
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptAula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptAula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptssuserd654cb1
 
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.pptAula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.pptssuserd654cb1
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptssuserd654cb1
 

Mais de ssuserd654cb1 (13)

Aula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptxAula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptx
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
 
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.pptAula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
 
Aula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.pptAula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
 
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptAula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptAula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
 
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.pptAula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
 

Estruturas de Dados básicas utilizando Vetores

  • 1. INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas
  • 2. Lista - Definição Uma Lista é um conjunto de dados dispostos e / ou acessáveis em uma seqüência determinada. – Este conjunto de dados pode possuir uma ordem intrínseca (Lista Ordenada) ou não; – este conjunto de dados pode ocupar espaços de memória fisicamente consecutivos, espelhando a sua ordem, ou não; – se os dados estiverem dispersos fisicamente, para que este conjunto seja uma lista, ele deve possuir operações e informações adicionais que permitam que seja tratado como tal (Lista Encadeada).
  • 3. Vimos dois aspectos Em um projeto de software, dois aspectos devem ser considerados: • de que forma estão organizados os dados, qual a sua estrutura; • quais procedimentos atuam sobre estes dados, que operações podem ser realizadas sobre eles. • Vamos ver agora estes aspectos para as listas.
  • 4. Listas • A Lista é uma estrutura de dados cujo funcionamento é inspirado no de uma lista “natural”. 20 55 4 12 89 24 89 55 24 20 12 4 • Uma lista pode ser ordenada ou não: • quando for ordenada, pode o ser por alguma característica intrínseca dos dados (ex: ordem alfabética); • pode também refletir a ordem cronológica (ordem de inserção) dos dados; • em Smalltalk, a OrderedCollection é uma lista cronológica (add:), a SortedCollection é uma lista ordenada por um critério interno.
  • 5. Listas usando Vetores -1 0 1 2 3 4 5 Lista cheia Lista vazia 20 55 4 12 89 24 • Vetores possuem um espaço limitado para o armazenamento de dados; • necessitamos definir um espaço grande o suficiente para a lista; • necessitamos de um indicador de qual elemento do vetor é o atual último elemento da lista.
  • 6. Modelagem de Listas utilizando Programação Estruturada • Modelaremos a Estrutura de Dados Lista utilizando a técnica da Programação Orientada a Objeto, armazenando os dados em um Vetor (Array). – Veremos somente algoritmos; – veremos algoritmos tanto para uma lista cronológica quanto para uma lista ordenada. • Procedimento Didático: – modelagem da Lista e de seus algoritmos usando Orientação a Objetos; – exercícios.
  • 7. Modelagem da Lista • Aspecto Estrutural: – necessitamos de um vetor para armazenar as informações; – necessitamos de um indicador da posição atual do último elemento da lista; – necessitamos de uma constante que nos diga quando a lista está cheia e duas outras para codificar erros. • Pseudo-código: constantes MAXLISTA = 100; classe Lista { inteiro dados[MAXLISTA]; inteiro último; };
  • 8. Modelagem da Lista • Aspecto Funcional: – colocar e retirar dados da lista; – testar se a lista está vazia ou cheia (dentre outros testes); – inicializar a lista e garantir a ordem de seus elementos.
  • 9. Modelagem da Lista • Operações: adicionar e retirar dados da lista – Adiciona(dado) – AdicionaNoInício(dado) – AdicionaNaPosição(dado, posição) – AdicionaEmOrdem(dado) – Retira() – RetiraDoInício() – RetiraDaPosição(posição) – RetiraEspecífico(dado)
  • 10. Modelagem da Lista • Operações: testar a lista –ListaCheia –ListaVazia –Posição(dado) –Contém(dado) –Igual(dado1, dado2) –Maior(dado1, dado2) –Menor(dado1, dado2)
  • 11. Modelagem da Lista • Operações: inicializar ou limpar a lista –InicializaLista –DestróiLista
  • 13. Algoritmo DestróiLista MÉTODO destróiLista() início último <- -1; fim; Observação: este algoritmo parece redundante. Colocar a sua semântica em separado da inicialização, porém, é importante. Mais tarde veremos que, utilizando alocação dinâmica de memória, possuir um destrutor para Lista é muito importante.
  • 14. Algoritmo ListaCheia Booleano MÉTODO listaCheia() início SE (último = MAXLISTA - 1) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;
  • 15. Algoritmo ListaVazia Booleano MÉTODO listaVazia() início SE (último = -1) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;
  • 16. Algoritmo Adiciona • Procedimento: – testamos se há espaço; – incrementamos o último; – adicionamos o novo dado. • Parâmetros: – o dado a ser inserido; 4 5 20 55 4 12 89 24
  • 17. Algoritmo Adiciona Constantes ERROLISTACHEIA = -1; ERROLISTAVAZIA = -2; ERROPOSIÇÃO = -3; Inteiro MÉTODO adiciona(inteiro dado) início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO último <- último + 1; dados[último] <- dado; RETORNE(último); FIM SE fim;
  • 18. Algoritmo Retira • Procedimento: – testamos se há elementos; – decrementamos o último; – devolvemos o último elemento.
  • 19. Algoritmo Retira Inteiro MÉTODO retira() início SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último – 1; RETORNE(dados[último + 1]); FIM SE fim; Observação: note que aqui se aplicam as mesmas restrições das diversas variantes do algoritmo desempilha.
  • 20. Algoritmo AdicionaNoInício • Procedimento: – testamos se há espaço; – incrementamos o último; – empurramos tudo para trás; – adicionamos o novo dado na primeira posição. • Parâmetros: – o dado a ser inserido; 4 55 4 12 89 24 5 55 4 12 89 24 20
  • 21. Algoritmo AdicionaNoInício Inteiro MÉTODO adicionaNoInício(inteiro dado) variáveis inteiro posição; //Variável auxiliar para “caminhar” início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO último <- último + 1; posição <- último; ENQUANTO (posição > 0) FAÇA //Empurrar tudo para trás dados[posição] <- aLista.dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[0] <- dado; RETORNE(0); FIM SE fim;
  • 22. Algoritmo AdicionaNoInício Inteiro MÉTODO adicionaNoInício(inteiro dado) variáveis inteiro posição; //Variável auxiliar para “caminhar” início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO último <- último + 1; posição <- último; ENQUANTO (posição > 0) FAÇA //Empurrar tudo para trás dados[posição] <- aLista.dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[0] <- dado; RETORNE(0); FIM SE fim;
  • 23. Algoritmo AdicionaNoInício Inteiro MÉTODO adicionaNoInício(inteiro dado) variáveis inteiro posição; //Variável auxiliar para “caminhar” início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO último <- último + 1; posição <- último; ENQUANTO (posição > 0) FAÇA //Empurrar tudo para trás dados[posição] <- aLista.dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[0] <- dado; RETORNE(0); FIM SE fim;
  • 24. Algoritmo AdicionaNoInício Inteiro MÉTODO adicionaNoInício(inteiro dado) variáveis inteiro posição; //Variável auxiliar para “caminhar” início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO último <- último + 1; posição <- último; ENQUANTO (posição > 0) FAÇA //Empurrar tudo para trás dados[posição] <- aLista.dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[0] <- dado; RETORNE(0); FIM SE fim;
  • 25. Algoritmo RetiraDoInício • Procedimento: – testamos se há elementos; – decrementamos o último; – salvamos o primeiro elemento; – empurramos tudo para a frente. 5 4 20 55 4 12 89 24 55 4 12 89 24 20
  • 26. Algoritmo RetiraDoInício Inteiro MÉTODO retiraDoInício() variáveis inteiro posição, valor; início SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[0]; posição <- 0; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para a frente dados[posição] <- aLista.dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE fim;
  • 27. Algoritmo RetiraDoInício Inteiro MÉTODO retiraDoInício() variáveis inteiro posição, valor; início SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[0]; posição <- 0; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para a frente dados[posição] <- aLista.dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE fim;
  • 28. Algoritmo RetiraDoInício Inteiro MÉTODO retiraDoInício() variáveis inteiro posição, valor; início SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[0]; posição <- 0; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para a frente dados[posição] <- aLista.dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE fim;
  • 29. Algoritmo RetiraDoInício Inteiro MÉTODO retiraDoInício() variáveis inteiro posição, valor; início SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[0]; posição <- 0; ENQUANTO (posição <= aLista.último) FAÇA //Empurrar tudo para a frente dados[posição] <- aLista.dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE fim;
  • 30. Algoritmo AdicionaNaPosição • Procedimento: – testamos se há espaço e se a posição existe; – incrementamos o último; – empurramos tudo para trás a partir da posição; – adicionamos o novo dado na posição informada. • Parâmetros: – o dado a ser inserido; – a posição onde inserir;
  • 31. Algoritmo AdicionaNaPosição Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino) variáveis inteiro posição; início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO SE (destino > último + 1 OU destino < 0) ENTÃO RETORNE(ERROPOSIÇÃO); FIM SE último <- último + 1; posição <- último; ENQUANTO (posição > destino) FAÇA //Empurrar tudo para trás dados[posição] <- aLista.dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[destino] <- dado; RETORNE(aonde); FIM SE fim;
  • 32. Algoritmo AdicionaNaPosição Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino) variáveis inteiro posição; início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO SE (destino > último + 1 OU destino < 0) ENTÃO RETORNE(ERROPOSIÇÃO); FIM SE último <- último + 1; posição <- último; ENQUANTO (posição > destino) FAÇA //Empurrar tudo para trás dados[posição] <- dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[destino] <- dado; RETORNE(aonde); FIM SE fim;
  • 33. Algoritmo AdicionaNaPosição Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino) variáveis inteiro posição; início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO SE (destino > último + 1 OU destino < 0) ENTÃO RETORNE(ERROPOSIÇÃO); FIM SE último <- último + 1; posição <- último; ENQUANTO (posição > destino) FAÇA //Empurrar tudo para trás dados[posição] <- dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[destino] <- dado; RETORNE(aonde); FIM SE fim;
  • 34. Algoritmo AdicionaNaPosição Inteiro MÉTODO adicionaNaPosição(inteiro dado, inteiro destino) variáveis inteiro posição; início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO SE (destino > último + 1 OU destino < 0) ENTÃO RETORNE(ERROPOSIÇÃO); FIM SE último <- último + 1; posição <- último; ENQUANTO (posição > destino) FAÇA //Empurrar tudo para trás dados[posição] <- dados[posição - 1]; posição <- posição - 1; FIM ENQUANTO dados[destino] <- dado; RETORNE(aonde); FIM SE fim;
  • 35. Algoritmo RetiraDaPosição • Procedimento: – testamos se há elementos e se a posição existe; – decrementamos o último; – salvamos elemento na posição; – empurramos tudo para frente até posição. • Parâmetros: – o dado a ser inserido; – a posição onde inserir;
  • 36. Algoritmo RetiraDaPosição Inteiro MÉTODO retiraDaPosição(inteiro fonte) variáveis inteiro posição, valor; início SE (fonte > último OU fonte < 0) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[fonte]; posição <- fonte; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para frente dados[posição] <- dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE FIM SE fim;
  • 37. Algoritmo RetiraDaPosição Inteiro MÉTODO retiraDaPosição(inteiro fonte) variáveis inteiro posição, valor; início SE (fonte > último OU fonte < 0) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[fonte]; posição <- fonte; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para frente dados[posição] <- dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE FIM SE fim;
  • 38. Algoritmo RetiraDaPosição Inteiro MÉTODO retiraDaPosição(inteiro fonte) variáveis inteiro posição, valor; início SE (fonte > último OU fonte < 0) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[fonte]; posição <- fonte; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para frente dados[posição] <- dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE FIM SE fim;
  • 39. Algoritmo RetiraDaPosição Inteiro MÉTODO retiraDaPosição(inteiro fonte) variáveis inteiro posição, valor; início SE (fonte > último OU fonte < 0) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[fonte]; posição <- fonte; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para frente dados[posição] <- dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE FIM SE fim;
  • 40. Algoritmo RetiraDaPosição Inteiro MÉTODO retiraDaPosição(inteiro fonte) variáveis inteiro posição, valor; início SE (fonte > último OU fonte < 0) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO último <- último - 1; valor <- dados[fonte]; posição <- fonte; ENQUANTO (posição <= último) FAÇA //Empurrar tudo para frente dados[posição] <- dados[posição + 1]; posição <- posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE FIM SE fim;
  • 41. Algoritmo AdicionaEmOrdem • Procedimento: – necessitamos de uma função para comparar os dados (maior); – testamos se há espaço; – procuramos pela posição onde inserir comparando dados; – chamamos adicionaNaPosição. • Parâmetros: – o dado a ser inserido;
  • 42. Algoritmo Maior Booleano MÉTODO maior(inteiro dado1, inteiro dado2) início SE (dado1 > dado2) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); FIM SE fim; Observação: quando o dado a ser armazenado em uma lista for algo mais complexo do que um inteiro, a comparação de precedência não será mais tão simples (ex.: Empregado1 > Empregado2) e será resultado de um conjunto mais complexo de operações. Para deixar os algoritmos de operações sobre lista independentes do tipo de dado específico armazenado na lista, usamos uma função deste tipo.
  • 43. Algoritmo AdicionaEmOrdem Inteiro MÉTODO adicionaEmOrdem(inteiro dado) variáveis inteiro posição; //Variável auxiliar para “caminhar” início SE (listaCheia) ENTÃO RETORNE(ERROLISTACHEIA) SENÃO posição <- 0; ENQUANTO (posição <= último E maior(dado, dados[posição])) FAÇA //Encontrar posição para inserir posição <- posição + 1; FIM ENQUANTO RETORNE(adicionaNaPosição(dado, posição)); FIM SE fim;
  • 44. Algoritmo RetiraEspecífico • Retira um dado específico da lista. • Procedimento: – testamos se há elementos; – testamos se o dado existe e qual sua posição; – necessitamos de uma função Posição(dado); – chamamos RetiraDaPosição. • Parâmetros: – o dado a ser retirado;
  • 45. Algoritmo Posição Inteiro MÉTODO posição(inteiro dado) variáveis inteiro posição; início posição <- 0; ENQUANTO (posição <= último E NÃO(IGUAL(dado, dados[posição]))) FAÇA posição <- posição + 1; FIM ENQUANTO SE (posição > último) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO RETORNE(posição); FIM SE fim;
  • 46. Algoritmo RetiraEspecífico Inteiro MÉTODO retiraEspecífico(inteiro dado) variáveis inteiro posição; início SE (listaVazia) ENTÃO RETORNE(ERROLISTAVAZIA) SENÃO posição <- posição(dado); SE (posição < 0) ENTÃO RETORNE(ERROPOSIÇÃO) SENÃO RETORNE(retiraDaPosição(posição)); FIM SE FIM SE fim;
  • 47. Algoritmos Restantes • As seguintes funções ficam por conta do aluno : – booleano Contém(dado) – booleano Igual(dado1, dado2) – booleano Menor(dado1, dado2)
  • 48. Exercício de Implementação 3 Implemente uma lista em um vetor utilizando a linguagem de programação “C++” com Orientação a Objeto. – Crie uma classe Lista; – esta deverá ser uma lista de elementos da classe Agenda; – A classe Agenda representa um nome de 30 posições e um número de telefone; – crie um método maior(a,b) que compare os nomes de duas entradas; – programe todos os métodos documentando cada método, inclusive com dicionário de dados; – crie um programa principal que execute todas os métodos de lista a partir de um menu. O método procurar específico deverá basear-se no nome em uma Agenda; – além destes métodos, o programa deverá ser capaz de listar a lista em ordem alfabética.