You are on page 1of 32

INE5408

Estruturas de Dados
Estruturas de Dados bsicas
utilizando Vetores
- Introduo
- Pilhas usando Vetores
- Filas usando Vetores

Estruturas de Dados - Definio


Estruturas de Dados a disciplina que estuda
as tcnicas computacionais para a
organizao e manipulao eficiente de
quaisquer quantidades de informao.

Estruturas de Dados - Aspectos


Em um projeto de software, 2 aspectos devem ser
considerados:
de que forma esto organizados os dados - qual a sua
estrutura;
quais procedimentos atuam sobre estes dados - que
operaes podem ser realizadas sobre eles.
Ao estudar estruturas de dados teremos sempre este
par:
um conjunto estruturado de informaes:
uma classe de objetos ou um tipo de dados;

um conjunto definido de operaes sobre estes dados:


um conjunto de mtodos ou funes.

Pilhas
24
89
12
4
55
20

A Pilha uma estrutura de


dados cujo funcionamento
inspirado no de uma pilha
natural.

Pilhas usando Vetores

24
89
12
4
55
20

Vetores possuem um
Pilha
espao
cheia
limitado para armazenar
dados;
necessitamos definir um
espao grande o
suficiente para a nossa
Pilha pilha;
vazia necessitamos de um
-1
4
3
2
1
0
5
indicador de qual
elemento do vetor o
atual topo da pilha.

Implementao de Pilhas utilizando


Programao Estruturada
Implementaremos a Estrutura de Dados Pilha
utilizando a tcnica da Programao
Estruturada.
Programao Estruturada: inventada por Niklaus
Wirth (dcada 70) - tambm chamada de
Programao sem GoTo

Procedimento Didtico:
Reviso/introduo de Programao Estruturada;
modelagem da Pilha e de seus algoritmos usando
esta tcnica.

Programao Estruturada
Baseada na expresso de algoritmos nica e
exclusivamente atravs de 4 grupos de
estruturas de controle:
bloco: comando ou conjunto de comandos sempre
executados em seqncia.
Ex.: (Pascal): begin end;
estrutura condicional: SE-ENTO-SENO
Ex.: (Pascal): if (cond) then bloco1 else bloco2;
estrutura de repetio: ENQUANTO COND FAA
BLOCO
Ex.: (Pascal): while (cond) do bloco;
estrutura de abstrao: procedimento ou funo.
Agrupamento de comandos com um nome e
eventualmente tambm parmetros nomeados.

Programao Estruturada
Para ns parece um retrocesso.
Na poca:
fazia-se programas completamente ininteligveis;
foi um grande avano no sentido de:
produzir cdigo mais fcil de se manter e entender;
produzir cdigo com mais qualidade.

A Programao Estruturada definiu:


uma nova disciplina na programao;
um novo grupo de linguagens de programao, a 3 Gerao.
Exemplos: Pascal, Algol, C, PL/1

Ainda muito utilizada hoje em dia:


Sistemas Operacionais;
Anlise Numrica/Computao Grfica;
Redes de Computadores.

Programao Estruturada
No existem objetos:
dados e seu comportamento so considerados em separado;
unificar uma estrutura de dados com as operaes definidas
sobre a mesma funo do programador.

Existem variveis e tipos (dados):


variveis podem ser globais ou locais (escopo);
tipos podem ser primitivos, derivados ou estruturados.

Existem procedimentos e funes (comportamento):


conjunto de comandos referenciados por um nome;
um procedimento especial e se chama Programa Principal.

Programao Estruturada
Modelamos as estruturas de dados propriamente
ditas como um tipo estruturado:
estrutura uma coleo de variveis referenciada por um
mesmo nome;
imagine um objeto sem mtodos;
chamamos a cada elemento desta coleo de campo.

Algoritmicamente:
tipo Empregado {
Campos
caracter nome[100];
caracter cargo[20];
caracter endereo[200];
inteiro salrio;
};
Varivel global
Variveis
Empregado chefe;

