Você está na página 1de 76

ESTRUTURAS DE DADOS

Prof. Cristhian Riaño


Tópicos
● Introdução.
● Análise de algoritmos e algoritmos recursivos.
● Notação assintótica.
● Estruturas de dados fundamentais: vetores, vetores multidimensionais, listas
encadeadas.
● Pilhas, filas e deques.
● Árvores.
● Heaps.
● Algoritmos de ordenação.
● Tabelas de dispersão e tabelas de espalhamento.
● Grafos.
Objetivo
● Vamos aprender:

○ Quais são as principais estruturas de dados

○ Como estas estruturas funcionam

○ Como os algoritmos utilizados para acessar os dados armazenados


nestas estrutuas funcionam

● Ao final do curso deveremos saber:

○ Qual estrutura de dados é mais adequada para solucionar determinado


problema e quais são as implicações de sua utilização (custos, etc...)
Introdução
O desenvolvimento de software é uma atividade bem consolidada usada na solução
de problemas complexos para transformar as necessidades de usuário ou de um
mercado em um produto software. Devido à enorme flexibilidade que apresentam os
sistemas desenvolvidos, encontramos aplicação em quase qualquer situação
cotidiana.

Produção Seguridade Transporte Economia


Introdução
A natureza abstrata que abrange o desenvolvimento de software tem tanto pontos
fortes como fraquezas. O ponto forte é que consegui ser aplicado na solução de
qualquer domínio de problema. A principal fraqueza é devido ao difícil aceso e
barreiras que dificultam inserir caraterísticas naturais do comportamento humano
que usamos para interagir nosso mundo físico.

● Intuição
● Aprendizagem
● Percepção
● Resposta a estímulos
● Compreensão
● Entendimento
Paradigmas de programação
Um paradigma de programação é um médio de classificar as linguagens baseado
em suas funcionalidades, estruturação e execução do programa. As linguagens de
programação se enquadram em um ou vários paradigmas devido ao tipo
de ordenes que permitem implementar.
Paradigmas de programação
A programação estruturada opera com três estruturas de controle básicas:

Sequenciais Desvio
Laço
Conceitos de base

● Sistema
● Subsistema
● Programa
● Modulo

○ Classe

○ Função

○ Bloco de código

○ Linha de código
Conceitos de base
● Sistema:

○ Composto por um conjunto de elementos

○ Elementos são conectados

○ Elementos conectados compõem um todo.

○ Um sistema pode ser descrito por um ou mais modelos.

○ Sistema computacional esta composto por hardware e software.

○ Sistema computacional processa dados com um objetivo bem definido.


Conceitos de base
● Subsistema

○ Um sistema e é parte de outro sistema.

○ Possibilita a decomposição de sistemas complexos.


● Programa

○ Lista de instruções organizada.

○ Escrito para uma arquitetura de computador .

○ Escrito em uma linguagem de programação.

○ É composto por um ou mais módulos.


Conceitos de base
● Modulo

○ Elemento autocontido de um programa.

○ Implementa conceitos lógicos bem delimitados.

○ Tem interfaces bem definidas.

○ É uma unidade de compilação independente.

○ Pode ser independentemente desenvolvido..

○ Pode conter varias rutina e classes.

○ Promove o encapsulamento.
Conceitos de Modelagem
Um modelo é uma abstração de alguma coisa, cujo proposito é conhecer algum
aspecto antes de se construí-lo. Para construir modelos complexos o
desenvolvedor deve abstrair diferentes visões do sistema, notação precisa,
verificar se os modelos satisfazem os requisitos e acrescentar detalhes
gradativamente para transformar os modelos em uma implementação.
Conceitos de Modelagem
Alguns objetivos na construção de modelos:

● Testar um elemento antes de lhe dar forma.


● Comunicação com clientes.
● Visualização.
● Redução da complexidade.
O processo de desenvolvimento de Software
Problemas relacionados ao desenvolvimento de software:

● Baixa capacidade de previsão.


● Programas com baixa qualidade.
● Altos custos de manutenção.
● Duplicação de esforços.

