Você está na página 1de 51

Estruturas de Dados

Profa. Juliana Pinheiro Campos

ESTRUTURAS DE DADOS

Ementa
Introduo Linguagem C.
Recursividade.
Alocao dinmica de memria.
Conceito de tipos abstratos de dados.
Listas
Pilhas
Filas
rvores.
Implementao de tipos abstratos de dados.

CONCEITOS BSICOS

Estruturas de dados:
Forma particular de armazenamento e
organizao dos dados em um computador de
modo que possam ser recuperados e usados
posteriormente de forma eficiente.
Alguns tipos de estruturas so adequadas a
diferentes tipos de aplicao, destinando-se a
tarefas especficas.

CONCEITOS BSICOS

Estruturas de dados e algoritmos:


Algoritmo: um conjunto determinado de instrues
(aes) que quando seguidas desempenham uma tarefa
particular.
As estruturas de dados esto altamente relacionadas
aos algoritmos que as manipulam:
Algoritmos e estruturas de dados devem ser
consideradas como unidades distintas e
complementares.
A escolha de um algoritmo a ser utilizado depende da
representao e da estrutura dos dados.

CONCEITOS BSICOS

Estruturas de dados estticas e dinmicas:


Estticas: A alocao de memria para essas
estruturas realizada antes que o programa entre
em execuo. No oferece suporte adequado para
insero e remoo de elementos dinamicamente.
Homogneas: vetores e matrizes
Heterogneas: tipos estruturados (registros)

Dinmicas: A alocao de memria para essas


estruturas realizada durante a execuo do
programa, conforme a necessidade.
Listas, filas, pilhas, rvores, etc.

CONCEITOS BSICOS

Modelo de um computador:
Barramento externo
Dispositivos de E/S

Arquitetura interna

Disco Rgido

CPU
Processador
Processador

Monitor

Memria
Memria
Barramento
interno

Teclado

...
Cd/DVD

CONCEITOS BSICOS

Armazenamento de dados e programas na


memria:
A memria do computador dividida em
unidades de armazenamento chamadas bytes.
1 byte = 8 bits
Cada posio de memria (byte) tem um
endereo nico. Quando reservamos um espao de
memria para armazenar um valor, esse espao
finito, composto de 1 ou mais bytes.
Um computador s pode executar programas em
linguagem de mquina.

ESTRUTURAS DE DADOS

Linguagem C
C uma linguagem de programao compilada,
estruturada, imperativa e de alto nvel.
uma das linguagens de programao mais
populares.
Oferece acesso a endereos de variveis.

CONCEITOS BSICOS

A linguagem C:
Linguagem convencional

Devemos reservar uma rea na memria para


armazenar cada dado.

Um programa em C constitudo de diversas


funes pequenas, independentes entre si.

Funo principal (main) automaticamente executada


aps o programa ser carregado.

Tempo de vida e visibilidade das variveis:


Variveis locais;
Variveis globais;

CONCEITOS BSICOS

Linguagem C x Linguagem Pascal:


Comando

Pascal

Comentrios

{ comentario}

/* comentario */

Identificadores

No case sensitive

case sensitive

Definio de tipos

type

typedef

Declarao de inteiros

integer

int

Declarao de caracter

char

char

Boolean

Boolean tratado
como true ou false

No h tratado como
0 ou 1

Real

real

float ou double

Tipos enumerados

type a = (vermelho,
verde, azul)

enum a {vermelho,
verde, azul};

CONCEITOS BSICOS

Linguagem C x Linguagem Pascal:


Comando

Pascal

Vetores

Limites definidos pelo


programador. Ex:
var a = array[1..10] of
integer;

Comea da posio 0 e
vai at n 1 (sendo n o
tamanho do vetor). Ex:
int a[10];

Strings

Tipo pr-definido
tratado internamente
como array.

O tipo string no
definido. Deve-se criar
um vetor de char.

Registros

record

struct

Atribuio

:=

CONCEITOS BSICOS

Linguagem C x Linguagem Pascal:


Operadores

Pascal

Aritmticos

+, -, *, /, div, mod

+, -, *, /, %, ++, - -

Relacionais

>, <, >=, <=, =, <>

>, <, >=, <=, ==, !=

Lgicos

and, or, not

&&, ||, !

Atribuies especiais

No h

+=, -=, *=, /=, %=

CONCEITOS BSICOS

Linguagem C x Linguagem Pascal:


Estruturas de controle
Pascal

if cond then stmt else stmt

if (cond) stmt else stmt

while cond do stmt

while (cond) stmt

repeat stmt until cond

do stmt while (cond)

for id := expr to expr do stmt

for (expr; cond; expr) stmt

case expr of expr : stmt; ... expr :


stmt; else: stmt; end