Programao Estruturada
Modelamos as operaes sobre uma estrutura de dados como
procedimentos ou funes:
variveis globais valem dentro de qualquer funo ( escopo global).
Antes de vermos alocao dinmica de memria e ponteiros vamos
trabalhar com funes sem alguns parmetros.

Algoritmicamente:
Variveis
Empregado chefe;
Procedimento baixaSalrio (inteiro porcentagem)
variveis
real auxiliar;
incio
auxiliar <- chefe.salrio * (porcentagem / 100);
chefe.salrio <- chefe.salrio - auxiliar;
fim;

Modelagem da Pilha
Aspecto Estrutural:
necessitamos de um vetor para armazenar as informaes;
necessitamos de um indicador da posio atual do topo da
pilha;
necessitamos de uma constante que nos diga quando a pilha
est cheia e duas outras para codificar erros.

Pseudo-cdigo:
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
FUNO inicializaPilha()
incio
aPilha.topo <- -1;
fim;

Observao: este e os prximos algoritmos


pressupem que foi definida uma varivel
global tipo Pilha denominada aPilha.

Algoritmo PilhaCheia
Booleano FUNO pilhaCheia()
incio
SE (aPilha.topo = MAXPILHA - 1) ENTO
RETORNE(Verdadeiro)
SENO
RETORNE(Falso);
fim;

Algoritmo PilhaVazia
Booleano FUNO pilhaVazia()
incio
SE (aPilha.topo = -1) ENTO
RETORNE(Verdadeiro)
SENO
RETORNE(Falso);
fim;

Algoritmo Empilha
Constantes
ERROPILHACHEIA = -1;
ERROPILHAVAZIA = -2;
Inteiro FUNO empilha(inteiro dado)
incio
SE (pilhaCheia) ENTO
RETORNE(ERROPILHACHEIA);
SENO
aPilha.topo <- aPilha.topo + 1
aPilha.dados[aPilha.topo] <- dado;
RETORNE(aPilha.topo);
FIM SE
fim;

Algoritmo Desempilha
Inteiro FUNO desempilha()
incio
SE (pilhaVazia) ENTO
RETORNE(ERROPILHAVAZIA);
SENO
aPilha.topo <- aPilha.topo - 1;
RETORNE(aPilha.topo);
FIM SE
fim;

Algoritmo Desempilha - Variante


Inteiro FUNO desempilha()
incio
SE (pilhaVazia) ENTO
ESCREVA(ERRO: Pilha vazia ao tentar
desempilhar!);
RETORNE(ERROPILHAVAZIA);
SENO
aPilha.topo <- aPilha.topo - 1;
RETORNE(aPilha.dados[aPilha.topo +
1]);
FIM SE
fim;

Algoritmo Topo
Inteiro FUNO topo()
incio
SE (pilhaVazia) ENTO
ESCREVA(ERRO: Pilha vazia ao
acessar!);
RETORNE(ERROPILHAVAZIA);
SENO
RETORNE(aPilha.dados[aPilha.topo]);
FIM SE
fim;

Modelagem da Pilha com Vetor - Trabalho 1

Implemente todas as operaes vistas sobre pilha;


implemente um programa principal que utilize a pilha atravs
de um menu com os seguintes itens: empilhar, desempilhar,
limpar, mostrar pilha, sair do programa. Use a estrutura de
programao switch do "C" para isto;
ao mostrar a pilha, o programa deve colocar embaixo de cada
dado, a sua posio no vetor. Utilize as opes de definio
de tamanho de campo de impresso do printf() para isto;
a pilha possuir tamanho mximo 30, definido como uma
constante chamada MAXPILHA. Utilize esta constante para a
definio da estrutura de dados que ser a pilha;
a pilha ser referenciada por uma varivel global.

Filas usando Vetores


