SlideShare uma empresa Scribd logo
1 de 32
INE5408
Estruturas de Dados
Estruturas de Dados básicas
utilizando Vetores
- Introdução
- Pilhas usando Vetores
- Filas usando Vetores
Estruturas de Dados - Definição
Estruturas de Dados é a disciplina que estuda
as técnicas computacionais para a
organização e manipulação eficiente de
quaisquer quantidades de informação.
Estruturas de Dados - Aspectos
Em um projeto de software, 2 aspectos devem ser
considerados:
• de que forma estão organizados os dados - qual a
sua estrutura;
• quais procedimentos atuam sobre estes dados - que
operações podem ser realizadas sobre eles.
Ao estudar estruturas de dados teremos sempre este
par:
• um conjunto estruturado de informações:
– uma classe de objetos ou um tipo de dados;
• um conjunto definido de operações sobre estes
dados:
– um conjunto de métodos ou funções.
Pilhas
20
55
4
12
89
24 A Pilha é uma estrutura de dados
cujo funcionamento é inspirado
no de uma pilha “natural”.
Pilhas usando Vetores
-1
20
55
4
12
89
0
1
2
3
4
24
5
Pilha
cheia
Pilha
vazia
• Vetores possuem um espaço
limitado para armazenar
dados;
• necessitamos definir um
espaço grande o suficiente
para a nossa pilha;
• necessitamos de um
indicador de qual elemento
do vetor é o atual topo da
pilha.
Implementação de Pilhas utilizando
Programação Estruturada
• Implementaremos a Estrutura de Dados Pilha
utilizando a técnica da Programação
Estruturada.
– Programação Estruturada: inventada por Niklaus
Wirth (década 70) - também chamada de
“Programação sem GoTo”
• Procedimento Didático:
– Revisão/introdução de Programação Estruturada;
– modelagem da Pilha e de seus algoritmos usando
esta técnica.
Programação Estruturada
• Baseada na expressão de algoritmos única e
exclusivamente através de 4 grupos de
estruturas de controle:
– bloco: comando ou conjunto de comandos sempre
executados em seqüência.
Ex.: (Pascal): begin … end;
– estrutura condicional: SE-ENTÃO-SENÃO
Ex.: (Pascal): if (cond) then bloco1 else bloco2;
– estrutura de repetição: ENQUANTO COND FAÇA
BLOCO
Ex.: (Pascal): while (cond) do bloco;
– estrutura de abstração: procedimento ou função.
Agrupamento de comandos com um nome e
eventualmente também parâmetros nomeados.
Programação Estruturada
• Para nós parece um retrocesso.
• Na época:
– fazia-se programas completamente ininteligíveis;
– foi um grande avanço no sentido de:
• produzir código mais fácil de se manter e entender;
• produzir código com mais qualidade.
• A Programação Estruturada definiu:
– uma nova disciplina na programação;
– um novo grupo de linguagens de programação, a 3ª
Geração.
• Exemplos: Pascal, Algol, C, PL/1
• Ainda muito utilizada hoje em dia:
– Sistemas Operacionais;
– Análise Numérica/Computação Gráfica;
– Redes de Computadores.
Programação Estruturada
• Não existem objetos:
– dados e seu comportamento são considerados em separado;
– unificar uma estrutura de dados com as operações definidas
sobre a mesma é função do programador.
• Existem variáveis e tipos (dados):
– variáveis podem ser globais ou locais (escopo);
– tipos podem ser primitivos, derivados ou estruturados.
• Existem procedimentos e funções (comportamento):
– conjunto de comandos referenciados por um nome;
– um procedimento é especial e se chama Programa Principal.
Programação Estruturada
• Modelamos as estruturas de dados propriamente
ditas como um tipo estruturado:
– estrutura é uma coleção de variáveis referenciada por um
mesmo nome;
– imagine um objeto sem métodos;
– chamamos a cada elemento desta coleção de campo.
• Algoritmicamente:
tipo Empregado {
caracter nome[100];
caracter cargo[20];
caracter endereço[200];
inteiro salário;
};
Variáveis
Empregado chefe;
Campos
Variável global
Programação Estruturada
• Modelamos as operações sobre uma estrutura de dados como
procedimentos ou funções:
– variáveis globais valem dentro de qualquer função (escopo global).
• Antes de vermos alocação dinâmica de memória e ponteiros vamos
trabalhar com funções sem alguns parâmetros.
• Algoritmicamente:
Variáveis
Empregado chefe;
Procedimento baixaSalário (inteiro porcentagem)
variáveis
real auxiliar;
início
auxiliar <- chefe.salário * (porcentagem / 100);
chefe.salário <- chefe.salário - auxiliar;
fim;
Modelagem da Pilha
• Aspecto Estrutural:
– necessitamos de um vetor para armazenar as informações;
– necessitamos de um indicador da posição atual do topo da
pilha;
– necessitamos de uma constante que nos diga quando a pilha
está cheia e duas outras para codificar erros.
• Pseudo-código:
constantes MAXPILHA = 100;
tipo Pilha {
inteiro dados[MAXPILHA];
inteiro topo;
};
Modelagem da Pilha
• Aspecto Funcional:
– colocar e retirar dados da pilha;
– testar se a pilha está vazia ou cheia;
– C.
• Colocar e retirar dados da pilha:
– Empilha(dado)
– Desempilha(dado)
– Topo
• Testar se a pilha está vazia ou cheia:
– PilhaCheia
– PilhaVazia
• Inicializar ou limpar:
– InicializaPilha
Algoritmo InicializaPilha
FUNÇÃO inicializaPilha()
início
aPilha.topo <- -1;
fim;
Observação: este e os próximos algoritmos
pressupõem que foi definida uma variável
global tipo Pilha denominada aPilha.
Algoritmo PilhaCheia
Booleano FUNÇÃO pilhaCheia()
início
SE (aPilha.topo = MAXPILHA - 1) ENTÃO
RETORNE(Verdadeiro)
SENÃO
RETORNE(Falso);
fim;
Algoritmo PilhaVazia
Booleano FUNÇÃO pilhaVazia()
início
SE (aPilha.topo = -1) ENTÃO
RETORNE(Verdadeiro)
SENÃO
RETORNE(Falso);
fim;
Algoritmo Empilha
Constantes
ERROPILHACHEIA = -1;
ERROPILHAVAZIA = -2;
Inteiro FUNÇÃO empilha(inteiro dado)
início
SE (pilhaCheia) ENTÃO
RETORNE(ERROPILHACHEIA);
SENÃO
aPilha.topo <- aPilha.topo + 1
aPilha.dados[aPilha.topo] <- dado;
RETORNE(aPilha.topo);
FIM SE
fim;
Algoritmo Desempilha
Inteiro FUNÇÃO desempilha()
início
SE (pilhaVazia) ENTÃO
RETORNE(ERROPILHAVAZIA);
SENÃO
aPilha.topo <- aPilha.topo - 1;
RETORNE(aPilha.topo);
FIM SE
fim;
Algoritmo Desempilha - Variante
Inteiro FUNÇÃO desempilha()
início
SE (pilhaVazia) ENTÃO
ESCREVA(“ERRO: Pilha vazia ao tentar
desempilhar!”);
RETORNE(ERROPILHAVAZIA);
SENÃO
aPilha.topo <- aPilha.topo - 1;
RETORNE(aPilha.dados[aPilha.topo +
1]);
FIM SE
fim;
Algoritmo Topo
Inteiro FUNÇÃO topo()
início
SE (pilhaVazia) ENTÃO
ESCREVA(“ERRO: Pilha vazia ao
acessar!”);
RETORNE(ERROPILHAVAZIA);
SENÃO
RETORNE(aPilha.dados[aPilha.topo]);
FIM SE
fim;
Modelagem da Pilha com Vetor - Trabalho 1
• Implemente todas as operações vistas sobre pilha;
• implemente um programa principal que utilize a pilha através
de um menu com os seguintes itens: empilhar, desempilhar,
limpar, mostrar pilha, sair do programa. Use a estrutura de
programação switch do "C" para isto;
• ao mostrar a pilha, o programa deve colocar embaixo de cada
dado, a sua posição no vetor. Utilize as opções de definição
de tamanho de campo de impressão do printf() para isto;
• a pilha possuirá tamanho máximo 30, definido como uma
constante chamada MAXPILHA. Utilize esta constante para a
definição da estrutura de dados que será a pilha;
• a pilha será referenciada por uma variável global.
Filas usando Vetores
• A Fila é uma estrutura de dados que simula uma fila
da vida real.
• Possui duas operações básicas:
– incluir no fim da fila;
– retirar do começo da fila;
– chamada de Estrutura-FIFO:
First-In, First-Out - O primeiro que entrou é o
primeiro a sair…
Fila
Filas
• É uma estrutura de dados importantíssima para:
– gerência de dados/processos por ordem cronológica:
• Fila de impressão em uma impressora de rede;
• Fila de pedidos de uma expedição ou tele-entrega.
– simulação de processos seqüenciais:
• chão de fábrica: fila de camisetas a serem estampadas;
• comércio: simulação de fluxo de um caixa de
supermercado;
• tráfego: simulação de um cruzamento com um semáforo.
Fila
Filas
• É uma estrutura de dados importantíssima para:
– gerência de dados/processos por ordem cronológica:
• Fila de impressão em uma impressora de rede;
• Fila de pedidos de uma expedição ou tele-entrega.
– simulação de processos seqüenciais:
• chão de fábrica: fila de camisetas a serem estampadas;
• comércio: simulação de fluxo de um caixa de
supermercado;
• tráfego: simulação de um cruzamento com um semáforo.
Fila
Filas
• É uma estrutura de dados importantíssima para:
– gerência de dados/processos por ordem cronológica:
• Fila de impressão em uma impressora de rede;
• Fila de pedidos de uma expedição ou tele-entrega.
– simulação de processos seqüenciais:
• chão de fábrica: fila de camisetas a serem estampadas;
• comércio: simulação de fluxo de um caixa de
supermercado;
• tráfego: simulação de um cruzamento com um semáforo.
Fila
Filas
• É uma estrutura de dados importantíssima para:
– gerência de dados/processos por ordem cronológica:
• Fila de impressão em uma impressora de rede;
• Fila de pedidos de uma expedição ou tele-entrega.
– simulação de processos seqüenciais:
• chão de fábrica: fila de camisetas a serem estampadas;
• comércio: simulação de fluxo de um caixa de
supermercado;
• tráfego: simulação de um cruzamento com um semáforo.
Fila
Filas
• É uma estrutura de dados importantíssima para:
– gerência de dados/processos por ordem cronológica:
• Fila de impressão em uma impressora de rede;
• Fila de pedidos de uma expedição ou tele-entrega.
– simulação de processos seqüenciais:
• chão de fábrica: fila de camisetas a serem estampadas;
• comércio: simulação de fluxo de um caixa de
supermercado;
• tráfego: simulação de um cruzamento com um semáforo.
Fila
Filas usando Vetores
• Vetores possuem um espaço
limitado para armazenar
dados;
• necessitamos definir um
espaço grande o suficiente
para a nossa fila;
• necessitamos de um
indicador de qual elemento
do vetor é o atual fim da fila
(último);
• incluímos sempre no fim.
-1
20
55
4
12
89
0
1
2
3
4
24
5
Fila
cheia
Fila
vazia
Posição do
último
Início da fila
Algoritmo Retira
• Procedimento:
•testamos se há elementos;
•decrementamos o fim da fila
(último);
•salvamos o primeiro elemento
em variável auxiliar;
•empurramos tudo para a
frente.
• Parâmetros:
•fila (global).
5
4
20
55
4
12
89
24
55
4
12
89
24
20
Início da fila
Posição do
último
Modelagem da Fila com Vetor
• Aspecto Funcional:
– colocar e retirar dados da fila;
– testar se a fila está vazia ou cheia;
– C.
• Colocar e retirar dados da fila:
– Inclui(dado)
– Retira
– Último
• Testar se a fila está vazia ou cheia:
– FilaCheia
– FilaVazia
• Inicializar ou limpar:
– InicializaFila
Modelagem da Fila com Vetor - Exercício
• Inserir e retirar dados da fila: elabore um
algoritmo para retirar um elemento de
uma fila com vetor:
– utilize a mesma filosofia definida na
implementação da pilha;
– utilize um laço para percorrer o vetor;
– lembre-se de testar antes se há elementos;
– lembre-se de que se há só um elemento, a
fila ficará vazia.
Modelagem da Fila com Vetor - Trabalho 2
• Implemente todas as operações vistas sobre fila;
• implemente um programa principal que utilize a fila
através de um menu com os seguintes itens:
enfileirar, desenfileirar, limpar, mostrar fila, sair do
programa. Use a estrutura de programação switch
do "C" para isto;
• a fila possuirá tamanho máximo 100, definido como
uma constante chamada MAXFILA. Utilize esta
constante para a definição da estrutura de dados
que será a fila;
• a fila será referenciada por uma variável global;
• para implementar a estrutura de dados defina um
tipo elementoDaFila que será char[40] e defina a
sua fila como um vetor de 100 elementoDaFila.