Para reduzir o problema, pode ser usadas tanto ferramentas técnicas (controle de
alterações, sistema para criação de referências cruzadas, editores e depuradores)
como bem incluir metodologias para o gerenciamento de software.
O processo de desenvolvimento de Software
O método voltado para suportar o processo de desenvolvimento de software
oferece uma sistemática para as fases de análise, projeto e implementação.
Métodos sistemáticos consumem mais tempo nas fases iniciais do
desenvolvimento de software, mas apresentam as seguintes vantagens:

● Verificação de requisitos.
● Conceitos mais claros.
● Maior adequação do projeto ao problema.
● Melhor decomposição do projeto para trabalho em equipe.
● Melhor comunicação da equipe de desenvolvimento.
● Menor esforço de manutenção.
O processo de desenvolvimento de Software
O processo de desenvolvimento de Software
A fase de análises define o comportamento esperado do sistema. Os modelos
do sistema são produzidos, descrevendo os seguintes elementos:

● Elementos que existem no sistema


● Relacionamento entre os elementos
● Operações que podem ser executadas no sistema
● Sequências permissíveis para essas operações

O proposito de um modelo é capturar os conceitos existentes no domínio do


problema e os relacionamentos existentes entre eles. O modelo define a
estrutura das informações contidas no sistema.
Antes do Início – Conceitos
● Logica
● Algoritmo
● Dados
● Informação
● Processamento de Dados
● Logica de Programação.
Logica
● Lógica como a Correção do pensamento. Determina quis operações são
validas e quis não são.
● Lógica visa à ordem da razão. Ensina a colocar ordem no pensamento. O
raciocínio é abstrato, intangível, mas consegui ser expressado através da
palavra falada ou escrita.
● Organização do pensamento de forma coerente.
● Permite chegar a determinadas conclusões.
● Permite escolher caminhos para resolver problemas conhecidos

Forbellone, A. L. V., & Eberspacher, H. F. (2000). Lógica de programação. Makron Books.


Logica - exemplo
1. Todo mamífero é um animal
2. Todo cavalo é um mamífero
3. Portanto, todo cavalo é um animal

1. Hoje é sábado
2. Todo sábado que não tem feriado tem aula
3. Hoje não é feriado:
4. Logo, hoje tem aula

Forbellone, A. L. V., & Eberspacher, H. F. (2000). Lógica de programação. Makron Books.


Logica - exemplo
● Torre de Hanói. Mover os três discos de uma haste para outra, considerando
as seguintes regras: pode-se mover apenas um disco de cada vez; nunca pode
ser colocado um disco maior sobre um menor.

Forbellone, A. L. V., & Eberspacher, H. F. (2000). Lógica de programação. Makron Books.


Algoritmo
● Automação: Processo em que uma tarefa deixa de ser desempenhada pelo
homem e passa a ser realizada por máquinas. Uma determinada tarefa, para
que seja automatizada, deve ter todas as etapas conhecidas, e a maquina ou
dispositivo que desempenhará este processo deverá estar apta a garantir sua
repetibilidade.
● As etapas para resolução de um processo, podemos chamar de especificação
de sequencia ordenada de passos.
● Sequência finita de passos, logicamente organizados, para resolução de um
problema conhecido.
Algoritmo - Exemplo
Troca de Lâmpada:

1. pegar uma escada;


2. posicionar a escada embaixo da lâmpada;
3. buscar uma lâmpada nova;
4. subir na escada;
5. retirar a lâmpada velha;
6. colocar a lâmpada nova.
Dado e Informação
● O dado puro e simples não carrega obrigatoriamente nenhum caráter
informativo.
● Cada tipo de informação está associado a um determinado conjunto de
dados.
● O mesmo conjunto de dados pode ser utilizado para representar
informações de natureza distintas.
● A informação necessita, além de um conjunto especifico de dados, de
regras de formação para que possa ser expressa.

