Unidade 2 - Array & Matrix 2025
Unidade 2 - Array & Matrix 2025
_________
Capítulo
___________
2 Array & Matrix
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
Array
O 𝑎𝑟𝑟𝑎𝑦 ou 𝑣𝑒𝑡𝑜𝑟 é uma coleção de itens do mesmo tipo de variável armazenados de forma
contígua na memória e, cuja ordem de inserção e remoção, não é definida previamente. O
tipo do item pode ser, por exemplo : um número do tipo 𝑖𝑛𝑡, um número do tipo 𝑓𝑙𝑜𝑎𝑡 , um
número do tipo do tipo 𝑑𝑜𝑢𝑏𝑙𝑒 ou um 𝑐ℎ𝑎𝑟. É uma das estruturas de dados mais populares
e simples usadas em programação.
Como exemplos podem-se destacar: o 𝑎𝑟𝑟𝑎𝑦 com os números inteiros pares, o
𝑎𝑟𝑟𝑎𝑦 com as letras do alfabeto e, o 𝑎𝑟𝑟𝑎𝑦 com os salários de funcionários de uma empresa.
Para conhecer mais, visite:
• https://docs.python.org/pt-br/3/library/array.html
• https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-
tutorials/
Declaração de um array
O Python implementou a classe 𝑎𝑟𝑟𝑎𝑦 com todo o formalismo que a classe necessita. O link
para ter acesso à documentação dessa classe é
Terminologias básicas
• Índice de array: em um 𝑎𝑟𝑟𝑎𝑦, os elementos são identificados por seus índices. O
índice da matriz começa em 0.
• Elemento do array: Elementos são itens armazenados em um 𝑎𝑟𝑟𝑎𝑦 e podem ser
acessados por seu índice.
• Comprimento do array: O comprimento de um 𝑎𝑟𝑟𝑎𝑦 é determinado pelo número
de elementos que ele pode conter.
Representação na memória
Quando criamos um novo 𝑎𝑟𝑟𝑎𝑦, o Python reserva espaço na memória (e inicializa os
valores) para este vetor. Este processo é chamado de alocação de memória. Na realidade,
quando se cria uma variável do tipo vetor, esta variável irá guardar um endereço de memória,
variável de referência do vetor, e neste endereço serão armazenados os seus elementos.
A figura 2.1 ilustra a representação em memória do 𝑎𝑟𝑟𝑎𝑦 data. Vamos assumir que
todo o conjunto de os bytes sejam endereçáveis. O campo integer utiliza 4 bytes(32bits).
Considere que o primeiro inteiro esteja armazenado no endereço 100.
Index * size
Considerando que cada elemento tenha tamanho(𝑙𝑒𝑛) de 4 bytes (tipo inteiro) para
acharmos o elemento data[3] fazemos:
O que isso significa é que podemos usar variáveis normais (v1, v2, v3, ..) quando
temos um pequeno número de objetos. Mas se quisermos armazenar um grande número de
instâncias, torna-se difícil gerenciá-las com variáveis normais.
Tipos de arrays
Os 𝑎𝑟𝑟𝑎𝑦𝑠 podem ser classificados de duas formas:
Podemos imaginar um array 1-D como uma linha, onde os elementos são armazenados um
após o outro, de forma contígua.
Uma forma simples seria criarmos uma lista de 𝑎𝑟𝑟𝑎𝑦𝑠 da seguinte forma:
Ou, de maneira mais simples, criamos uma lista de listas da seguinte forma:
Cuidado, se o elemento não existir a rotina é terminada com erro, da seguinte forma
Observa-se que usando essa sintaxe é retornado um valor lógico no caso True
Observações
▪ O tamanho do vetor é determinado pelo método 𝑙𝑒𝑛 da classe 𝑎𝑟𝑟𝑎𝑦. A seguir pode-
se destacar alguns exemplos de utilização do método 𝑙𝑒𝑛 aplicado à alguns vetores.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
Observe que o tamanho do 𝑎𝑟𝑟𝑎𝑦 é 26, logo, os endereços visitáveis são 0,1,2, ....,25.
Se tentarmos qualquer índice diferente,isto é, fora do limite, será exibida uma mensagem de
erro como ilustrado a seguir:
Percorrendo um array
Existem casos em que se necessita percorrer todas as células ou grande partes das células
de um 𝑎𝑟𝑟𝑎𝑦, como por exemplo: imprimir todos os elementos, ou pesquisar se um
determinado elemento está ou não no 𝑎𝑟𝑟𝑎𝑦 .
Inserindo em um array
Figura 2.4 – Visão esquemática de inserção em um 𝑎𝑟𝑟𝑎𝑦 numa posição pré-determinada: (a) a
estrutura antes da remoção e (b) após a inserção.
Nesse exemplo a função vai inserir o elemento “15” na posição de índice igual a 1.
O 𝑎𝑟𝑟𝑎𝑦 ficará [ 10, 15, 20, 30].
Nesse exemplo a função vai inserir o elemento “40” no final do vetor. O 𝑎𝑟𝑟𝑎𝑦 ficará
[10, 15, 20, 25, 30, 40]. Esquematicamente, podemos exemplificar da seguinte forma
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
Figura 2.5 – Visão esquemática de remoção do elemento da posição index do 𝑎𝑟𝑟𝑎𝑦. (a) estrutura
antes da remoção e (b) após a remoção.
Estruturação lógica:
Comando
Repare que no caso anterior, foi omitido o index, logo ele aciona o valor 𝒅𝒆𝒇𝒂𝒖𝒕, no
caso index=-1
Comando
Comando
CUIDADO!!!: Se digitarmos um valor do index que não existe o comando pop(index) retorna uma
mensagem de erro.
Por exemplo
• qualquer 0 ≤ 𝑖𝑛𝑑𝑒𝑥 < 𝑙𝑒𝑛( 𝑎𝑟𝑟), será removido a célula de índice index, os
dados são ajustados à direita para posição index
• qualquer −𝑙𝑒𝑛(𝑎𝑟𝑟) ≤ 𝑖𝑛𝑑𝑒𝑥 ≤ −1, será removido a célula de índice
𝑖𝑛𝑑𝑒𝑥 no sentido reverso, os dados são ajustados à direita para posição
𝑖𝑛𝑑𝑒𝑥
• qualquer índice 𝑖𝑛𝑑𝑒𝑥 > 𝑙𝑒𝑛(𝑎𝑟𝑟) ou 𝑖𝑛𝑑𝑒𝑥 < −𝑙𝑒𝑛(𝑎𝑟𝑟), será exibido uma
mensagem de erro.
Se digitarmos
Nesse exemplo a função vai excluir o elemento de valor 15 do vetor. O 𝑎𝑟𝑟𝑎𝑦 ficará
Por exemplo
Reverso de um vetor
Supondo que o 𝑎𝑟𝑟𝑎𝑦 de inteiros
Estruturação lógica:
Uma outra forma está em aplicar o método reverse() ao vetor que se queira obter o
reverso, por exemplo
CUIDADO, nessa sintaxe o 𝑎𝑟𝑟𝑎𝑦 L, original é alterado para a ordem INVERSA dos
elementos
Observe que o vetor L foi modificado.
Observação Importante
Como o 𝑎𝑟𝑟𝑎𝑦 em Python os itens devem ser do mesmo tipo. Não conseguimos em um
𝑎𝑟𝑟𝑎𝑦 armazenar objetos e, nem itens de diferentes tipos. Uma maneira de simularmos o
𝑎𝑟𝑟𝑎𝑦 seria a utilização da estrutura 𝑙𝑖𝑠𝑡 que será detalhada mais tarde, e implementa todos
os principais métodos apresentados na classe 𝑎𝑟𝑟𝑎𝑦.
Exercícios
1. Reverso de um vetor. Escreva uma função que retorna o 𝑎𝑟𝑟𝑎𝑦 informado como parâmetro
(𝑎𝑟𝑟) em ordem inversa. OBS: O Python já possui implementado o método reverse().
2. Maior elemento do vetor. Dados um vetor de inteiros, fazer uma rotina para retornar o maior
elemento deste 𝑎𝑟𝑟𝑎𝑦. OBS: O Python já possui implementado o método 𝑚𝑎𝑥
3. Menor elemento do vetor. Dados um 𝑎𝑟𝑟𝑎𝑦 de inteiros, fazer uma rotina para retornar o
menor elemento desse 𝑎𝑟𝑟𝑎𝑦. OBS:O Python já possui implementado o método 𝑚𝑖𝑛.
4. Soma dos elementos do vetor. Dados um 𝑎𝑟𝑟𝑎𝑦 de inteiros, fazer uma rotina para retornar
a soma de todos os elementos desse 𝑎𝑟𝑟𝑎𝑦. OBS:O Python já possui implementado o
método 𝑠𝑢𝑚.
Exercícios Criativos
Escreva uma função que toma como entrada uma string e retorna true se o string
consiste inteiramente de A, C, G e T, e false caso contrário
Escreva uma função que recebe uma string de DNA (A, C, G, T) e retorna a
seqüência de RNA (A, C, G, U).
Encontre duas linhas que, juntamente com o eixo 𝑥, formam um recipiente, de modo
que o recipiente contenha mais água. Devolva a quantidade máxima de água que o
recipiente pode armazenar. OBS: Não pode inclinar o contêiner.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
Exemplo 1:
Exemplo 2:
4. Matriz de Hadamard. A matriz 𝐻(𝑛) de 𝐻𝑎𝑑𝑎𝑚𝑎𝑟𝑑 n-por-n é uma matriz booleana com
a notável propriedade de que quaisquer duas linhas diferem em exatamente 𝑛/2 bits.
(Essa propriedade a torna útil para criar códigos de correção de erros.) 𝐻(1) é uma
matriz 1 por 1 com a entrada única verdadeira, e para 𝑛 > 1, 𝐻(2𝑛) é obtido alinhando
quatro cópias de 𝐻(𝑛) em um quadrado grande e, em seguida, invertendo todas as
entradas na cópia inferior direita 𝑛 por 𝑛, conforme mostrado nos exemplos a seguir
(com 𝑇 representando verdadeiro e 𝐹 representando falso, como de costume).
Matriz (Matrix)
O conceito inicial de matriz remete-se à matemática onde pode-se definir uma matriz como
sendo uma coleção de objetos dispostos em linhas e colunas. Por exemplo a matriz A de
ordem m x n ( m linhas e n colunas) pode ser representada da seguinte forma.
Como em Python não se tem uma representação nativa do tipo matriz, uma
alternativa que se faz é criar uma coleção de estruturas do tipo list.
Para saber mais e utilização do array e matrix em Python usando a biblioteca numpy
visite o sítio https://numpy.org/doc/stable/reference/generated/numpy.matrix.html.
No texto desse capítulo vamos implementar a ideia de matriz uma como uma coleção
de estruturas do tipo list.
Uma vez que uma lista (list) é alocada de forma dinâmica e, um array (vetor) é
armazenado de forma contígua na memória, então, podemos armazenar vários vetores,
consecutivamente para obter algo que represente de forma contígua (e seja tratado como)
matriz.
A figura 2.7 ilustra uma imagem onde alocamos nl vetores consecutivos na memória,
cada vetor com nc posições de memória, desde vet[0] até vet[nc-1].
Assim, podemos ver este agregado de dados como uma matriz mat[][], cuja primeira
linha é o primeiro vetor e assim por diante. Isso está ilustrado na imagem da figura 2.7.
Figura 2.7 – Visão esquemática de alocação em memória de uma matrix (considerando um conjunto
de vetores).
A figura 2.8 ilustra a definição da matriz data como uma lista de 2 dimensões
denominada de data, acessos à uma linha inteira data[0], um determinado elemento
data[1][2] (2ª linha e 3a coluna), um determinado elemento data[2][5] (3ª linha e 6ª coluna),
e a sua visão gráfica esquemática.
Figura 2.8 – Definição da matriz data como uma lista de 2 dimensões, alguns acessos aos seus
elementos e a sua visão gráfica esquemática.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
Quando criamos uma matriz por exemplo (4x2) do tipo inteiro, podemos escrever
inicializados com zero
A alocação das células desta matriz pode ser entendida da seguinte forma
Como em Python, matrizes são na verdade lista de listas, podemos ter números
diferentes de colunas para cada linha.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
Exemplo:
O campo 𝑙𝑒𝑛 está disponível para descobrirmos o tamanho dos vetores quando
necessário. Para a matriz mat anterior, temos:
Será impresso
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi
https://leetcode.com/problem-list/array/
https://www.geeksforgeeks.org/explore?page=1&category=Arrays&sortBy=submissions&ref=shm
Visite o sítio
https://introcs.cs.princeton.edu/python/14array/