switch (expr) { case expr : stmt; ...


case expr : stmt; default: stmt }

CONCEITOS BSICOS

Linguagem C x Linguagem Pascal:

Exemplo de programa que imprime Ol Mundo!


Pascal
Program ola;
Begin
writeln(Ol mundo!);
end.

C
#include <stdio.h>
int main(){
printf(Ol mundo!);
return 0;
}

CONCEITOS BSICOS

Declarao e inicializao de variveis:


int a, b;
float c;
c = 5.3;
a = 4.3;

// o valor 4 ser armazenado em a

Valores constantes:
a = b + 13
a = b + 12.5;
a = b + 12.5f;

// sem sufixo, real do tipo double


// real do tipo float exige sufixo f ou F

Variveis com valores indefinidos:


int a, b, c;
a = 2;
c = a + b;

ERRO: b tem lixo!!!

CONCEITOS BSICOS

Operadores:
Aritmticos:
adio (+) , subtrao (-) , multiplicao (*) , diviso (/), mdulo
(%);
A operao feita na preciso dos operandos. Ex: 5/2 = 2.

Atribuio:
simples (=) ,compostos (+=, -=, *=, /=, %=);

De incremento e decremento:
incremento (++), decremento (--);

Relacionais:
menor que (<), maior que(>), menor ou igual que (<=), maior ou
igual que (>=), igual (==), diferente (!=).

Lgicos:
e/and (&&), ou/or (||), negao/not (!)

CONCEITOS BSICOS

Exemplos de utilizao de operadores:


Quais sero os valores armazenados nas variveis a, b, c?

int a;
double b, c;
a = 3.5;
b = a / 2.0;
c = 1/3 + b;
Resposta: a = 3, b = 1.5, c = 1.5. Quando os operandos so distintos, o
valor do operando de menor expressividade (nesse caso, int) convertido
para o tipo de maior expressividade (nesse caso, double)

CONCEITOS BSICOS

Exemplos de utilizao de operadores:


x%2;

// operador % se aplica somente a operandos inteiros

a = 5;

// o valor resultante o valor atribudo

y = x = 5;
x *= y + 1;

// var op= expr var = var op (expr)

x = n++; x = ++n;

// incrementa em uma unidade o valor de n

int c = 23, d = c + 4;
a = (c < 20) || (d > c); // armazena o valor 1 em a
b = (c < 20) && (d > c);

// armazena o valor 0 em b

CONCEITOS BSICOS

Operador sizeof
Retorna o nmero de bytes de um determinado
tipo.
Exemplo:

int x = sizeof(int);
printf("Nmero de bytes ocupado pelo inteiro tipo inteiro : %i \n", x);
...
sizeof(int) retorna 2 ou 4 dependendo do inteiro natural da
mquina

CONCEITOS BSICOS

Converso de tipos
Operador cast: operador de molde de tipo
Exemplo

int a;
a = (int) 3.5;
printf("a = %d", a);

O valor impresso de a 3 porque o valor 3.5 foi convertido


para inteiro

CONCEITOS BSICOS

Entradas e sadas bsicas


As operaes de entrada e sada em C so feitas
com o uso de funes.
Para utilizar essas funes necessrio incluir o
prottipo das funes no cdigo. Para isso, devese incluir a biblioteca:
#include <stdio.h>

CONCEITOS BSICOS

Entradas e sadas bsicas


Funo printf:
Possibilita a sada de valores em um formato especfico.
printf(formato, lista de constantes/variveis/expresses);
Deve existir um especificador de formato
correspondente (Ex: %c, %d, %f, %s,)
Ex: printf(Inteiro: %d, real: %f, 5, 3.4);

Funo scanf:
Permite capturar valores fornecidos via teclado pelo
usurio do programa e armazen-los em variveis.
scanf(formato, lista de endereos das variveis);
Ex: int n;
scanf(%d, &n);

CONCEITOS BSICOS

Controle de fluxo: C prov as construes

fundamentais de controle de fluxo necessrias para


programas bem estruturados.