Dado: Símbolo que expressa a unidade mínima da informação (Átomo da


informação).
Informação: Conjunto de dados reunidos com regras especificas a natureza de
informação.
Dados
● Dado é uma representação
simbólica de um atributo de
uma variável quantitativa ou
qualitativa.
● Dado descreve uma entidade,
evento ou atividade da vida
real.
Exemplo: A definição de uma
Classe é um metadado
Dado e Informação
Processamento de Dados
● O conceito de informação só é útil quando associado à ideia da
transmissão do conhecimento.
● A informação pura e simples, não significa basicamente nada se não for
transmitida. Ao mesmo tempo em que só pode existir comunicação, se
houver informação para ser enviada.
Podemos dizer que a informação só existe após o término de um processo
que envolve:
● A elaboração dela mesma;
● A transmissão dos dados que compõem a informação;
● A absorção por outra entidade diferente daquela que originou a informação
de todos os dados organizados de maneira idêntica à informação original.
Processamento de Dados
● O conceito de informação só é útil quando associado à ideia da
transmissão do conhecimento.
● A informação pura e simples, não significa basicamente nada se não for
transmitida. Ao mesmo tempo em que só pode existir comunicação, se
houver informação para ser enviada.
Podemos dizer que a informação só existe após o término de um processo
que envolve:
● A elaboração dela mesma;
● A transmissão dos dados que compõem a informação;
● A absorção por outra entidade diferente daquela que originou a informação
de todos os dados organizados de maneira idêntica à informação original.
Processamento de Dados
● O universo dos conjuntos de dados associados a um veiculo de
comunicação é extenso. Para que seja realizada com sucesso a
transmissão da informação, de dois elementos:

○ Que a entidade geradora saiba codificar a informação com o conjunto de


dados escolhidos.

○ Que a entidade receptora saiba decodificar a informação, através do


conjunto de dados escolhidos para a transmissão.
Logica de Programação
● Consiste em determinar uma sequencia de instruções tal que, fornecidos
os dados de entrada, a execução da sequencia de instruções redunde
como saída a solução do problema.

Exemplo:

Um senhor está numa das margens de um rio com uma raposa, uma dúzia de
galinhas e um saco de milho. El pretende atravessar o rio com sua cargas num
barco que só comporta e uma de suas cargas.

A questão é escrever uma sequencia de passos (um algoritmo) que processe


estes dados e oriente o senhor a realizar o seu intento sem que haja perda.
Logica de Programação
Um senhor está numa das margens de um rio com uma raposa, uma dúzia de
galinhas e um saco de milho. El pretende atravessar o rio com sua cargas num
barco que só comporta e uma de suas cargas.

1. Atravesse as galinhas;
2. Retorne sozinho;
3. Atravesse a raposa;
4. Retorne com as galinhas;
5. Atravesse o milho;
6. Retorne sozinho;
7. Atravesse as galinhas.
Descrição Narrativa
Inicialmente, a representação de solução de algoritmos será a Descrição
Narrativa, onde eles são expressos em linguagem natural, como se fossem
regras para utilização de um determinado aparelho, um manual.

Ao se deparar com um problema cuja necessidade de automação é eminente,


precisamos ter certeza que o compreendemos e que sabemos o que se
espera da solução.
● Identificar aquilo que se pede (Problema);
● Identificar aquilo que se espera obter (dados de saída);
● Identificar o que será necessário para o processamento (Dados de
Entrada).
● Processar esses componentes.
Descrição Narrativa
Um senhor está numa das margens de um rio com uma raposa, uma dúzia de
galinhas e um saco de milho. El pretende atravessar o rio com sua cargas num
barco que só comporta e uma de suas cargas.
Resoluções Sequenciais
Resoluções Sequenciais

1. O Problema: Atravessar mercadorias de uma 5. Detalhamento dos Dados de Entrada:


margem a outra de um rio. Barco: Comporta apenas o comerciante e uma de suas
mercadorias a cada travessia.
Mercadorias: Galinhas e raposas não podem ficar juntas.
Galinhas e Milhos não podem ficar juntos.
2. Observações Complementarias: 6. Dados de Saída:
• O barco comporta apenas o comerciante e uma Neste problema, não se obtém dados ou informações ao seu
de suas cargas; termino, apenas a resolução do problema, que é o
• Existem alguns problemas em deixar comerciante e suas mercadorias em outra margem do rio.
determinadas cargas Juntas.
3. Solução Esperada: 7. Etapas encontradas:
• Travessia do rio, sem perda de mercadorias. • Selecionar mercadoria para a travessia;
• Atravessar para a margem destino do rio enquanto haja
mercadoria;
• Retornar para a margem-origem do rio enquanto haja
mercadoria.
4. Dados de Entrada: 8. Descrição Narrativa da Solução encontrada:
Rio, Barco, Comerciante e mercadorias.
8. Descrição Narrativa da Solução encontrada
1. Atravesse as galinhas;
2. Retorne sozinho;
3. Atravesse a raposa;
4. Retorne com as galinhas;
5. Atravesse o milho;
6. Retorne sozinho;
7. Atravesse as galinhas.
Resoluções Condicionais
Nos exemplos a seguir, trabalha-se novas situações, onde há condições para
que determinada tarefa seja desempenhada. A identificação destas condições
faz parte da identificação do problema.