Mais conteúdo relacionado

Semelhante a Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt

Análise essencial e análise estruturada
Análise essencial e análise estruturadaAnálise essencial e análise estruturada
Análise essencial e análise estruturadaWagner Bonfim
 
Apresentação - Estruturas de Dados
Apresentação - Estruturas de DadosApresentação - Estruturas de Dados
Apresentação - Estruturas de Dadosrodrigopinto77
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...André Leon S. Gradvohl
 
Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009
Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009
Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009Pedro A. Uamusse
 
Uso Do Arena Em Simulacao
Uso Do Arena Em SimulacaoUso Do Arena Em Simulacao
Uso Do Arena Em SimulacaoPrydigo
 
Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019
Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019
Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019Eduardo S. Pereira
 
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e CoberturaTestes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e CoberturaTiago Antônio da Silva
 
Real time replication using Kafka Connect
Real time replication using Kafka ConnectReal time replication using Kafka Connect
Real time replication using Kafka Connectconfluent
 
Data warehouse & olap
Data warehouse & olapData warehouse & olap
Data warehouse & olapBrian Supra
 

Semelhante a Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt (20)

Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Python 04
Python 04Python 04
Python 04
 
Análise essencial e análise estruturada
Análise essencial e análise estruturadaAnálise essencial e análise estruturada
Análise essencial e análise estruturada
 
