Estruturas de Dados em C++
Aula 11
Prof. Anderson da Cruz
Listas Simplesmente
Encadeadas
Pessoa *pessoa;
Aqui é criada uma variável que conterá uma
referência a um objeto
pessoa = new Pessoa();
Aqui um objeto é criado
Pessoa *pessoa = new Pessoa();
Tudo em uma única linha
2
Listas Simplesmente
Encadeadas
Pessoa *pessoa = new Pessoa( João );
pessoa = new Pessoa( Pedro );
João
Pessao
Pedro
3
Listas Simplesmente
Encadeadas
Pessoa *pessoa = new Pessoa( João );
pessoa = new Pessoa( Pedro );
João
A memória continua
alocada
Pessao
Pedro
4
Tipos de Armazenamento
Com alocação estática de memória
Posições de memória contíguas
Array
Com alocação dinâmica de memória
Alocação de memória de acordo com a
necessidade
O dados estão em posições aleatórias na memória
e ligadas por ponteiros
5
Listas Simplesmente
Encadeadas
Uma lista encadeadas básica deve conter
head: referência para o primeiro elemento da lista
tail: referência para o último elemento da lista
node: representa um item da lista
> element: o informação
> next: um atributo para o próximo elemento da lista
6
Listas Simplesmente
Encadeadas
Exemplo de uma lista encadeada
7
Listas Simplesmente
Encadeadas
Inserção uma lista encadeada
8
Listas Simplesmente
Encadeadas
Exclusão do 1º nó de uma lista
encadeada
9
Listas Simplesmente
Encadeadas
Exclusão de um nó no meio da lista
encadeada
10
Listas Simplesmente
Encadeadas
Inserção em uma posição específica da
lista encadeada
11
Listas Simplesmente
Encadeadas
Para tornar a lista encadeada mais efeiciente,
podemos colocar uma variável tail para
determinar a última posição da lista
12
Classe Node
class Node {
O que
string element;
criar
Node *next;
public:
Node(string element, Node *n){
this->element = element;
this->next = n;
}
Node(string element){
this->element = element;
this->next = NULL;
}
string getElement() { return this->element; }
void setElement(string element) { this->element = element; }
Node* getNext() { return this->next; }
void setNext(Node *next) { this->next = next; }
};
permite
a lista
13
Classe No Genérica
public class Node<E>{
private E element;
private Node<E> next;
public Node(E s, Node<E> n){
element = s;
next = n;
}
public Node( E element ) { this( element, null ); }
public E getElement(){ return element; }
public Node<E> getNext(){ return next; }
public void setElement(E newElem){ element = newElem; }
public void setNext(Node<E> newNext){ next = newNext; }
}
14
Inserção no início da lista
bool empty = this->isEmpty();
Node *node = new Node(element);
node->setNext(this->head);
this->head = node;
if (empty) this->tail = node;
this->count++;
15
Inserção no final da lista
bool empty = this->isEmpty();
Node *node = new Node(element);
node->setNext(NULL);
this->tail->setNext(node);
this->tail = node;
if (empty) this->head = node;
this->count++;
16
Exclusão do primeiro elemento
da lista
Node *node = this->head;
this->head = this->head->getNext();
delete node;
this->count--;
17
Exclusão do último elemento da
lista
Node *current = this->head;
while (current->getNext() != this->tail)
current = current->getNext();
Node *node = this->tail;
current->setNext(NULL);
this->tail = current;
delete node;
this->count--;
18
Percorrendo uma lista
Node* current = list.begin();
while (current != NULL) {
cout << current->getElement() << endl;
current = current->getNext();
}
19
Percorrendo uma lista
for (Node* c = list.begin(); c != list.end(); c = c->getNext()) {
cout << c->getElement() << endl;
}
20
Exercício 01
Implementar uma lista de inteiros
Implementar uma lista de float
Implementar uma lista de char
21
Exercício 02
Implementar uma lista genérica
22
Download

Estruturas de Dados em C++ Aula 11