Tomadas de deciso:
if(expr) {

if (expr){

OU

bloco de comandos 1

...
}
else {

bloco de comandos 1

bloco de comandos 2
...
ou
}

Operador condicional:
condicao ? expressao1 : expressao2;

CONCEITOS BSICOS

Controle de fluxo:
Construes com laos:
while (expr){
bloco de comandos

}
for (expr_inicial; expr_booleana; expr_de_incremento){
bloco de comandos
ou

CONCEITOS BSICOS

Controle de fluxo:
Construes com laos:
do{

bloco de comandos

} while (expr_booleana);
ou

OBS: O bloco de comandos ser executado pelo


menos uma vez.

CONCEITOS BSICOS

Controle de fluxo:
Interrupes com break:
Quando utilizado dentro de um lao, interrompe e
termina a execuo do mesmo.

Interrupes com continue:


Quando utilizado dentro de um lao, interrompe a
execuo e passa para a prxima iterao.
ou

CONCEITOS BSICOS

Controle de fluxo:
Seleo:
switch(expr){
case op1:

Inteiro ou uma constante caractere

break;
case op2:

Se break for omitido, a execuo do caso


continua com os comandos do caso seguinte.

break;
default:

break;
}

ou
Executado quando expr for diferente de todos
os casos enumerados.

CONCEITOS BSICOS

Exerccios:
1) Implemente um programa que faz a converso
de um valor de temperatura na escala Celsius
para a Fahrenheit formula: F = C 1,8 + 32.
2) Faa um programa para calcular o ndice de
Massa Corporal (IMC) e, com base no resultado,
informar a categoria qual o indivduo pertence,
de acordo com a tabela mostrada abaixo. O IMC
definido como a relao entre o peso e a
altura ao quadrado. A altura deve ser dada em
metros e o peso em kg. O IMC calculado de
acordo com a frmula dada a seguir e as
categorias so definidas pelos limites abaixo:

CONCEITOS BSICOS

Exerccios:

3) Escreva um programa que faa uma contagem


regressiva (at 0) usando while a partir do nmero
digitado pelo usurio. O programa deve fazer isso
enquanto o valor digitado for positivo.

CONCEITOS BSICOS

Funes
Funes o mecanismo adequado para codificar
tarefas especficas.
Vantagens:
Facilita a codificao: codificar diversas funes
pequenas mais fcil que codificar uma nica maior.
Funes especficas podem ser facilmente reutilizadas
em outros cdigos.

Tipo geral
tipo_retornado nome_da_funo (lista de parmetros...)
{
corpo da funo
}

CONCEITOS BSICOS

Funes
tipo_retornado nome_da_funo (lista de parmetros...)
{
corpo da funo
}
tipo_retornado = void
indica o no retorno de um valor
tipo_retornado = int, char, float,
retorna um valor do tipo
definido
tipo_retornado = int*, char*,
retorna um ponteiro para int, char,
OBS: Funes retornam um nico valor!

CONCEITOS BSICOS

Funes
tipo_retornado nome_da_funo (lista de parmetros...)
{
corpo da funo
}
nome_da_funo: identificador da funo no programa.
lista de parmetros: declaraes de variveis que sero usadas na
funo.

corpo da funo: instrues que sero executadas quando a


funo for chamada.

CONCEITOS BSICOS

Exemplos de funes
void imprimeMensagem() {
printf(Ola Mundo!);
}
float calculaMedia(float a, float b) {
float media = 0;
media = (a + b)/2;
return media;
}

CONCEITOS BSICOS

Funes
C exige que se coloque o prottipo da funo
antes de ela ser chamada.
Prottipo: consiste na repetio da linha de sua
definio seguida do caractere ;. No h
necessidade de indicar o nome dos parmetros,
s os tipos.
A transferncia de dados entre funes feita
com o uso de parmetros e do valor de retorno da
funo chamada.

CONCEITOS BSICOS

Chamada funo (tipo geral)


identificador(listaDeArgumentos);
ATENO: tipo_retornado definido!

ESTRUTURAS DE DADOS

Chamada funo (exemplos)

imprimeMensagem();

float a = 10.5;
float b = 13.5;
float c;
c = calculaMedia(a,b);

printf("Media = %f", calculaMedia(10.5, 13.5));

ESTRUTURAS DE DADOS

Passagem de parmetros por valor


Exemplo:
int main(){
float a = 10.5;
float b = 3.5;
float m = calculaMedia(a,b);
...
}

Escopo: funo main

float calculaMedia(float c, float d){


float media = 0;
media = (c + d)/2;
return media;
}

10.5

E0

3.5

E4

7
Retorna mdia
calculada

Escopo: funo mdia

c=a
d=b

10.5

E250

3.5

E254

mdia 7

ESTRUTURAS DE DADOS

Exemplo: Clculo do fatorial


#include <stdio.h>