O governo federal implementou um plano de apoio às famílias de baixa renda,


que consiste na entrega de cesta básica. Foi determinado um local para
distribuição destas cestas e neste local encontra-se uma pessoa que solicita
algumas informações para cada cidadão que para lá se dirige. Sendo
identificada a veracidade das informações, é entregue uma cesta básica a
cada cidadão.
Resoluções Condicionais
Resoluções Sequenciais

1. O Problema: Entregar cestas básicas à 5. Detalhamento dos Dados de Entrada:


população com baixa renda. Questionário: Conjunto de perguntas que permitirão a
identificação da necessidade ou não de cesta básica.
2. Observações Complementarias: 6. Dados de Saída:
• Não são todos que tem direito à cesta básica; Caso seja identificada a necessidade de cesta básica, deve
• Deve-se, através de perguntas, identificar se o ser entregue ao cidadão, caso contrario, deve ser dito a ele
cidadão tem direito ou não à cesta básica que não possui direito.
3. Solução Esperada: 7. Etapas encontradas:
• Entrega de cesta básica apenas para quem • Solicitar ao cidadão o preenchimento do questionário;
realmente necessite. • Avaliar o questionário e identificar necessidades;
• Proceder com o cidadão de acordo a avaliação obtida
pelo questionário.
4. Dados de Entrada: 8. Descrição Narrativa da Solução encontrada:
Questionário 1. Entregar questionário para o cidadão preencher;
2. Avaliar o questionário preenchido;
3. Se o cidadão necessitar de cesta básica, então proceda
com a entrega;
4. Se cidadão não necessitar de cesta básica, então
informar que ele não tem direito.
Fluxogramas
Saiba (1993) define fluxograma como sendo uma representação gráfica de
algoritmos, onde formas geométricas diferentes implicam ações instruções. A
sequencia preferível e comumente utilizada é da esquerda para direita e de
cima para baixo.
Exemplo de Fluxogramas
Testes de programa
O teste de programa permite identificar a existência de erros de logica.
Geralmente criam-se os dados, entra-se no fluxograma e, ao término, tem se
resultados desta execução, onde podem ser comparados e analisados se
estão corretos, de acordo com os objetivos do programa.

Ao fluxograma anterior aplicar o teste de programa para simular a execução


do programa.

Dados N números, imprima a média deles. Os números negativos não


poderão fazer parte da média a ser calculada.
Exemplo de Testes de programa
1. Cria-se uma coluna para cada variável e uma coluna para saída de dados;
N I VALOR SOMA POSITIVOS MEDIA

2. Depois, anota-se nas linhas cada mudança de estado em variável ou tela;

N I VALOR SOMA POSITIVO MEDIA


S
4

3. As variáveis I, SOMA, e POSITIVOS mudaram de valor, Copiam-se os


valores das demais colunas.
Exemplo de Testes de programa
N I VALOR SOMA POSITIVOS MEDIA

4 0 0 0

N I VALOR SOMA POSITIVOS MEDIA

4 0 10 0 0

N I VALOR SOMA POSITIVOS MEDIA

4 0 10 10 1
Exemplo de Testes de programa
N I VALOR SOMA POSITIVOS MEDIA

4 0 10 10 1

4 1

N I VALOR SOMA POSITIVOS MEDIA

4 0 10 10 1

4 1 15 25 2

4 2 -5 25 2

4 3 5 30 3 10
Tópicos
● Introdução;
● Tipos de Dados;
● Primitivos, Estáticos e Dinâmicos;
● Recursividade;
● Operações;
● Definição Listas lineares;
● Pilhas, Filas e Deques;
● Representação Física;
● Exercicios.
Introdução
Estruturas de dados são encontradas em praticamente todas as áreas da computação