Apresentação - Estruturas de Dados
Apresentação - Estruturas de DadosApresentação - Estruturas de Dados
Apresentação - Estruturas de Dados
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Oracle | Estatísticas
Oracle | EstatísticasOracle | Estatísticas
Oracle | Estatísticas
 
Aula 01
Aula 01Aula 01
Aula 01
 
Aula3
Aula3Aula3
Aula3
 
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
 
P910Aula07
P910Aula07P910Aula07
P910Aula07
 
Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009
Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009
Tema 5 -_as_-_modelacao_do_fluxo_de_dados_-_dc_dfd_2009
 
Kafer2014.pdf
Kafer2014.pdfKafer2014.pdf
Kafer2014.pdf
 
Uso Do Arena Em Simulacao
Uso Do Arena Em SimulacaoUso Do Arena Em Simulacao
Uso Do Arena Em Simulacao
 
Aula 7 pc - estrutura
Aula 7   pc - estruturaAula 7   pc - estrutura
Aula 7 pc - estrutura
 
FME - Para que serve?
FME - Para que serve?FME - Para que serve?
FME - Para que serve?
 
Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019
Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019
Algoritmo e Estrutura de dados em C - Aula 04 e 05 - 2019
 
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e CoberturaTestes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
 
Real time replication using Kafka Connect
Real time replication using Kafka ConnectReal time replication using Kafka Connect
Real time replication using Kafka Connect
 
