introducao - estrutrura de dados

51
Estruturas de Dados Profa. Juliana Pinheiro Campos

Upload: eric-coutinho

Post on 09-Nov-2015

220 views

Category:

Documents


3 download

DESCRIPTION

Introducao - Estrutrura de Dados

TRANSCRIPT

  • 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.