○ Banco de dados

○ Resultados de consultas (lista de dados)

○ Indexação de arquivos de dados (árvores de busca)

○ Sistemas operacionais

○ Controle de processos (filas de espera por recursos)

○ Computação gráfica

○ Manipulação de imagens (matrizes)

○ Compiladores

○ Validação de expressões (pilha)


Introdução
● Estruturas de Um algoritmo deve:

○ Funcionar corretamente

○ Executar o mais rápido possível

○ Utilizar a memória da melhor forma possível

○ Precisamos estudar as suas especificações e tirar conclusões sobre como a


sua implementação (o programa) irá se comportar em geral.
Tipos de Dados
Em um projeto de software, os dois aspectos mais estudados são.
● Quais procedimentos aplicar;
● Sobre quais dados os procedimentos são aplicados.

Em um principio o mais relevante consistia em definir os procedimentos. Com


o surgimento de técnicas para especificação de dados no nível conceitual, a
ênfase passou a ser dividida entre dados e procedimentos ate o ponto de
surgirem técnicas de programação com ênfase nos dados (programação
baseada em objetos).
Tipos de Dados
De uma forma geral diferenciamos os tipos de dados pelo conjunto de valores
que podem assumir e pelo conjunto de operações que podem efetuar com
eles. Podemos separar os tipos de dados em três grupos:
● Primitivos;
● Estáticos;
● Dinâmicos.
Primitivos são aqueles a partir dos quais podemos definir os demais tipos.
● Inteiros;
● Reais;
● Caracteres;
● Lógicos;
● Ponteiros
Tipos de Dados - Primitivos
Cada um desses tipos primitivos tem um conjunto de valores e operações restritos:
● Inteiro: -45; 2; 1037

○ Representa uma quantidade contável de objetos.

○ Operações: Soma, substrução, multiplicação, divisão.


● Real: -4,78; 1,25; 2,333

○ Representa um valor que pode ser fraccionado.

○ Operações: Soma, substrução, multiplicação, divisão.


● Logico: [Verdadeiro, Falso]; [0,1]

○ Representa dois estados

○ Operações: E, NÃO, OU
Tipos de Dados - Primitivos
● Caracter: “A”, “X”, “1”, “+”

○ Representa uma sequencia de dígitos, letras e sinais.

○ Operações: Igualdade, diferença, concatenação.


● Ponteiro: Representa o endereço de um dado na memoria

○ Operações: Igualdade, diferença, soma, subtração, multiplicação e divisão.


Tipos de Dados - Estáticos
Tipos de dados estáticos são aqueles que têm a estrutura completamente definida,
antes de começarmos a efetuar operações. São os tipos de dados definidos em
tempo de execução.
● Definido um tipo estático de dados ele poderá conter mais elementos do que
previsto inicialmente.
● O conteúdo pode ser modificado, mas não a suas posições na memoria.

Um exemplo de estrutura estática é o vetor (“Array”), que é uma agregado


homogêneo de dados.
Tipos de Dados - Dinâmicos
São aqueles que sofrem alteração estrutural, quando estão sendo manipulados, a
medida que ocorrem inserções e retiras de elementos.

Esse tipo de dado não tem tamanho predefinido, só ficando limitado à memoria do
computador em que se está trabalhando.

Desde o ponto de vista logico, um tipo dinâmico de dados não tem limitações,
porém, como os algoritmos de manipulação dessas estruturas são implementadas
em computadores nesta disciplina trataremos suas limitações físicas.
Recursividade
● Um algoritmo que resolve um problema grande em problemas menores, cujas
soluções requerem a aplicação dele mesmo, é chamado recursivo.

Exemplo:A função fatorial pode ser desenvolvida recursivamente.


Matematicamente é definido como:

1 si n = 0 ó 1
n!= 
n(n − 1) si n  1
Analogamente, sua expressão funcional será a seguinte:

1 si n = 0 ó 1
fac(n) = 
n * fac(n − 1) si n  1
Recursividade
Exemplo:A função fatorial pode ser desenvolvida recursivamente.
Matematicamente é definido como:

1 si n = 0 ó 1 1 si n = 0 ó 1
n!=  fac(n) = 
n(n − 1) si n  1 n * fac(n − 1) si n  1

Private Function factorial(ByVal n As Integer)


As Integer
Chamadas recursivas Avaliação de resultados
Factorial(5)=factorial(4)*5 Factorial(1)=1
If n = 1 Then Factorial(4)=factorial(3)*4 Factorial(2)=factorial(1)*2 = 1*2
Factorial(3)=factorial(2)*3 =2
factorial = 1 Factorial(2)=factorial(1)*2 Factorial(3)=factorial(2)*3 = 2*3
Factorial(1)=1 =6
Else Factorial(4)=factorial(3)*4 = 6*4
=24
factorial = n * factorial(n - 1) Factorial(5)=factorial(4)*5 = 24*5
=120
End If
End Function
Operações
Independentemente do tipo de dado, existem operações clássicas que podemos
efetuar.
● Criação, alguns linguagens de programação exigem que o tipo de dados seja
declarado antes de ser referenciado, de qualquer forma em algum momento a
estrutura de dados será criada com uma definição de criação.
● Percurso é a operação em que referenciamos todos os elementos de uma
estrutura de dados.
● Busca usada para selecionar um determinado elemento cuja complexidade
depende da estrutura utilizada e do tempo estimado para selacao de um
determinado elemento. (Verificar, utilizar ou atualizar o conteúdo de um
elemento ou ainda retirar e inserir novos elementos).
● Alteração modifica o conteúdo
Operações
● Retirada

○ No caso de estruturas estáticas não podemos que retirar um elemento, no máximo podemos
retirar os valores que ele contem, substituindo-os por outros.

○ Em uma estrutura dinâmica podemos retirar quantos elementos desejarmos, onde cada retirada
diminuímos a sua quantidade de elementos.

● Inserção, aumenta a quantidade de elementos de uma estrutura em estruturas


de dados dinâmicas.
Definição Listas lineares

Uma lista linear é uma estrutura dinâmica caraterizada por uma sequencia
ordenada de elementos, no sentido da sua posição relativa:

𝐸1 , 𝐸2 , . . . , 𝐸𝑛
Tal que:
1. Existem 𝑛 elementos na sequência;
2. 𝐸1 é o primeiro elemento da sequência;
3. 𝐸𝑛 é o ultimo elemento da sequência;
4. Para todo i, j entre 1 e n, se i<j, então o elemento 𝐸𝑖 , antecede o elemento 𝐸𝑗 ;
5. Caso i=j-1, 𝐸𝑖 é o antecessor de 𝐸𝑗 e 𝐸𝑗 é o sucessor de 𝐸𝑖 .

Uma lista linear é uma estrutura dinâmica homogênea.


Definição Listas lineares

Existem vários exemplos de listas lineares, tais como:

● Fila de clientes em um banco: existe o primeiro da fila, o ultimo da fila e os


clientes fazem com que exista uma “ordem” de atendimento1.
● Fichário: existe um numero finito de fichas que esta agrupado segundo uma
“ordem” preestabelecida, de tal forma que conseguimos identificar cada ficha.
Definição Listas lineares

Existem varias operações que podem ser realizadas em listas lineares.


● Percurso (Verificar a presença dos alunos);
● Inserção (Novos alunos são matriculados);
● Retirada (Alguns alunos eventualmente desistem);
Definição Listas lineares
● Percurso

Operação que permite utilizar cada um dos elementos de uma lista linear, de tal forma que:

○ O primeiro elemento a ser utilizado é o primeiro elemento da lista linear;

○ Para utilizar um elemento 𝐸𝑗 , todos os elementos de 𝐸1 até 𝐸𝑗 − 1 já foram utilizados;

○ O ultimo elemento utilizado é o ultimo elemento linear.


● Busca

Operação que procura um elemento especifico da lista linear. A busca pode ser efetuada de duas
formas:

○ Elemento é identificado por sua posição relativa na lista;

○ Elemento é identificado pelo seu conteúdo.


Definição Listas lineares
● Inserção

Operação que incorpora um elemento X a uma lista linear de tal forma que:

○ O elemento X terá um sucessor e/ou um antecessor.

