Escolar Documentos
Profissional Documentos
Cultura Documentos
DE DADOS
Profa. J ane
Mestre em Engenharia de Sistemas e Computao COPPE /UFRJ
Conteudista de Estrutura de Dados
Aula 1
AULA 1
Unidade 1 : Introduo
Unidade 2 : Funes
2
MOTIVAO PARA O ESTUDO DE ESTRUTURA
DE DADOS
Para a soluo de um problema importante
determinarmos uma abstrao da realidade, o
que significa representar as informaes (dados)
que so relevantes para a soluo deste
problema.
A abstrao pode ser vista como uma
simplificao dos dados.
Exemplo : Considere um cadastro de alunos de
uma escola. Existem dados relevantes (nome,
matrcula, disciplinas, ano ...) e irrelevantes (cor
dos olhos do aluno, cor da mochila, marca da
borracha ...).
3
Como escolher os dados relevantes ?
Analisando as caractersticas do problema a ser
resolvido.
Uma vez feito isto, como representar estas
informaes ?
A escolha da forma de representar os dados no
trivial e vai depender das relaes existentes
entre tais dados, ou seja, da organizao dos
dados e tambm, da forma com que eles sero
manipulados para a soluo do problema.
4
Niklaus Wirth :
programa = algoritmo + dados
Para programar fundamental sabermos como
organizar (estruturar) os dados dos nossos
programas e realizar operaes (manipulaes)
sobre tais dados, atravs das instrues dos
algoritmos.
5
PORTANTO :
As estruturas de dados estudam as relaes
lgicas existentes entre os dados (ex: relao
linear, relao hierrquica ..) e sero manipuladas
atravs de operaes sobre os dados (ex:
consultar uma informao em um conjunto de
fichas de alunos, remover um assinante de uma
lista de assinantes, apagar um diretrio em uma
rvore de diretrios e subdiretrios...).
A escolha da estrutura de dados a ser utilizada,
refletir diretamente na construo de uma soluo
mais eficiente ou menos eficiente para o problema.
6
1) Como representar a estrutura organizacional de
uma empresa com 1 presidente, 1 vice-presidente,
2 diretores (Vendas e Finanas) e 3 sub-diretores ?
2) Como representar o conjunto de livros
informados nesta disciplina ?
3) Como organizar o esquema de tele-entrega de
pizzas ? Imagine uns 4 tipos de pizzas. Como
devem ser organizadas, estruturadas para que o
esquema de entrega seja mais adequado ?
Imagine como as pizzas podem ser organizadas na
garupa da moto de um moto-boy.
7
Exemplos : Como voc representaria graficamente
e de forma livre, sem formalismos, cada item a
seguir ?
4) Como funciona o sistema de atendimento nas
linhas de nibus ?
5) Como funciona a entrega de cigarros de uma
marca X na Tijuca, sabendo-se que existe uma Van
que cobre 10 pontos de vendas, conectados por
ruas de mo nica e de mo dupla ? Como
representar estes pontos e as ligaes entre eles ?
8
CONCLUINDO ....
Estrutura de dados linear lista, pilha, fila
relao linear entre os dados (existe um 1.
elemento, um ltimo elemento e dado um elemento
qualquer (exceto o 1. e o ltimo), ele possui um
antecessor e um sucessor.) Exemplos : 2, 3 e 4
Estrutura de dados no lineares rvore e grafo.
No caso de rvore, existe uma relao de
hierarquia, de subordinao. J no caso do grafo,
existe possibilidade de relao entre quaisquer
elementos. Exemplos 1) e 5) slides 20 e 21
9
Objetivo do curso : o estudo de listas lineares
(lista, pilha e fila).
Tais estruturas manipulam dados do mesmo tipo e existe
uma linearidade, pois pode-se determinar o primeiro
elemento da lista, seu ltimo elemento, e uma vez
determinado um elemento qualquer, que no seja o
1. e nem o ltimo, ele possui um antecessor e um
sucessor.
10
Listas lineares: definio e identificao dos
tipos quanto s formas de armazenamento
(seqencial e encadeada).
Os elementos de uma lista linear so denominados ns ou
nodos.
Como representar na memria do computador os dados
organizados de forma linear ? H 2 formas :
sequencial (contgua) : os dados esto dispostos de forma
seqencial na memria, um aps o outro, em endereos
seqenciais ou contguos. Devemos pr-definir o tamanho
mximo da lista. (1. parte do curso)
encadeada : os dados esto dispostos de forma encadeada
na memria, no seguindo uma ordem seqencial, mas sim
um armazenamento aleatrio. No preciso pr-definir um
tamanho mximo. (2. parte do curso)
11
LISTAS LINEARES SEQUENCIAIS
Que recurso devemos usar para implementar as
listas sequencias j que os dados so todos do
mesmo tipo, esto alocados de forma contgua na
memria e h um tamanho mximo pr-definido ?
Resposta : vetor
Que manipulaes podero ser feitas com os
dados das listas sequencias ? Ou seja, que
operaes iremos estudar ?
12
POSSVEIS OPERAES
Imagine uma lista com as notas dos alunos de uma
turma. Como posso manipular as notas ?
Primeiramente, no h notas, ou seja, a lista est vazia.
Depois, podemos ...
adicionar uma nota, e mais outra, etc. (adicionar =
operao de insero).
remover alguma nota (operao de remoo),
substituir uma nota (operao de substituio),
procurar por uma certa nota (operao de busca ou
pesquisa),
listar todas as notas armazenadas (operao de
percurso), etc ...
Todas as operaes indicam como os dados vo
ser manipulados e sero implementadas
respeitando as representaes lgica e fsica.
13
FUNO
Cada operao de listas poder ser programada
por um mdulo de cdigo denominado FUNO,
que poder ser ativado a qualquer momento.
O uso de funo implica em reaproveitamento de
cdigo.
14
FUNO
Funes pr-definidas
Exemplos : abs pow sqrt system
Criando nossas prprias funes para definir as
operaes das estruturas a serem estudadas.
15
MOTIVAO E DEFINIO DE FUNES
Exemplo : Seja o trecho
int x;
x = -4;
cout << Valor absoluto de << x << =
<< abs(x) << endl;
Note : x = -4 abs(x) 4
x = 0 abs(0) 0
x = 4 abs(4) 4
16
Chamada para a funo abs
O que voc faria se no
houvesse uma funo j
programada como a abs e
voc tivesse que calcular o
mdulo de um nmero inteiro
em diversas etapas do seu
programa ?
17
Imagine que voc no fizesse isso
seguidamente, de forma a usar um
loop, tendo que realmente, repetir
cdigo vrias vezes em trechos
distantes do seu programa.
18
POSSVEIS SOLUES :
Soluo (a pior): Repetir cdigo
Considerando que num uma varivel inteira e a
entrada j foi lida, o trecho seria :
if (num >= 0)
cout << Valor absoluto = << num << endl;
else
cout << Valor absoluto = << -num << endl;
Soluo (a melhor): Se no existisse uma funo abs
na linguagem, a melhor soluo seria que o trecho
virasse uma funo, pois desta forma, seria possvel
cham-la toda vez que fosse necessrio.
19
FUNES
Vamos criar um programa, passo a passo, a fim de analisar
vrias possibilidades.
Possibilidades :
1) Funo sem parmetros e sem retorno.
//Definio da funo
void iniciar(void)
{
cout << Autora do programa : Jane << endl
<< Iniciando o programa .... << endl;
}
20
Exemplo :
//Declarao da funo
void iniciar(void);
//Chamada na main
iniciar();
21
tipo do dado retornado pela funo neste caso, no h retorno
parmetros neste caso no h parmetros
2) Funo sem parmetros e que retorna um valor (inteiro ou
real ou caracter)
Exemplo : Vamos calcular algo com a funo ?
//Definio da funo
int somar1()
{ int x, y; //variveis locais a funo somar
cout << Digite dois valores para soma : ;
cin >> x >> y;
return x+y; // ou tambm : return (x+y);
}
22
//Prottipo ou declarao da funo
int somar1(); //Pode ser tambm : int somar1(void);
//Trecho da chamada na main
Considere
int resultado; //declarao feita na main
resultado = somar1(); //chama a funo somar1
23
TRECHO DO PROGRAMA:
#include <iostream>
using namespace std;
//Prottipos das funes iniciar e somar
void iniciar(void);
int somar1();
//Prog. principal
int main() {
int resultado; //varivel local a main
iniciar(); //chama a funo iniciar
resultado = somar1();
cout << Resultado : << resultado <<endl;
}
//Definies das funes iniciar e somar
// como j mostrado ... Aqui !
24
3) Funo que recebe um ou mais parmetros passados
por valor, faz clculos e retorna um valor.
Exemplo :
//Prottipo
int somar2(int, int);
// Trecho da main
int resultado, a, b; //variveis locais a main
//Definir valores para a e b
resultado = somar2(a,b); //chama a funo somar2
cout << Resultado = << resultado << endl;
25
a e b so argumentos da f.
//Definio da funo
int somar2(int p, int q)
{
int r;
r = p + q;
return r;
}
26
p, q e r so variveis locais
funo somar2.
p e q so os parmetros da
funo somar2.
Na chamada da funo so
passados apenas os valores
armazenados nas variveis a e
b (argumentos da funo) .
O valor da varivel r retornado para
o ponto da chamada da funo.
Ateno :
Os parmetros passados por valor funcionam
como variveis locais e so cpias dos argumentos
da chamada da funo.
27
4) Funo que recebe parmetros passados por valor, os
usa e no retorna nada.
Exemplo :
void somar3(int a, int b) //Definio da funo
{
cout << Soma = << a+b << endl;
}
Como seria o prottipo ?
void somar3(int , int);
28
Parmetros a e b
Indica que nada ser retornado.
5) Funo que recebe parmetros passados por valor,
modifica algum deles (ou todos) e no retorna valor algum.
Ateno : Os argumentos da chamada no sero realmente
modificados.
Exemplo :
//Definio da funo
void falsaMudanca(int a, int b) {
a++; //incrementa a
b--; //decrementa b
}
//Chamada da funo trecho na main :
int x = 10, y = 20;
falsaMudanca(x,y);
cout << X = << x << Y = << y << endl;
29
O que ser
impresso na tela ?
X = 10 Y = 20
Os argumentos
x e y no foram
modificados.
6)Funo que recebe parmetro passado por referncia, o
modifica e nada retorna. Ateno para o uso de &.
Exemplo :
void mudar(int & a, int & b) {
a++;
b--;
}
//Trecho chamada na main :
int x = 10, y = 20;
mudar(x,y);
cout << X = << x << Y = << y << endl;
30
Prottipo da funo :
void mudar (int &, int &);
O que ser impresso na tela
?
X = 11 Y = 19
VARIVEIS GLOBAIS X VARIVEIS LOCAIS
Variveis globais : declaradas fora do escopo das
funes.
Variveis locais : declaradas no escopo de
qualquer funo, seja a main ou qualquer outra
funo.
31
EXERCCIOS
Assinale a estrutura de dados que pode ser usada
para representar cada um dos casos descritos a
seguir. Justifique, resumidamente, sua resposta.
1) Na maioria dos sistemas operacionais, os
arquivos so organizados hierarquicamente em um
esquema de diretrios (pastas) e sub-diretrios.
Opes :
A) ( ) pilha B) ( ) fila
C) ( ) rvore D) ( ) grafo
32
2) Navegadores para internet armazenam os ltimos
endereos visitados em uma estrutura de dados.
Cada vez que um novo site visitado, o endereo
do site adicionado na estrutura de endereos.
Quando se aciona o retorno (back), o navegador
permite que o usurio retorne no ltimo site visitado
e retira o endereo do site da estrutura de dados.
Opes :
A) ( ) pilha B) ( ) fila
C) ( ) rvore D) ( ) lista
33
3) Faa um programa em C++ para ler a largura e o
comprimento de um retngulo, calcular e imprimir o
valor da rea. O clculo da rea dever ser feito
por uma funo que receber a largura e o
comprimento como parmetros e retornar o valor
calculado da rea.
Prottipo da funo :
double calcularAreaVersao1(double, double);
34
4)
Considere o exerccio 3 e escreva uma funo
diferente para o clculo da rea de acordo com o
seguinte prottipo :
void calcularAreaVersao2(double, double, &double);
A funo receber a largura e o comprimento passados
por valor e receber um parmetro area passado por
referncia, cujo objetivo armazenar o resultado do
clculo da rea.
35