A Fila uma estrutura de dados que simula uma fila da
vida real.
Possui duas operaes bsicas:
incluir no fim da fila;
retirar do comeo da fila;
chamada de Estrutura-FIFO:
First-In, First-Out - O primeiro que entrou o
primeiro a sair

Fila

Filas
uma estrutura de dados importantssima para:
gerncia de dados/processos por ordem cronolgica:
Fila de impresso em uma impressora de rede;
Fila de pedidos de uma expedio ou tele-entrega.

simulao de processos seqenciais:


cho de fbrica: fila de camisetas a serem estampadas;
comrcio: simulao de fluxo de um caixa de
supermercado;
trfego: simulao de um cruzamento com um semforo.

Fila

Filas
uma estrutura de dados importantssima para:
gerncia de dados/processos por ordem cronolgica:
Fila de impresso em uma impressora de rede;
Fila de pedidos de uma expedio ou tele-entrega.

simulao de processos seqenciais:


cho de fbrica: fila de camisetas a serem estampadas;
comrcio: simulao de fluxo de um caixa de
supermercado;
trfego: simulao de um cruzamento com um semforo.

Fila

Filas
uma estrutura de dados importantssima para:
gerncia de dados/processos por ordem cronolgica:
Fila de impresso em uma impressora de rede;
Fila de pedidos de uma expedio ou tele-entrega.

simulao de processos seqenciais:


cho de fbrica: fila de camisetas a serem estampadas;
comrcio: simulao de fluxo de um caixa de
supermercado;
trfego: simulao de um cruzamento com um semforo.

Fila

Filas
uma estrutura de dados importantssima para:
gerncia de dados/processos por ordem cronolgica:
Fila de impresso em uma impressora de rede;
Fila de pedidos de uma expedio ou tele-entrega.

simulao de processos seqenciais:


cho de fbrica: fila de camisetas a serem estampadas;
comrcio: simulao de fluxo de um caixa de
supermercado;
trfego: simulao de um cruzamento com um semforo.

Fila

Filas
uma estrutura de dados importantssima para:
gerncia de dados/processos por ordem cronolgica:
Fila de impresso em uma impressora de rede;
Fila de pedidos de uma expedio ou tele-entrega.

simulao de processos seqenciais:


cho de fbrica: fila de camisetas a serem estampadas;
comrcio: simulao de fluxo de um caixa de
supermercado;
trfego: simulao de um cruzamento com um semforo.

Fila

Filas usando Vetores


Fila
cheia

Vetores possuem um
espao
24
limitado para armazenar
89
dados;
12
necessitamos definir um
espao grande o
4
Fila
suficiente para a nossa
55
vazia
fila;
20 -1
4
3
2
1
0
5
necessitamos de um
indicador de qual
Posio do elemento do vetor o
atual fim da fila (ltimo);
Incio da filaltimo
inclumos sempre no fim.

Algoritmo Retira
Procedimento:
24
89
24
12
89
12
4
55
4
20 5
55
4

20

testamos se h elementos;
decrementamos o fim da
fila (ltimo);
salvamos o primeiro
elemento em varivel
auxiliar;
empurramos tudo para a
frente.

Parmetros:

fila (global).

Posio do
Incio da filaltimo

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 - Exerccio


Inserir e retirar dados da fila: elabore
um algoritmo para retirar um elemento
de uma fila com vetor:
utilize a mesma filosofia definida na
implementao da pilha;
utilize um lao 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 operaes vistas sobre fila;


implemente um programa principal que utilize a fila
atravs de um menu com os seguintes itens:
enfileirar, desenfileirar, limpar, mostrar fila, sair do
programa. Use a estrutura de programao switch
do "C" para isto;
a fila possuir tamanho mximo 100, definido como
uma constante chamada MAXFILA. Utilize esta
constante para a definio da estrutura de dados
que ser a fila;
a fila ser referenciada por uma varivel 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.

You might also like