○ A inserção é realizada de tal forma que ao inserir o elemento X na posição i, onde i está no
intervalo de 1 a (n+1), esse elemento passa a ser o i-ésimo elemento da lista linear;

○ O número de elementos (n) é acrescido de uma unidade.


Definição Listas lineares
● Retirada

Operação que retira um elemento X de uma lista linear de tal forma que:

○ Se 𝐸𝑖 é o elemento retirado, o seu sucessor passa a ser o sucessor de seu antecessor, ou seja,
𝐸𝑖 + 1 passa a ser o sucessor de 𝐸𝑖 +1. Se 𝐸𝑖 é o primeiro elemento, o seu sucessor passa a
ser o primeiro; se 𝐸𝑖 é o ultimo elemento, o seu antecessor passa a ser o ultimo;

○ O número de elementos (n) é decrescido de uma unidade.


Pilhas, Filas e Deques
Existem alguns tipos de listas lineares que possuem características especiais que
definem respeito à forma como cada uma delas é manipulada, ou seja, qual o
comportamento das operações de inserção e retirada. Essas operações são
restritas às extremidades das listas lineares, ou seja, os elementos do “interior” da
lista não são manipulados

● Phila: Uma Pilha, “Stack” é uma lista linear onde as operações de inserção e
retirada são efetuadas apenas no final da lista linear, ou seja:

○ A inserção de um elemento X torna-o o ultimo da lista linear;

○ A retirada é sempre efetuada sobre o elemento 𝐸𝑛 .


Pilhas
Existem alguns tipos de listas lineares que possuem características especiais que
definem respeito à forma como cada uma delas é manipulada, ou seja, qual o
comportamento das operações de inserção e retirada. Essas operações são
restritas às extremidades das listas lineares, ou seja, os elementos do “interior” da
lista não são manipulados

● Pilha: Uma Pilha, “Stack” é uma lista linear onde as operações de inserção e
retirada são efetuadas apenas no final da lista linear, ou seja:

○ A inserção de um elemento X torna-o o ultimo da lista linear;

○ A retirada é sempre efetuada sobre o elemento 𝐸𝑛 .


Pilhas
Devido às características das operações da pilha, o ultimo elemento a ser inserido
será o primeiro a ser retirado.

Exemplo:

Em uma rua sem saída, tão estreita que apenas um carro passa por vez, o
primeiro carro a sair será o ultimo a ter entrado. Observe ainda que podemos
retirar qualquer carro e não podemos inserir um carro de tal forma que ele não
seja o ultimo.
Filas
Uma fila “queue”, é uma lista linear onde as operações de inserção são efetuadas
apenas no final e as de retirada, apenas no inicio da lista linear, ou seja:
● A inserção de um elemento X torna-o o último da lista linear;
● A retirada é sempre efetuada sobre o elemento 𝐸1 .

Devido às características das operações da fila, o primeiro elemento a ser inserido


será o primeiro a ser retirado. Estruturas desse tipo são conhecidas como “FIFO”.

Exemplo: Uma fila de banco, onde os clientes que chegam ficam ao final da fila os
que saem, o fazem do inicio da fila
Deque
Um deque, “double-ended queue” é uma lista linear onde as operações de
inserção e retirada podem ser efetuadas tanto no inicio quanto no final da lista
linear, ou seja :
● A inserção de um elemento X pode torná-lo ou o primeiro ou o ultimo da lista
linear;
● A retirada é sempre efetuada sobre o elemento 𝐸1 ou 𝐸𝑛

Existem duas variações de Deque:


● Deque de entrada restrita, onde a inserção só pode ser efetuada ou no inicio
ou no final da lista linear.
● Deque de saída restrita, onde a retirada só pode ser efetuada ou no inicio ou
no final da lista linear.
A restrição faz com que uma das operações só possa ser efetuada em uma das
extremidades do deque.
Deque
Podemos perceber que pilha e fila são casos particulares de deque, dependendo
das restrições que fizemos quanto à inserção e retirada.

Exemplos:
● Para montar a composição de um trem, vagões são inseridos e retirados
sempre nas extremidades.
● Em uma barca para transporte de automóveis, estes podem entrar e sair por
qualquer uma das extremidades.
Representação Física
Existem duas formas de implementação:
● Alocação sequencial, onde usamos estruturas estáticas;
● Alocação encadeada, onde usamos ponteiros para identificar as sequencias de
elementos da lista linear.