int main(void) {

int fat(int n){

int n = 5;

int f = 1, i;

int r;

for(i = n; n!=0; n-- )

r = fat(n);

f*=n;

printf("Fatorial de %d = %d \n", n, r);

return f;

system("pause");

return 0;
}

No final da funo fat, o parmetro n tem valor igual a zero. No entanto, a sada
do programa ser: Fatorial de 5 = 120. O valor da varivel n no mudou no
programa principal porque o valor de n passado atribudo ao parmetro da funo
chamada.

ESTRUTURAS DE DADOS

Passagem de parmetros por valor


Uma funo pode retornar um tipo de valor para a
funo que chama.
Muitas vezes, necessrio transferir mais do que
um valor para a funo que chama, e isso no
pode ser feito com o retorno explcito de valores.
Ex: funo que calcula a soma e o produto de dois
nmeros.

ESTRUTURAS DE DADOS

Ponteiros
Ponteiros so variveis que armazenam
valores de endereos de memria.
Declarao de varivel do tipo ponteiro :
tipo *nome;
tipo: tipo do valor armazenado no endereo de memria
nome: identificador do ponteiro

Ex:

int a;
int *p;

Varivel de nome a que pode armazenar valores


inteiros. Automaticamente, reserva-se um espao na
memria suficiente para armazenar valores inteiros.
Varivel de nome p que pode armazenar endereos
de memria em que existe um valor inteiro
armazenado.

ESTRUTURAS DE DADOS

Ponteiros
Operador unrio * (contedo de)
Acessa o contedo do endereo de
memria armazenado pela varivel
ponteiro.

Operador unrio & (endereo de)


Resulta no endereo da posio da
memria reservada para a varivel.

ESTRUTURAS DE DADOS

Ponteiros
Exemplos
int a; // varivel simples
int *p; // ponteiro para inteiro

Pilha de execuo

108
104

ESTRUTURAS DE DADOS

Ponteiros
Exemplos
int a; // varivel simples
int *p; // ponteiro para inteiro
a = 5;
p = &a;
*p = 6;

Pilha de execuo

Dizemos que p aponta para a, por isso


o nome ponteiro.
p
a

104
6
-5

108
104

ESTRUTURAS DE DADOS

Ponteiros
Exemplos
Outra representao:
Podemos desenhar setas,
sinalizando que uma varivel
do tipo ponteiro aponta para
uma determinada rea de
memria, em vez de criar
valores fictcios para os
endereos de memria.

Pilha de execuo

p
a

ESTRUTURAS DE DADOS

Ponteiros
int main(){
int a, b, *p;
a = 2;
Erro: Varivel p no inicializada!
*p = 3;
b = a + (*p);
printf(%d, b);
return 0;
}
S podemos preencher o contedo de um ponteiro se ele tiver
sido devidamente inicializado (apontar para um espao de
memria para o qual j se prev o armazenamento de valores
do tipo em questo).

ESTRUTURAS DE DADOS

Passagem de parmetros por referncia


quando passado o endereo de uma varivel
como parmetro.
Se vai passar o endereo de uma varivel, deve existir uma
varivel do tipo ponteiro para receb-la.

Ex: 4) Funo para calcular a soma e o produto de


dois nmeros.
Toda vez que desejarmos alterar um valor de uma
varivel da funo que chama dentro da funo
chamada, devemos passar o endereo da varivel.

ESTRUTURAS DE DADOS

Passagem de parmetros por referncia


Exerccio: 5) Implemente uma funo para trocar
os valores entre duas variveis dadas.

Para que os valores das variveis da funo


principal sejam alterados dentro da funo
auxiliar que faz a troca, precisamos passar
para a funo os endereos das variveis.

ESTRUTURAS DE DADOS

Variveis globais
Uma varivel global declarada fora do corpo
das funes e visvel a todas as funes
subseqntes.
As variveis globais no so armazenadas na
pilha de execuo e existem enquanto o
programa estiver sendo executado.
O uso de variveis globais deve ser feito com
critrio, pois podemos criar um alto grau de
interdependncia entre as funes.

ESTRUTURAS DE DADOS

Variveis estticas
As variveis estticas so armazenadas na rea de
memria esttica.
As variveis estticas continuam existindo mesmo
antes ou depois de a funo ser executada. Porm,
uma varivel esttica declarada dentro de uma funo
s visvel dentro dessa funo.
Para declarar uma varivel esttica basta colocar a
palavra chave static antes do tipo na declarao
Uma utilizao interessante quando se necessita recuperar
o valor de uma varivel atribuda na ltima vez em que a
funo foi executada.

ESTRUTURAS DE DADOS

Variveis estticas
Ex: Funo que recebe um n real e deve imprimlo. Ela imprime um nmero por vez, separando-os
por espao em branco e coloca, no mximo, 5
nmeros por linha.
void imprime (float a) {
static int n = 1;
printf( %f , a);
if((n%5) == 0)
printf(\n);
}

n++;

ESTRUTURAS DE DADOS

Variveis estticas
Variveis globais tambm podem ser declaradas
como estticas. Nesse caso, no podem ser
acessadas por funes definidas em outros
arquivos.
Funes tambm podem ser declaradas como
estticas, no podendo ser acessadas por funes
definidas em outros arquivos.

Você também pode gostar