Data warehouse & olap
Data warehouse & olapData warehouse & olap
Data warehouse & olap
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 

Mais de ssuserd654cb1

Aula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptxAula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptxssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptssuserd654cb1
 
Aula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.pptAula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptssuserd654cb1
 
Aula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.pptAula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptAula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptssuserd654cb1
 
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.pptAula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.pptssuserd654cb1
 

Mais de ssuserd654cb1 (11)

Aula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptxAula sobre Brainstorming 07.09.2022.pptx
Aula sobre Brainstorming 07.09.2022.pptx
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
 
Aula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.pptAula_6b_-_Listas_Circulares.ppt
Aula_6b_-_Listas_Circulares.ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
 
Aula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.pptAula_02_-_Listas_com_Vetores-OOP.ppt
Aula_02_-_Listas_com_Vetores-OOP.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.pptAula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
 
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.pptAula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
Aula_01_-_Apresenta_o_e_Programa_da_Disciplina_2012-1.ppt
 

Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt

  • 1. INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Introdução - Pilhas usando Vetores - Filas usando Vetores
  • 2. Estruturas de Dados - Definição Estruturas de Dados é a disciplina que estuda as técnicas computacionais para a organização e manipulação eficiente de quaisquer quantidades de informação.
  • 3. Estruturas de Dados - Aspectos Em um projeto de software, 2 aspectos devem ser considerados: • de que forma estão organizados os dados - qual a sua estrutura; • quais procedimentos atuam sobre estes dados - que operações podem ser realizadas sobre eles. Ao estudar estruturas de dados teremos sempre este par: • um conjunto estruturado de informações: – uma classe de objetos ou um tipo de dados; • um conjunto definido de operações sobre estes dados: – um conjunto de métodos ou funções.
  • 4. Pilhas 20 55 4 12 89 24 A Pilha é uma estrutura de dados cujo funcionamento é inspirado no de uma pilha “natural”.
  • 5. Pilhas usando Vetores -1 20 55 4 12 89 0 1 2 3 4 24 5 Pilha cheia Pilha vazia • Vetores possuem um espaço limitado para armazenar dados; • necessitamos definir um espaço grande o suficiente para a nossa pilha; • necessitamos de um indicador de qual elemento do vetor é o atual topo da pilha.
  • 6. Implementação de Pilhas utilizando Programação Estruturada • Implementaremos a Estrutura de Dados Pilha utilizando a técnica da Programação Estruturada. – Programação Estruturada: inventada por Niklaus Wirth (década 70) - também chamada de “Programação sem GoTo” • Procedimento Didático: – Revisão/introdução de Programação Estruturada; – modelagem da Pilha e de seus algoritmos usando esta técnica.
  • 7. Programação Estruturada • Baseada na expressão de algoritmos única e exclusivamente através de 4 grupos de estruturas de controle: – bloco: comando ou conjunto de comandos sempre executados em seqüência. Ex.: (Pascal): begin … end; – estrutura condicional: SE-ENTÃO-SENÃO Ex.: (Pascal): if (cond) then bloco1 else bloco2; – estrutura de repetição: ENQUANTO COND FAÇA BLOCO Ex.: (Pascal): while (cond) do bloco; – estrutura de abstração: procedimento ou função. Agrupamento de comandos com um nome e eventualmente também parâmetros nomeados.
  • 8. Programação Estruturada • Para nós parece um retrocesso. • Na época: – fazia-se programas completamente ininteligíveis; – foi um grande avanço no sentido de: • produzir código mais fácil de se manter e entender; • produzir código com mais qualidade. • A Programação Estruturada definiu: – uma nova disciplina na programação; – um novo grupo de linguagens de programação, a 3ª Geração. • Exemplos: Pascal, Algol, C, PL/1 • Ainda muito utilizada hoje em dia: – Sistemas Operacionais; – Análise Numérica/Computação Gráfica; – Redes de Computadores.
  • 9. Programação Estruturada • Não existem objetos: – dados e seu comportamento são considerados em separado; – unificar uma estrutura de dados com as operações definidas sobre a mesma é função do programador. • Existem variáveis e tipos (dados): – variáveis podem ser globais ou locais (escopo); – tipos podem ser primitivos, derivados ou estruturados. • Existem procedimentos e funções (comportamento): – conjunto de comandos referenciados por um nome; – um procedimento é especial e se chama Programa Principal.
  • 10. Programação Estruturada • Modelamos as estruturas de dados propriamente ditas como um tipo estruturado: – estrutura é uma coleção de variáveis referenciada por um mesmo nome; – imagine um objeto sem métodos; – chamamos a cada elemento desta coleção de campo. • Algoritmicamente: tipo Empregado { caracter nome[100]; caracter cargo[20]; caracter endereço[200]; inteiro salário; }; Variáveis Empregado chefe; Campos Variável global
  • 11. Programação Estruturada • Modelamos as operações sobre uma estrutura de dados como procedimentos ou funções: – variáveis globais valem dentro de qualquer função (escopo global). • Antes de vermos alocação dinâmica de memória e ponteiros vamos trabalhar com funções sem alguns parâmetros. • Algoritmicamente: Variáveis Empregado chefe; Procedimento baixaSalário (inteiro porcentagem) variáveis real auxiliar; início auxiliar <- chefe.salário * (porcentagem / 100); chefe.salário <- chefe.salário - auxiliar; fim;
  • 12. Modelagem da Pilha • Aspecto Estrutural: – necessitamos de um vetor para armazenar as informações; – necessitamos de um indicador da posição atual do topo da pilha; – necessitamos de uma constante que nos diga quando a pilha está cheia e duas outras para codificar erros. • Pseudo-código: constantes MAXPILHA = 100; tipo Pilha { inteiro dados[MAXPILHA]; inteiro topo; };
  • 13. Modelagem da Pilha • Aspecto Funcional: – colocar e retirar dados da pilha; – testar se a pilha está vazia ou cheia; – C. • Colocar e retirar dados da pilha: – Empilha(dado) – Desempilha(dado) – Topo • Testar se a pilha está vazia ou cheia: – PilhaCheia – PilhaVazia • Inicializar ou limpar: – InicializaPilha
  • 14. Algoritmo InicializaPilha FUNÇÃO inicializaPilha() início aPilha.topo <- -1; fim; Observação: este e os próximos algoritmos pressupõem que foi definida uma variável global tipo Pilha denominada aPilha.
  • 15. Algoritmo PilhaCheia Booleano FUNÇÃO pilhaCheia() início SE (aPilha.topo = MAXPILHA - 1) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;
  • 16. Algoritmo PilhaVazia Booleano FUNÇÃO pilhaVazia() início SE (aPilha.topo = -1) ENTÃO RETORNE(Verdadeiro) SENÃO RETORNE(Falso); fim;
  • 17. Algoritmo Empilha Constantes ERROPILHACHEIA = -1; ERROPILHAVAZIA = -2; Inteiro FUNÇÃO empilha(inteiro dado) início SE (pilhaCheia) ENTÃO RETORNE(ERROPILHACHEIA); SENÃO aPilha.topo <- aPilha.topo + 1 aPilha.dados[aPilha.topo] <- dado; RETORNE(aPilha.topo); FIM SE fim;
  • 18. Algoritmo Desempilha Inteiro FUNÇÃO desempilha() início SE (pilhaVazia) ENTÃO RETORNE(ERROPILHAVAZIA); SENÃO aPilha.topo <- aPilha.topo - 1; RETORNE(aPilha.topo); FIM SE fim;
  • 19. Algoritmo Desempilha - Variante Inteiro FUNÇÃO desempilha() início SE (pilhaVazia) ENTÃO ESCREVA(“ERRO: Pilha vazia ao tentar desempilhar!”); RETORNE(ERROPILHAVAZIA); SENÃO aPilha.topo <- aPilha.topo - 1; RETORNE(aPilha.dados[aPilha.topo + 1]); FIM SE fim;
  • 20. Algoritmo Topo Inteiro FUNÇÃO topo() início SE (pilhaVazia) ENTÃO ESCREVA(“ERRO: Pilha vazia ao acessar!”); RETORNE(ERROPILHAVAZIA); SENÃO RETORNE(aPilha.dados[aPilha.topo]); FIM SE fim;
  • 21. Modelagem da Pilha com Vetor - Trabalho 1 • Implemente todas as operações vistas sobre pilha; • implemente um programa principal que utilize a pilha através de um menu com os seguintes itens: empilhar, desempilhar, limpar, mostrar pilha, sair do programa. Use a estrutura de programação switch do "C" para isto; • ao mostrar a pilha, o programa deve colocar embaixo de cada dado, a sua posição no vetor. Utilize as opções de definição de tamanho de campo de impressão do printf() para isto; • a pilha possuirá tamanho máximo 30, definido como uma constante chamada MAXPILHA. Utilize esta constante para a definição da estrutura de dados que será a pilha; • a pilha será referenciada por uma variável global.
  • 22. Filas usando Vetores • A Fila é uma estrutura de dados que simula uma fila da vida real. • Possui duas operações básicas: – incluir no fim da fila; – retirar do começo da fila; – chamada de Estrutura-FIFO: First-In, First-Out - O primeiro que entrou é o primeiro a sair… Fila
  • 23. Filas • É uma estrutura de dados importantíssima para: – gerência de dados/processos por ordem cronológica: • Fila de impressão em uma impressora de rede; • Fila de pedidos de uma expedição ou tele-entrega. – simulação de processos seqüenciais: • chão de fábrica: fila de camisetas a serem estampadas; • comércio: simulação de fluxo de um caixa de supermercado; • tráfego: simulação de um cruzamento com um semáforo. Fila
  • 24. Filas • É uma estrutura de dados importantíssima para: – gerência de dados/processos por ordem cronológica: • Fila de impressão em uma impressora de rede; • Fila de pedidos de uma expedição ou tele-entrega. – simulação de processos seqüenciais: • chão de fábrica: fila de camisetas a serem estampadas; • comércio: simulação de fluxo de um caixa de supermercado; • tráfego: simulação de um cruzamento com um semáforo. Fila
  • 25. Filas • É uma estrutura de dados importantíssima para: – gerência de dados/processos por ordem cronológica: • Fila de impressão em uma impressora de rede; • Fila de pedidos de uma expedição ou tele-entrega. – simulação de processos seqüenciais: • chão de fábrica: fila de camisetas a serem estampadas; • comércio: simulação de fluxo de um caixa de supermercado; • tráfego: simulação de um cruzamento com um semáforo. Fila
  • 26. Filas • É uma estrutura de dados importantíssima para: – gerência de dados/processos por ordem cronológica: • Fila de impressão em uma impressora de rede; • Fila de pedidos de uma expedição ou tele-entrega. – simulação de processos seqüenciais: • chão de fábrica: fila de camisetas a serem estampadas; • comércio: simulação de fluxo de um caixa de supermercado; • tráfego: simulação de um cruzamento com um semáforo. Fila
  • 27. Filas • É uma estrutura de dados importantíssima para: – gerência de dados/processos por ordem cronológica: • Fila de impressão em uma impressora de rede; • Fila de pedidos de uma expedição ou tele-entrega. – simulação de processos seqüenciais: • chão de fábrica: fila de camisetas a serem estampadas; • comércio: simulação de fluxo de um caixa de supermercado; • tráfego: simulação de um cruzamento com um semáforo. Fila
  • 28. Filas usando Vetores • Vetores possuem um espaço limitado para armazenar dados; • necessitamos definir um espaço grande o suficiente para a nossa fila; • necessitamos de um indicador de qual elemento do vetor é o atual fim da fila (último); • incluímos sempre no fim. -1 20 55 4 12 89 0 1 2 3 4 24 5 Fila cheia Fila vazia Posição do último Início da fila
  • 29. Algoritmo Retira • Procedimento: •testamos se há elementos; •decrementamos o fim da fila (último); •salvamos o primeiro elemento em variável auxiliar; •empurramos tudo para a frente. • Parâmetros: •fila (global). 5 4 20 55 4 12 89 24 55 4 12 89 24 20 Início da fila Posição do último
  • 30. Modelagem da Fila com Vetor • Aspecto Funcional: – colocar e retirar dados da fila; – testar se a fila está vazia ou cheia; – C. • Colocar e retirar dados da fila: – Inclui(dado) – Retira – Último • Testar se a fila está vazia ou cheia: – FilaCheia – FilaVazia • Inicializar ou limpar: – InicializaFila
  • 31. Modelagem da Fila com Vetor - Exercício • Inserir e retirar dados da fila: elabore um algoritmo para retirar um elemento de uma fila com vetor: – utilize a mesma filosofia definida na implementação da pilha; – utilize um laço para percorrer o vetor; – lembre-se de testar antes se há elementos; – lembre-se de que se há só um elemento, a fila ficará vazia.
  • 32. Modelagem da Fila com Vetor - Trabalho 2 • Implemente todas as operações vistas sobre fila; • implemente um programa principal que utilize a fila através de um menu com os seguintes itens: enfileirar, desenfileirar, limpar, mostrar fila, sair do programa. Use a estrutura de programação switch do "C" para isto; • a fila possuirá tamanho máximo 100, definido como uma constante chamada MAXFILA. Utilize esta constante para a definição da estrutura de dados que será a fila; • a fila será referenciada por uma variável global; • para implementar a estrutura de dados defina um tipo elementoDaFila que será char[40] e defina a sua fila como um vetor de 100 elementoDaFila.