Você está na página 1de 26

Lista

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

 Uma lista pode ter 0 ou mais objetos


 O número n é o TAMANHO da lista
 Uma LISTA VAZIA não possui objetos.
 Um lista é dita HOMOGÊNEA quando todos objetos são do
mesmo tipo.

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

 LISTA DINÂMICA – Neste caso os objetos da lista são


alocados de forma dinâmica e um objeto qualquer deve
conhecer a posição do seu próximo objeto.

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;
}

// Remove todos os objetos da lista


void List::removeAll(void){
iSize = 0;
}

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.

Você também pode gostar