Escolar Documentos
Profissional Documentos
Cultura Documentos
Definição
Uma lista é uma coleção de objetos que possuem uma
relação de ordem entre si, ou seja, existe o primeiro;
segundo; etc.
a1, a2, a3, ... , an n≥0
Estrutura de Dados 14
Prof. Flávio de Oliveira Silva, M.Sc.
Lista
Estática
Utilizada para representar situações onde o número de
objetos é FIXO
Exemplos:
Uma lista contendo disjuntores em um painel(o número máximo é
fixo);
Lista de equipamentos estocados em uma prateleira (o número de
prateleiras é fixo).
Lista de cabines telefônicas em uso (o número de cabines é fixo);
Lista de passagens vendidas (o número de poltronas disponíveis é
fixo); …
Estrutura de Dados 15
Prof. Flávio de Oliveira Silva, M.Sc.
Lista
Dinâmica
Utilizada para representar situações onde o número de
elementos é variável, sendo que não é possível prever qual
será o número máximo de objetos.
Exemplos:
Lista de circuitos de um painel (Cada painel poderá ter um número
qualquer de circuitos);
Lista de equipamentos adquiridos;
Lista de telefones instalados em uma localidade;
Lista de reservas feitas para um determinado vôo; …
Estrutura de Dados 16
Prof. Flávio de Oliveira Silva, M.Sc.
Lista
Representação
Considerando que a lista é uma coleção de objetos onde existe
o primeiro, segundo, etc. Como podemos representá-la?
LISTA ESTÁTICA – Neste caso os objetos de uma lista estarão
contidos em um Vetor
Estrutura de Dados 17
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Representação
Para criar uma lista estática a partir de um vetor
necessitamos basicamente das seguintes informações:
Um vetor que conterá os objetos da lista (listData)
Este vetor irá conter um número máximo de objetos (MAXLISTSIZE)
O vetor irá utilizar um tipo genérico de dados (T)
Um número inteiro que indicará o número de objetos existentes nesta
lista (size).
Inicialmente o número de objetos é igual a zero.
O número de objetos (size) deverá ser sempre menor ou igual que o
tamanho do vetor (MAXLISTSIZE)
O primeiro objeto será inserido da posição 0 do vetor (listData)
Estrutura de Dados 18
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Pontos Fortes x Pontos Fracos
PONTOS FORTES
Acesso direto indexado a qualquer objeto da lista
Tempo constante para acessar o objeto i (depende somente do
índice.
PONTOS FRACOS
Movimentação quando eliminado/ inserido objeto
Tamanho máximo fixo, sendo necessário um conhecimento inicial
deste número
QUANDO UTILIZAR
Em situações onde o tamanho máximo pode ser previsto
Em situações onde a lista não irá conter um grande número de
objetos.
Estrutura de Dados 19
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Representação (C++)
Lista será vista como uma classe
Classe Lista
Contém dois atributos
Tamanho
int size;
Elementos
T listData[MAXLISTSIZE];
Classe fornecerá operações básicas sobre a lista
Representação UML class Domain Obj ects
List
- size: int
- listData[MAXLISTSIZE]: T
Estrutura de Dados 20
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Representação C padrão
Representada como uma struct
Struct List
Contém dois membros
Tamanho
int size;
Elementos
T listData[MAXLISTSIZE];
Representação C
struct List {
int size;
T listData[MAXLISTSIZE];
};
Estrutura de Dados 21
Prof. Flávio de Oliveira Silva, M.Sc.
Lista
Operações
Qualquer objeto da lista pode ser recuperado e/ou
modificado
É possível a inserção de novos objetos na lista
É possível a remoção de objetos da lista
Lista estática
Algumas operações de inserção e remoção exigem um grande
esforço
Necessitam da movimentação de todos os outros objetos existentes
na lista.
Estrutura de Dados 22
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Recuperação e Modificação (C++)
getSize – Retorna o número de elementos
int getSize(void) const;
getFirst – Retorna o primeiro de elemento
int getFirst(T& elem) const;
getLast – Retorna o ultimo de elemento
int getLast(T& elem) const;
getData – Retorna o i-ésimo elemento
int getData(int pos, T& elem) const; //(1 ≤ pos ≤ size)
setData – Altera o i-ésimo elemento
int setData(int pos, T& elem); //(1 ≤ pos ≤ size)
find – Encontra a primeira ocorrência
bool find(T elem)const;
Observação
Todas as operações retornam 0 em caso de sucesso e diferente de zero em caso de erro
Estrutura de Dados 23
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Recuperação e Modificação (C)
getSize – Retorna o número de elementos
int getSize(struct List* l) const;
getFirst – Retorna o primeiro de elemento
int getFirst(struct List* l, T* elem) const;
getLast – Retorna o ultimo de elemento
int getLast(struct List* l, T* elem) const;
getData – Retorna o i-ésimo elemento
int getData(struct List* l, int pos, T* elem)//(1 ≤ pos ≤ size)
setData – Altera o i-ésimo elemento
int setData(struct List* l, int pos, T* elem)//(1 ≤ pos ≤ size)
find – Encontra a primeira ocorrência
bool find(struct List* l, T elem)const;
Observação
Todas as operações retornam 0 em caso de sucesso e diferente de zero em caso de erro
Estrutura de Dados 24
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Inserção – Visão Geral
O primeiro elemento é inserido na posição 0 do vetor
O segundo a próxima posição (1) e assim sucessivamente
Para realizar a inserção, em certos casos, é necessária a
movimentação de todos os objetos existentes no vetor.
Inserção na i-ésima posição, sendo posição < size
Estrutura de Dados 25
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Inserção
insert - Insere um elemento no final da lista
int insert(const T& elem);
insertFirst - Insere um elemento no início da lista
int insertFirst(const T& elem);
insertLast Insere um elemento no final da lista
int insertLast(const T& elem);
insertAt - Insere um elemento em uma posição qualquer
int insertAt(int pos, const T& elem);
insertAfter - Insere um elemento após uma posição informada
int insertAfter(int pos, const T& elem)
insertBefore - Insere um elemento antes de uma posição
int insertBefore(int pos, const T& elem)
Observações
O primeiro elemento está na posição 1 e assim sucessivamente ( 1 ≤ pos ≤ size)
Todas as operações retornam 0 em caso de sucesso e diferente de zero em caso de erro
Estrutura de Dados 26
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Remoção
Da mesma forma que a inserção, a remoção em uma lista
estática necessita, em certos, casos da movimentação de
todos os elementos existentes na lista.
Dependendo do tamanho da lista, esta operação exige um
esforço computacional extra.
Remoção de um elemento da i-ésima posição (posição <
size)
Estrutura de Dados 27
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Remoção
remove - Remove a primeira ocorrência de um elemento
int remove(const T&);
removeFirst - Remove o primeiro elemento da lista
int removeFirst(T& elem);
removeLast - Remove o ultimo elemento da lista
int removeLast(T& elem);
Remove um elemento em uma posição especificada
int removeAt(int pos, T& elem); //(1 ≤ pos ≤ size)
revomeAfter - Remove um elemento após uma posição informada
int removeAfter(int pos, T& elem); //(1 ≤ pos ≤ size)
removeBefore - Remove um elemento antes de uma posição
int removeBefore(int pos, T& elem); //(1 ≤ pos ≤ size)
Remove todos os elementos da lista
int removeAll();
Estrutura de Dados 28
Prof. Flávio de Oliveira Silva, M.Sc.
Lista – Operações
Apoio
isEmpty – Indica se a lista está (true) ou não (false) vazia
bool isEmpty(void) const;
isFull – Indica se a lista está (true) ou não (false) cheia
bool isFull() const;
print – Imprime o conteúdo da lista
void print(void) const;
moveRight – Move todos os elementos uma posição para a direita a partir
da posição da lista recebida
int moveRight(int pos);
moveLeft – Move todos os elementos uma posição para a esquerda a
partir da posição da lista recebida
int moveLeft(int pos);
Observações
O primeiro elemento está na posição 1 e assim sucessivamente ( 1 ≤ pos ≤ size)
Estrutura de Dados 29
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Definição – CPP (List.h)
# include <iostream>
# define iMaxListSize 32
typedef int T;
class List {
private:
//Vetor que irá conter os objetos da lista
T listData[ iMaxListSize];
//Número de objetos da lista
int iSize;
public:
// constructor
List(void);
// Metodos Acessores
//Recupera o número de objetos da lista
int getSize(void) const;
/Recupera a informação contida em uma determinada posição
int getData(int, T&) const;
Estrutura de Dados 30
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Definição – CPP (List.h)
//Métodos Modificadores
//Altera o conteudo da lista em uma determinada posição
void setData(int, T&);
//Insere um objeto no final da lista
void insert(const T&);
//Remove a primeira ocorrência de um objeto da lista
void remove(const T&);
//Remove o primeiro objeto da lista
int removeFirst(const T&);
//Remove todos os objetos da lista
void removeAll(void);
//Outros métodos
//Retorna um valor booleano indicando se a lista é o não vazia
bool isEmpty(void) const;
//Encontra a primeira ocorrência de um objeto da lista
bool find(T&) const ;
// imprime o conteudo da lista
void print() const;
}; Estrutura de Dados 31
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
# include <iostream>
# include "List.h"
using namespace std;
List::List(void){
//Tamanho inicial da lista é zero
iSize = 0;
}
// retorna o número de objetos da lista
int List::getSize(void) const{
return iSize;
}
Estrutura de Dados 32
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
//Retorna o objeto existente em uma determinada posição da lista
//Caso a posição seja inválida, retorna diferente de zero
int List::getData(int pos, T& elem) const {
if (pos < 0 || pos >= iSize) {
cerr << "Posição inválida!!!" << endl;
return 1;
}
elem = listData[pos];
return 0;
}
//Altera o conteudo da lista em uma determinada posição
int List::setData(int pos, T& data) {
if (pos < 0 || pos >= iSize) {
cerr << "Posição inválida!!!" << endl;
return 1;
}
listData[pos] = data;
return 0;
} Estrutura de Dados 33
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
// Insere um objeto no final da lista
int List::insert(const T& item){
//Caso o número de posições máximo tenha sido atingindo retorna
if (iSize >= iMaxListSize){
cerr << "O tamanho máximo da lista foi atingido!" << endl;
return 1;
}
// Insere um objeto no final da lista
listData[ iSize] = item;
// Incrementa o número de objetos
iSize++;
}
Estrutura de Dados 34
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
// Procura por um item na lista e remove a primeira ocorrência
int List::remove(const T& item) {
//Inicializa variável ii que será utilizada para percorrer a lista
int ii(0);
// Procura por um objeto
while (ii < iSize && !(item == listData[ii] ))
ii++;
//Caso ii seja igual ou maior que iSize, então não foi encontrado
if (ii == iSize)
return 1;
//Decrementa o tamanho da lista
iSize--;
// move os objetos seguintes da lista para esquerda uma posição,
//ou seja o objeto da posição ii+1 será colocado na posição ii
while (ii < iSize){
listData[ ii] = listData[ ii+1] ;
ii++;
}
return 0; Estrutura de Dados 35
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
// Verifica se a lista está vazia
bool List::isEmpty(void) const {
if (iSize == 0)
return true;
else
return false;
}
Estrutura de Dados 36
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
// Remove o primeiro objeto da lista e retorna o valor removido
//Caso a posição seja inválida, o programa return diferente de zero
int List::removeFirst(T& item) {
T frontItem;
// Caso a Lista esteja Vazia, finaliza o programa
if (isEmpty()) {
cerr << "Erro! Lista vazia..." << endl;
return 1;
}
//Recupera o primeiro objeto
item = listData[0] ;
//Remove o primeiro objeto
remove(item);
// retorna o valor removido
return 0;
}
Estrutura de Dados 37
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
//Este método irá percorrer a lista a fim de encontrar o objeto item
//Caso o mesmo não seja encontrado retorna false
bool List::find(T& item) const {
int ii(0);
//Caso a lista seja vazia retorna false
if (isEmpty())
return false;
//Procura pelo objeto na lista
while (ii < iSize && !(item == listData[ ii] ))
ii++;
//Caso ii seja igual ao tamanho da lista, indica que o item
//nao foi encontrado
if (ii == iSize)
return false;
return true;
}
Estrutura de Dados 38
Prof. Flávio de Oliveira Silva, M.Sc.
Lista Estática
Implementação – CPP (List.cpp)
//Imprime o conteúdo da lista
void List::print()const {
int ii(0);
//Caso a lista seja vazia retorna
if (isEmpty()){
cout << "Lista Vazia!" << endl;
return;
}
cout << "Imprimindo o conteudo da lista..." << endl;
while (ii < iSize){
cout << "objeto: " << ii << " - " << listData[ ii] << endl;
ii++;
}
}
Estrutura de Dados 39
Prof. Flávio de Oliveira Silva, M.Sc.