A maneira mais simples de armazenarmos uma lista na memória é colocando os


seus nós em posições sucessivas.

Tamanho do nó
(TamNo)

Localizacao inicial da lista (LocIni)


Representação Física
Considere que Loc é a localização de um nó na memoria, TamNó é o número de
“Unidade de memoria” que cada nó ocupa, ou seja o tamanho do nó (em bytes,
palavras, etc.), 𝑋𝑛 o n-ésimo nó de uma lista 𝑋 e que LocIni = Loc(X1)

• O acesso a qualquer nó em uma lista linear


Tamanho do nó alocada sequencialmente baseia-se em uma
(TamNó) formula matemática. Com isso temos um tempo
fixo de acesso a qualquer nó, dada a sua ordem na
Localizacao inicial da lista (LocIni)
estrutura.

Loc (X1) = LocIni • A alocação sequencial exige uma área contigua de


Loc (X2) = LocIni + TamNó memoria correspondente ao tamanho previsto da
Loc (X3) = LocIni + (2*TamNó) estrutura
.
.
.
Loc (Xj) = LocIni+ ((j-1)*TamNó )
Lista Lineares em Geral
Uma lista linear em geral, armazenada em memória de forma sequencial necessita, de
uma variável ponteiro externa (PtrIni) que contenha o endereço do primeiro nó da
estrutura. Uma vez conhecido esse endereço podemos ter acesso a todos os nós da
lista.

O algoritmo de busca de um nó em uma lista linear sequencial existente, cujo endereço


do primeiro nó é PtrIni, e o valor procurado em um determinado campo do nó é
igual a “00345”
<1> Chave Campo do nó da lista alocada de forma sequencial}
<2> PtrIni {Ponteiro do primeiro nó da lista}
<3> PtrTrb {Ponteiro de trabalho para a busca}
<4>
<5> Inicio
<6> PtrTrb <- PtrIni
<7> ENQUANTO Chave (PtrTrb) <> “00345” Faca
<8> PtrTrb <- PtrTrb +1
<9> Fim
Lista Lineares em Geral
<1> Chave Campo do nó da lista alocada de forma sequencial}
<2> PtrIni {Ponteiro do primeiro nó da lista}
<3> PtrTrb {Ponteiro de trabalho para a busca}
<4> PtrFim {Ponteiro do ultimo nó da lista }
<5> Inicio
<6> PtrTrb <- PtrIni
<7> ENQUANTO (Ptrb <= PtrFim) E Chave (PtrTrb) <> “00345” Faca
<8> PtrTrb <- PtrTrb +1
<9> Fim
Além de posição do primeiro e do ultimo nó da lista são necessárias mas duas
informações para definir o limite da área da memoria que pode ser utilizado para
implementarmos a estrutura:

● A posição que indica o primeiro nó do vetor que pode ser utilizado pela lista
(IndIniLst);

● A posição que indica o ultimo nó do vetor que pode ser utilizado pela lista
(IndFimLst)
Representação Física
Ptrini PtrFim

X X X
IndIni IndFim

IndIniLst IndFimLst

● Se a lista estiver vazia e o primeiro nó for inserido, PtrIni =PtrFim =IndIniLst;


● Se a lista estiver utilizando toda a área de memoria disponível para a sua
implementação, PtrFim =IndFimLst, e dizemos que a lista está cheia.;
● A memoria do comutador pode ser representada como um vetor, onde cada
elemento é uma palavra de memoria;
● Uma lista linear é representada fisicamente na memoria do computador, quando
usamos alocação sequencial, através de um vetor. Na realidade varias listas podem
ser implementadas sobre um mesmo vetor.
Exercício 1: Recursividade
Multiplique dois números usando somas sucessivas.
A*B = A+A+A+ . . . . . . . . . +A

Para o caso geral:

A * B = Multi( A, B) = i =1 A = i =1 A + A
B B −1
Exercício 2: Recursividade
Combine os dígitos de dois números, os números têm os mesmos dígitos
Exercício 3: Recursividade
Encontre a soma dos primeiros N números pares.

Você também pode gostar