introducao - estrutrura de dados
DESCRIPTION
Introducao - Estrutrura de DadosTRANSCRIPT
-
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. ListasPilhasFilas rvores. Implementao de tipos abstratos de dados.
-
CONCEITOS BSICOS
Estruturas de dados:
Forma particular de armazenamento e organizao dos dados em um computador demodo que possam ser recuperados e usados posteriormente de forma eficiente.
Alguns tipos de estruturas so adequadas a diferentes tipos de aplicao, destinando-se atarefas especficas.
-
CONCEITOS BSICOSEstruturas 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 darepresentao e da estrutura dos dados.
-
CONCEITOS BSICOSEstruturas 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:
MemriaProcessadorProcessador Memria
Disco Rgido
Monitor
Teclado
Cd/DVD
...
Arquitetura interna
Barramento externo
Barramento interno
Dispositivos de E/S
CPU
-
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 C
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 C
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 C
Aritmticos +, -, *, /, div, mod +, -, *, /, %, ++, - -
Relacionais >, =, , =,
-
CONCEITOS BSICOS
Linguagem C x Linguagem Pascal:
Estruturas de controle
Pascal C
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 C
Program ola;Begin writeln(Ol mundo!);end.
#include
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; // sem sufixo, real do tipo double a = b + 12.5f; // 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 (), menor 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 BSICOSExemplos 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 sizeofRetorna 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 tiposOperador cast: operador de molde de tipo
Exemploint 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 bsicasAs 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, deve-se incluir a biblioteca: #include
-
CONCEITOS BSICOS
Entradas e sadas bsicasFuno 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){
bloco de comandos 1}
Operador condicional: condicao ? expressao1 : expressao2;
ou
OU
if(expr) {
bloco de comandos 1...}else {
bloco de comandos 2...}
-
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:
break;case op2:
break;default:
break;
}
ou
Inteiro ou uma constante caractere
Se break for omitido, a execuo do casocontinua com os comandos do caso seguinte.
Executado quando expr for diferente de todosos 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.
-
FunesFunes 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 valortipo_retornado = int, char, float, retorna um valor do tipo
definidotipo_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
-
FunesC 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!
CONCEITOS BSICOS
-
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
-
10.53.57
Passagem de parmetros por valorExemplo:
int main(){float a = 10.5;float b = 3.5;float m = calculaMedia(a,b);
...}
float calculaMedia(float c, float d){float media = 0;media = (c + d)/2;
return media;}
ESTRUTURAS DE DADOS
Escopo: funo main
Escopo: funo mdia
abm
cdmdia
E0E4
E250E254
10.53.57
c = ad = b
Retorna mdia calculada
-
Exemplo: Clculo do fatorial
ESTRUTURAS DE DADOS
#include
int fat(int n){
int f = 1, i;
for(i = n; n!=0; n-- )
f*=n; return f;
}
int main(void) {
int n = 5;
int r;
r = fat(n);
printf("Fatorial de %d = %d \n", n, r);
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 funochamada.
-
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
-
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 memrianome: identificador do ponteiro
Ex: int a;
int *p;
Varivel de nome a que pode armazenar valoresinteiros. Automaticamente, reserva-se um espao na memria suficiente para armazenar valores inteiros.Varivel de nome p que pode armazenar endereosde memria em que existe um valor inteiroarmazenado.
-
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
PonteirosExemplos
int a; // varivel simplesint *p; // ponteiro para inteiro
a
Pilha de execuo
- 104108p -
-
ESTRUTURAS DE DADOS
PonteirosExemplos
int a; // varivel simplesint *p; // ponteiro para inteiroa = 5;p = &a;*p = 6;
a
Pilha de execuo
- 104108p -
5104
Dizemos que p aponta para a, por isso o nome ponteiro.
6
-
ESTRUTURAS DE DADOS
PonteirosExemplos
Outra representao:Podemos desenhar setas, sinalizando que uma variveldo tipo ponteiro aponta parauma determinada rea de memria, em vez de criar valores fictcios para osendereos de memria. a
Pilha de execuo
p
6
-
ESTRUTURAS DE DADOS
Ponteirosint main(){ int a, b, *p; a = 2; *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).
Erro: Varivel p no inicializada!
-
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 globaisUma 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 imprim-lo. 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.