Estrutura de Dados (DPADF 0056) Aula 1 – Motivação e Revisão
Universidade Federal de Santa Maria
Colégio Agrícola de Frederico Westphalen
Curso Superior de Tecnologia em Sistemas para Internet
Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno
Objetivos
• Analisar e projetar tipos de dados abstratos,
estruturas de dados e suas aplicações: listas
lineares, pilhas, filas, árvores. Compreender
métodos e técnicas de classificação de dados.
Programa
• Unidade 1 – Estrutura de Dados
▫ Tipos primitivos, vetores, matrizes;
▫ Tipos abstratos de dados (TADs);
▫ Estruturas estáticas x estruturas dinâmicas;
▫ Estruturas básicas
Pilhas
Filas;
Filas circulares;
Listas ligadas e duplamente ligadas;
Programa (cont.)
• Unidade 2 – Classificação de Dados
▫ Listas Ordenadas
▫ Métodos de Classificação de Dados
Selection Sort;
Insertion Sort;
Bubble Sort;
Merge Sort;
Quick Sort;
Shell Sort;
Material de Aula
• Livro Texto:
• Página da Disciplina: www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados
• Recomenda-se a utilização de um caderno e um pen-drive
CELES, W.; CERQUEIRA, R.; RANGEL, J. L.
Introdução a Estruturas de Dados.
1ª. Ed. Rio de Janeiro: Campus, 2004.
Avaliação (individual)
• Avaliação 1 (50% do semestre)
▫ Sistematização 1 (Peso 3)
▫ Trabalho 1 (Peso 2)
• Avaliação 2 (50% do semestre)
▫ Sistematização 2 (Peso 3)
▫ Trabalho 2 (Peso 2)
• Pontuação extra de até 10% da nota (pela resolução e
entrega de exercícios desafio).
Estrutura de Dados (DPADF 0056) Aula 1 – Motivação e Revisão
Universidade Federal de Santa Maria
Colégio Agrícola de Frederico Westphalen
Curso Superior de Tecnologia em Sistemas para a Internet
Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno
Estrutura de Dados
• A disciplina de “Estrutura de Dados” estuda as
possíveis alternativas que um programador pode
ter na hora de escolher a estrutura de dados
adequada para determinada necessidade,
considerando um melhor gerenciamento de
memória e o acesso mais rápido à informação;
• Trata do armazenamento e manipulação de
dados em memória principal.
Algoritmos
• Sequência de instruções organizadas e
sistematizadas utilizadas para resolver um
problema;
• Um algoritmo não representa, necessariamente,
um programa de computador, e sim os passos
necessários para realizar uma tarefa.
Proj. de Algoritmo x Proj. de Software
• Etapas:
▫ Definição do problema;
▫ Análise de requisitos;
▫ Método de desenvolvimento;
▫ Projeto do algoritmo;
▫ Validação;
▫ Otimização;
▫ Implementação;
Proj. de Algoritmo x Proj. de Software
Problema
Método 1 Algoritmo 1
Programa 1
Programa 2
Programa 3 Algoritmo 2
Algoritmo 3
Método 2
Método 3
Projeto do Algoritmo
Projeto do Software
Programa de Computador
• Programa = Algoritmo + Estruturas de Dados (Nicholas Wirth – Criador da Linguagem Pascal)
• Implementação concreta de algoritmos
abstratos em uma determinada linguagem de
programação com a utilização de estruturas
de dados compatíveis ao problema.
Eficácia x Eficiência
• Eficaz Consegue resolver um problema, consegue
atingir os objetivos propostos, produz resultados corretos;
• Eficiente Além de alcançar um objetivo, consegue
fazê-lo da melhor forma possível (gastando o menor
número de recursos, no menor tempo, etc.)
Sandro alcançou a margem de vendas proposta para o mês. Marta
também, porém gastou 20% a menos de gasolina. Ambos foram
eficazes pois atingiram a quota, mas Marta foi mais eficiente.
Estruturas de Dados
• Uma estrutura de dados retrata as relações
lógicas existente entre os dados;
Forma de organização dada às informações
de forma a permitir o acesso a elas por
um algoritmo durante as operações de
manipulação que ocorrem na resolução
de um problema.
Estruturas de Dados (cont.)
• O estudo de estrutura de dados é
necessariamente orientado para uma aplicação,
ou seja é um estudo bastante prático;
▫ Programadores precisam de conhecimento profundo
de técnicas de programação;
▫ Usuários precisam reconhecer requisitos dos
softwares nas áreas onde atuam e um conhecimento
adequado de programação lhes permite tirar proveito
do acesso configurável que as aplicações oferecem.
Estruturas de Dados (cont.)
• Ao escolher uma estrutura de dados devemos
considerar alguns elementos importantes:
▫ De que forma essa estrutura de dados será
utilizada?
▫ Que métodos de manipulação essas estruturas nos
oferecem?
▫ Que tipo de alocação de memória ela utiliza?
Tipos de Dados x Estruturas de Dados
• Tipo de dado = conjunto de valores (domínio) que uma
variável pode assumir e conjunto de operações que
podem ser aplicadas sobre ele.
▫ Tipos de dados básicos (tipos primitivos) Inteiro, caractere, decimal, booleano, etc.
Não é possível decompor um tipo primitivo em partes menores
(eles são indivisíveis);
▫ Tipos de dados estruturados Vetores, matrizes, registros ...
Uma variável que pode agregar mais de um valor;
Agregados de valores de tipos primitivos.
Tipos de Dados x Estruturas de Dados
• Tipos Abstratos de Dados
▫ Especificam conceitualmente os dados (sua
organização física e lógica);
▫ Definem operações para manipulação da estrutura;
▫ Geralmente não são fornecidos diretamente pela
linguagem de programação;
▫ Exemplos: Ponto, Data, Fila, Lista, Árvore, etc.
Hello World
#include <stdio.h>
int main(int argc, char **argv[])
{
printf(“Hello World!!");
return 0;
}
Etapas da compilação
• Pré-processamento: pequenas alterações no código (substituição
de símbolos, inclusão de arquivos externos, dependências de
plataforma, etc.);
• Verificação sintática: procura por eventuais erros nos códigos
(parêntesis não fechados, falta de ponto-e-vírgula no final da
instrução, etc.);
• Compilação: transforma o código pré-processado em um
programa-objeto, que está em linguagem de máquina porém não
pronto para ser executado;
• Linkedição (linking, em inglês): agrupa os programas-objeto e
bibliotecas necessárias em um único executável;
Variável e Tipo de Dados • Variável
▫ “Espaços” de memória rotulados para guardar uma
informação de determinado tipo;
• Tipo de Dado
▫ Conjunto de valores que podem ser atribuídos a uma variável.
float area; int lado; lado = 5; area = lado * lado;
char opcao = ‘a’; M e m ó r i a
area lado
25 5 a
opcao
Endereço #2048 #2049 #2050 #2051 #2052 #2053 #2054
Identificador opcao area lado
Valor a 25 5
Tipo de Dados (em linguagem C)
Tipo Tam. Valores válidos
char 1 byte -128 a 127
unsigned char 1 byte 0 a 255
short int 2 bytes -32.768 a 32.767
unsigned short int 2 bytes 0 a 65.535
long int 4 bytes -2.147.483.648 a 2.147.483.647
unsigned long int 4 bytes 0 a 4.294.967.295
float 4 bytes 10-38 a 1038
double 8 bytes 10-308 a 10308
printf(formato, lista de constantes/variáveis/expressões);
Função para saída de valores segundo um determinado formato.
Ex.: printf(“%d %f\n”, 33, 5.3);
printf(“Inteiro = %d Real = %f\n”, 33, 5.3);
scanf(formato, lista de endereços)
Função para capturar e armazenar valores fornecidos via teclado.
Ex.: scanf(“%d”,&n);
scanf(“%d:%d”,&h,&m);
Entrada e Saída
Entrada e Saída (cont.)
• Caracteres especiais:
Código Significado
\n Quebra de linha
\r Retrocede o cursor para o início da linha
\t Insere uma tabulação
\b Retrocede o cursos uma posição (backspace)
\" Escreve o caractere que representa aspas
\\ Escreve a barra invertida
Entrada e Saída (cont.)
• Códigos de Formatação Código Significado
%c Caractere individual
%d ou %i Inteiros com sinais (base decimal)
%e ou %E Notação científica (com “e” minúsculo ou “E” maiúsculo)
%f Ponto flutuante
%g usa %f ou %e, o que for mais curto graficamente
%G usa %f ou %E, o que for mais curto graficamente
%o imprime um número em base octal
%s Cadeia de caracteres
%u Inteiros sem o sinal
%x Imprime um número na base hexadecimal (letras em minúsculas)
%X Imprime um número na base hexadecimal (letras em MAIÚSCULAS)
%p Endereço de memória
Subrotinas: Procedimentos
• Desvios no código da aplicação para códigos de
subrotinas sem um valor de retorno; • Em linguagem C, a palavra void indica que a subrotina não possui
valor de retorno e portanto é considerada um procedimento;
• Chamadas a uma subrotina com valor de retorno; • Em linguagem C, a tipo de retorno da função é colocando antes da
sua declaração e a palavra return é usada para retornar o valor;
Subrotinas: Funções
Variável global: ▫ Pode ser acessada em qualquer parte do programa.
Variável local: ▫ Somente pode ser acessada dentro do bloco que a criou.
Variáveis Locais x Variáveis Globais
A variável local
cont não pode
ser acessada
fora do bloco
onde ela foi
criada
Global
Local Local
Vetores e Matrizes
• Vetor
▫ Variável multivalorada unidimensional
• Matriz
▫ Variável multivalorada multidimensional
int v[10];
v[5] = 8;
int m[5][5];
m[0][3] = 8;
int c[5][5][5];
v[1][4][3] = 8;
• O que significa a passagem de parâmetros no
contexto de uma subrotina (explique qual a
utilidade de se passar um parâmetro para uma
subrotina seja ela procedimento ou função).
• Qual a diferença de passar um parâmetro por
valor ou passar um parâmetro por referência?
Passagem de parâmetros
• (POSCOMP 2004) Dado o trecho de programa abaixo:
onde T1 e T2 indicam mecanismos de passagem de
parâmetros (por valor ou por referência).
A tabela abaixo deve ser preenchida com os valores a
serem impressos pelo programa para cada
combinação de T1 e T2:
O que é um teste de mesa?
http://www.google.com.br/search?q=teste+de+mesa
Faça um teste de mesa para ...
programa zux;
variaveis a,b : inteiro;
procedimento P (T1 x : inteiro; T2 y : inteiro);
variaveis z : inteiro;
inicio
z:=x+a ;
x:=y+1;
y:=y+z;
fim;
inicio_programa
a := 2;
b := 3;
P (a,b);
escreva(a,b);
fim_programa.