Você está na página 1de 9

LÓGICA DE PROGRAMAÇÃO E

ESTRUTURAS DE DADOS

Professor Marcelo Ferreira Zochio


5 ESTRUTURA DE DADOS
Neste bloco, você irá aprender como usar estruturas de dados dos tipos tuplas,
dicionários, listas, pilhas, filas e deques; também verá como aplicar o conceito de
matrizes na matemática em criptografia e aplicação prática de estruturas de dados.

5.1 Listas, dicionários e tuplas

Lista é uma sequência ordenada e armazenada de valores, que podem ser do tipo literal
ou numérico, armazenados dentro de colchetes, separados por vírgulas. Cada valor em
uma lista é localizado por um índice. Esses valores são chamados itens ou elementos de
uma lista. Listas também são conhecidas como arrays em outras linguagens de
programação. Exemplo: [1, 2, 3, 4].

Dicionários são valores também ordenados, mas concatenados entre si na estrutura


“chave:objeto”, armazenados dentro de chaves. Exemplo: {1: ‘Genilson’, 2: ‘Genoveva’,
3:’Sanderson’}

Uma tupla é uma sequência ordenada e armazenada de valores semelhante à lista.


Porém, tuplas são imutáveis. São representadas dentro de parênteses, diferente da lista,
que é representada entre colchetes. Exemplo: (‘Genilson’, ‘Sanderson’, ‘Genoveva’)

5.2 Matrizes

São estruturas bidimensionais, semelhantes a tabelas, com colunas e linhas, que contém
valores numéricos. Veja um exemplo:

2
Em Python, uma matriz pode ser representada por uma lista composta por listas:

matriz = [[1, 5, 8], [6, 7, 4], [3, 9, 1]]

Para realizar operações matemáticas com matrizes, você pode usar a biblioteca numpy;
para tal, importe-a com o comando import numpy.

import numpy

a = [[1,2], [3,4]]

# Transformando a variável em matriz da biblioteca

a = numpy.array(a)

b = [[5, 6], [7, 8]]

b = numpy.array(b)

# Mostrando o resultado da multiplicação de matrizes

print(numpy.dot(a, b))

O seguinte programa no próximo slide mostrará na tela os valores de cada posição da


matriz:

matriz = [[1, 5, 8], [6, 7, 4], [3, 9, 1]]

print(matriz[0][0])

print(matriz[0][1])

print(matriz[0][2])

print(matriz[1][0])

print(matriz[1][1])

print(matriz[1][2])

print(matriz[2][0])

print(matriz[2][1])

3
print(matriz[2][2])

Mas, e se você quiser que o usuário escolha os valores da matriz, preenchendo-os


interativamente? Eis um exemplo de programa que preenche uma matriz 2x2:

# -*- coding: cp1252 -*-

matriz = [[0]*2]+[[0]*2]

print(matriz)

matriz[0][0] = int(input("Digite o valor da posição 0,0 da matriz: "))

matriz[0][1] = int(input("Digite o valor da posição 0,1 da matriz: "))

matriz[1][0] = int(input("Digite o valor da posição 1,0 da matriz: "))

matriz[1][1] = int(input("Digite o valor da posição 1,1 da matriz: "))

print(matriz)

Note que ao invés de usar a multiplicação para criar as linhas da matriz, usamos
concatenação; isso se dá porque se usarmos multiplicação, todas as posições da matriz
serão consideradas 0,0 e 0,1 no caso dessa matriz. Então, somente serão preenchidos
os dois últimos valores que preenchermos no input em todas as posições.

4
5.3 Aplicação prática de matrizes

Agora vamos ver uma aplicação prática de matrizes. Você sabia que dá para criptografar
mensagens usando matrizes? É nisso que se baseia a cifra de Hill. Vejamos:

Escolha uma matriz 2×2 cuja determinante seja diferente de zero. Usaremos esta:

Vamos cifrar a palavra “TOUPEIRA”; atribua um valor numérico de acordo com a posição
de cada letra no alfabeto, e separe as letras em pares:

T-O U-P E-I R-A

20-15 21-16 5-9 18-1

Para codificar o par T-O, efetuamos o produto matricial em modal 26:

Que fornece o valor cifrado H-G (valores 8 e 7, respectivamente).

Para codificar o par U-P, efetuamos o produto matricial:

Que fornece o valor cifrado S-L (valores 19 e 12, respectivamente).

Para codificar o par E-I, efetuamos o produto matricial:

Que fornece o valor cifrado A-K (valores 1 e 11, respectivamente).

Para codificar o par R-A, efetuamos o produto matricial:

5
Que fornece o valor cifrado R-M (valores 18 e 13, respectivamente).

Obtemos então a cifra:

HGSLAKRM.

Para decifrar as cifras de Hill, usamos a matriz inversa (mod 26) da matriz codificadora;
daí a razão da determinante ser diferente de 0, pois só assim uma matriz quadrada é
inversível.

Como estamos trabalhando em mod 26, vamos usar a tabela de inversos multiplicativos
nesse valor modal:

A fórmula para decifrar é:

Aplicando a fórmula:

Pelas equivalências numéricas, o equivalente numérico do texto cifrado HGSLAKRM é:

8-7-19-12-1-11-18-13

6
Para obter os pares de texto plano, multiplicamos cada vetor pela inversa da matriz A:

Que fornece o valor original T-O.

Para obter os pares de texto plano, multiplicamos cada vetor pela inversa da matriz A:

Que fornece o valor original U-P.

Para obter os pares de texto plano, multiplicamos cada vetor pela inversa da matriz A:

Que fornece o valor original E-I.

Para obter os pares de texto plano, multiplicamos cada vetor pela inversa da matriz A:

Que fornece o valor original R-A.

5.4 Pilhas, filas e deques

Pilha é uma lista que permite acesso em somente uma extremidade. Os dados inseridos
vão se “empilhando”, de modo que o último que entrou será o primeiro a sair. Um
exemplo de uso dessa estrutura são as calculadoras que usam notação polonesa inversa
(A HP é uma delas).

Filas são listas em sequências de espera; aumentam através do acréscimo de novos


elementos no final e diminuem com a saída dos elementos da dianteira. Em relação à
pilha, a principal diferença é que na fila o primeiro elemento que entra é o primeiro a
ser retirado. Um exemplo clássico de uso de filas são os softwares simuladores de filas,
para estudo de comportamento de filas em call centers.

7
Deques são listas que permitem remover elementos de qualquer lugar. São usados, por
exemplo, em gerenciamento de memória RAM e em construção de programas diversos.

SAIBA MAIS

Neste vídeo, você aprenderá mais sobre pilhas, filas e deques aplicados a Python.

Vídeo: Estrutura de dados - Pilhas, Filas e Deck

ESTRUTURA de dados - Pilhas, Filas e Deck. 2014. Disponível em:


<https://www.youtube.com/watch?v=Hn_0Jb2f7hY>. Acesso em: 14 fev. 2019.

5.5 Aplicação prática de pilhas, filas e deques

Veja um exemplo de como usar pilhas na vida real: imagine uma calculadora HP. Como
ela processa as informações da expressão matemática a seguir?

((1 + 1) * 4) + 3

Veja na tabela:

1 entra operando 1
1 entra operando 1, 1
+ adicionar 2
4 entra operando 2, 4
* multiplicar 8
3 entra operando 8, 3
+ adicionar 11

Um exemplo prático do uso de filas em computação é a fila de impressão de uma


impressora. Um documento é enviado a uma impressora; se ela estiver imprimindo tal
documento e outro é enviado para impressão, este último fica na fila aguardando a saída
do primeiro para começar a sua.

8
Deques possuem várias aplicações. Quando você termina um processo em um
computador, o espaço da memória RAM que ele estava ocupando é disponibilizado para
uso, podendo ter antes e depois do seu endereçamento outros processos alocados. Essa
é uma operação típica de deques, que permitem adição e remoção de elementos.

Conclusão

Nesse tópico, você aprendeu sobre como trabalhar com estruturas de dados na
linguagem Python. No próximo tópico, você verá como representar e trabalhar com
árvores binárias na linguagem Python.

Referências

PERKOVIC, Ljubomir. Introdução à computação usando Python: um foco no


desenvolvimento de aplicações. Rio de Janeiro: LTC, 2016.

Você também pode gostar