1. ANHANGUERA – 2015.2
ESTRUTURA DE DADOS
AULA 04 – MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Prof. Thomás da Costa
thomascosta@aedu.com
2. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
3. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Matrizes
São vetores que possuem duas ou mais dimensões para armazenar valores.
Uma matriz de duas dimensões, possui um comportamento semelhante ao de
uma tabela com linhas e colunas.
O que é:
4. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Matrizes
Exemplo:
int valor[4][4] = {
{0, 0 ,0 ,0},
{0, 1 ,1 ,0},
{0, 1 ,1 ,0},
{0, 0 ,0 ,0}
};Declaração de uma matriz
5. ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream>
using namespace std;
int main()
{
int valor[4][4] = {
{0, 0 ,0 ,0},
{0, 1 ,1 ,0},
{0, 1 ,1 ,0},
{0, 0 ,0 ,0}
};
for (int i=0;i<=3;i++)
{
for (int j=0;j<=3;j++)
{
cout << valor[i][j];
}
cout << endl;
}
}
Exemplo 1
6. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Matrizes
Podemos atribuir valores para uma posição de uma matriz utilizando
diretamente os seus índices.
Atribuição de Valor:
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
valor[0][2] = 22;
7. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Matrizes
• Sempre usar com sabedoria !!!
• Quanto maior o tamanho da matriz, maior a quantidade de memória
ocupada.
• A memória da matriz é de alocação estática.
• Podemos declarar qualquer tipo de matriz.
• Matrizes podem possuir várias dimensões, mas cuidado ao utilizar.
• Não se esqueça: computador tem memória limitada !!!
• Para acessar as informações de uma matriz vamos precisar sempre de dois
índices.
Detalhes:
8. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação de Memória
O que vamos aprender:
• Vamos conhecer dois tipos de alocação de memória:
• Estática
• Dinâmica
9. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação de Memória
• Variáveis são alocadas na memória do computador.
• As variáveis declaradas pelos nossos programas, são alocadas de acordo
com seus tamanhos e tipos.
• Obviamente, cada variável tem um tamanho definido. Conforme a tabela
abaixo:
Detalhes:
Tipo Tamanho em Bytes Faixa Mínima
char 1 -127 a 127
int 4 -2.147.483.648 a 2.147.483.647
float 4 6 dígitos de precisão
double 8 15 dígitos de precisão
10. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação de Memória
• Alocação estática é controlada pelo compilador.
• Não é possível alterar o espaço da alocação de memória.
• Na alocação estática, a área de memória ocupada por ela se mantém
constante durante toda a execução.
Estática:
11. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Alocando memória:
Para o nosso exemplo, vamos efetuar a alocação estática, simplesmente
declarando uma variável.
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação Estática
int valor;
12. ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação de Memória
• Alocação dinâmica é controlada pelo desenvolvedor.
• A memória pode ser desalocada durante o decorrer do programa.
• O tamanho da alocação é sob demanda, ou seja, em tempo de execução.
• Vamos utilizar alocação dinâmica de memória principalmente com struct.
• Não se esqueça: um computador tem memória limitada.
• Não se esqueça de desalocar a memória da variável quando não for mais
necessário o uso.
Dinâmica:
13. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Alocando memória:
Para o nosso exemplo, vamos efetuar a alocação dinâmica de memória utilizando a
palavra reservada new.
Efetuando a alocação de memória
alunos *novo_aluno = new alunos;
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação Dinâmica
14. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Desalocando memória:
Para o nosso exemplo, vamos efetuar a desalocação dinâmica de memória
utilizando a palavra reservada delete.
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Alocação Dinâmica
Efetuando a desalocação de memória
delete lista_alunos;
15. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Lista Ligada Simples:
É uma lista de elementos ligados em sequência. Normalmente utilizamos
estruturas para representar lista ligadas.
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Listas
16. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Mais detalhes:
• São representados por estruturas.
• São estruturas dentro de estruturas encadeadas.
• A estrutura interna sempre é um ponteiro para outra estrutura.
• Sendo um ponteiro, indica o endereço da próxima estrutura.
• Vamos trabalhar com inserção no fim da lista encadeada.
• Utilizadas para armazenar valores na memória de fácil acesso.
Listas
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
17. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Como funciona:
Um elemento de uma lista, possui o endereço do próximo. O último elemento da
lista tem o valor NULL.
1 2 3
Elementos da lista ligada simples
Endereço de memória para o próximo elemento
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Listas
18. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Exemplo:
Próximo elemento da listastruct alunos
{
char nome[100];
int idade;
alunos *proximo;
} *lista_alunos;
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Listas
19. ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream>
#include <strings.h>
#include <conio.h>
#include <limits>
using namespace std;
struct alunos
{
char nome[100];
int idade;
alunos *proximo;
} *lista_alunos;
void iniciar_lista();
void inserir_aluno();
void listar_alunos();
void menu();
void limpar_teclado();
...
Exemplo 2
20. ESTRUTURA DE DADOS – Prof. Thomás da Costa
...
int main()
{
int opcao = -1;
iniciar_lista();
while (opcao != 0)
{
menu();
cin >> opcao;
if (opcao == 1)
inserir_aluno();
else if (opcao == 2)
listar_alunos();
}
delete lista_alunos;
}
...
Exemplo 2
21. ESTRUTURA DE DADOS – Prof. Thomás da Costa
Exemplo 2
Adicionando no final da lista
...
alunos *novo_aluno = new alunos;
cout << "Digite o nome do aluno:" << endl;
gets(novo_aluno->nome);
cout << "Digite a idade do aluno:" << endl;
cin >> novo_aluno->idade;
novo_aluno->proximo = NULL;
if (lista_alunos == NULL)
lista_alunos = novo_aluno;
else
{
alunos *p;
p = lista_alunos;
while (p->proximo != NULL)
p = p->proximo;
p->proximo = novo_aluno;
}
...
22. ESTRUTURA DE DADOS – Prof. Thomás da Costa
...
alunos *p;
p = lista_alunos;
if (p->proximo == NULL)
{
cout << "------------------------------------" << endl;
cout << "Nome do Aluno:" << p->nome << endl;
cout << "Idade do Aluno:" << p->idade << endl;
cout << "------------------------------------" << endl;
}
else
{
while (p != NULL)
{
cout << "------------------------------------" << endl;
cout << "Nome do Aluno:" << p->nome << endl;
cout << "Idade do Aluno:" << p->idade << endl;
cout << "------------------------------------" << endl;
p = p->proximo;
}
}
...
Exemplo 2
Percorrendo a lista ligada
23. ESTRUTURA DE DADOS – Prof. Thomás da Costa
• Matrizes são vetores com duas ou mais dimensões.
• Existem dois tipos de alocação de memória.
• Alocação Estática.
• Alocação Dinâmica.
• Variáveis possuem um tipo e um tamanho definido.
• Listas são representadas por estruturas.
• Listas são estruturas dentro de estruturas encadeadas.
• A estrutura interna sempre é um ponteiro para outra estrutura.
• Sendo um ponteiro, indica o endereço da próxima estrutura.
• Listas são utilizadas para armazenar valores na memória de fácil acesso.
MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA
Resumo