SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Curso Superior de Tecnologia em Telemática
                              Programação e Estruturas de Dados

Tipos Abstratos de Dados e Listas Lineares
                                                   Copyright©2010
                                                   Prof. César Rocha
                                            cesarocha@ifpb.edu.br 1
Objetivos

§ Explorar os conceitos fundamentais acerca da
  definição de tipos abstratos usando C
   § Desafios em modelar entidades do mundo real, dados e
     operações em um TAD, como materializar estes
     conceitos usando a linguagem C e bibliotecas
§ Overview sobre listas lineares
   § Suas propriedades e operações fundamentais, listas
     seqüenciais e encadeadas
§ Este módulo é breve, mas constitui um importante
  instrumento para os próximos módulos do curso
                                                           2
Estrutura de Dados I




  Parte I : Tipos
Abstratos de Dados

                              3
Motivação

§ Em linguagens de programação, as variáveis e
  constantes são classificadas de acordo com um tipo
  de dados nativo da linguagem em uso
   § Ex: Todos os tipos primitivos (float, int, double, char,..)
   § Estes tipos são utilizados para representar números
     inteiros, caracteres, etc.
   § Uma vez que o tipo é estabelecido, também podemos
     saber que operações são suportadas por este tipo
§ Entretanto, para resolvermos problemas complexos
  no mundo real com programação, faz-se necessário
  modelar outros tipos de dados...
                                                                   4
Motivação

§ Estudo de caso breve e simples:
   § Implementando um sistema de caixa numa
     linguagem procedural
§ Você pergunta ao seu contratante: “Mas...o que é
  um sistema de caixa?”
   § É um sistema que cadastra produtos e clientes e
     relaciona-os numa venda
   § Operações básicas deste tipo de sistema
     (resumidamente...)
      § Incluir produto numa venda, cadastrar um cliente novo,
        calcular total de uma venda, fechar venda, etc.
                                                                 5
Motivação

§ No exemplo anterior, dizemos que o programador
  deverá “levantar” uma abstração da realidade
   § Isso em função de um conjunto de dados que
     representa cada uma das entidades e suas operações
   § O termo “abstrato” significa “esquecer a forma de
     implementação” (ou a estratégia).
   § Em seguida, deve ser escolhida a forma (como) de
     representar tais dados na linguagem escolhida
      § Que recursos são oferecidos pela linguagem?
§ A partir da abstração, estaremos dando início a
              abstração
  modelagem de tipos complexos
                                                            6
Definição

§ Tipo Abstrato de Dado
  § É uma abstração da realidade, mediante a definição de
    um conjunto de dados que a representa e quais
    operações serão realizadas sobre estes dados
§ Implementar um TAD numa linguagem de
  programação é encontrar uma forma de representá-
  la utilizando esta linguagem escolhida
  § Utilizando os tipos nativos e suas operações suportadas
    pelo computador
  § Em C, a implementação destes TADs se dá
    basicamente através de ponteiros e estruturas
                                                            7
Regras básicas de modelagem

Œ Encapsulamento: não é
  preciso saber os detalhes de
  implementação do TAD. Seu
  usuário irá se preocupar
  apenas com base nas
  operações oferecidas
  (interface)

• Modularização: é a
  divisão de uma tarefa maior
  e mais complexa em tarefas
  menores e, provavelmente,
  mais fáceis de implementar
  e testar
                                                      8
Boas práticas usando C

§ Antes:
  § Para que as funções implementadas em um arquivo.c
    possam ser usadas por um outro módulo C, este
    precisa conhecer os cabeçalhos das funções oferecidas
    por arquivo.c
     § 1ª tentativa: repetição dos cabeçalhos das funções
     § E se um arquivo usa funções de vários outros módulos?
§ Depois:
  § Um módulo de funções C normalmente é associado a
    um arquivo de mesmo nome e que contém apenas os
    cabeçalhos (arquivo.h)das funções oferecidas por este
    módulo e, eventualmente, os tipos de dados que ele
    exporte (typedef’s, struct’s, etc).                        9
pilha.h                                      Boas práticas usando C
                                                                         pilha.c
// definição estrutura                                                           //implementação do TAD
typedef struct pilha{                                                            #include “pilha.h”
         …                                                                       #include<bibliotecas C>
}TPilha;
// Protótipos                                                                    // Corpo das funções
// método responsável por…                                                          com assinatura
                                                        Extraia do TAD
Pilha* criaPilha( int tamanho );                           apenas os
// método responsável por…                              protótipos e crie
                                                       uma biblioteca em
int consultaTopo( void );                              um arquivo header
// método responsável por…
void empilha (Pilha* p, int elem);                                             prog3.c
// método responsável por…                                                  prog2.c
int desempilha( void );
                                                                        prog1.c
                                                            /* main.c */
                                                            #include “pilha.h”
                                                            #include<bibliotecas C>
      Este arquivo .h irá conter toda a interface do        main() {
        TAD e definições de tipos. Deverá definir
                                                                /* declare e use o TAD */
      apenas os protótipos das funções e ser muito
       bem documentado. Ao final, ele poderá ser            }
         utilizado em qualquer outro programa,
             desde que informado no include.                                                               10
Estrutura de Dados I




   Parte 2 :
Listas Lineares

                         11
Conceitos

§ Listas, por definição, são estruturas formadas por
  um conjunto de dados de forma a preservar a
  relação de ordem linear entre eles
   § lista telefônica, lista de clientes de uma agência
     bancária, lista de setores de disco
§ Uma lista contém nós, os quais são acessados
  através de operações que esta lista possui
§ Podemos representar as listas da seguinte forma:

           E1     E2     E3      ...   E(n-1)   E(n)

                                                          12
Listas Lineares

§ Propriedades de uma lista:
   §   Existem n elementos na sequência;
                                  sequência
   §   E1 é o primeiro elemento da sequência;
   §   En é o último elemento da sequência;
   §   Para todo i, j entre 1 e n, se i<j, então o elemento Ei
       antecede o elemento Ej;
§ Portanto, podemos concluir que, em uma lista,
  existem elementos sucessores e antecessores:
   § E2 é sucessor de E1 e antecessor de E3
   § En não possui sucessores, mas E1 possui
                                                                 13
Operações
§ A literatura é unânime quanto às operações básicas
  realizadas numa estrutura lista:
   Πcriar uma lista vazia
   • verificar se uma lista está vazia
   Ž obter o tamanho da uma lista
   • obter/modificar o valor do elemento em uma
      determinada posição na lista
   • obter a posição de elemento cujo valor é dado
   ‘ inserir um novo elemento após (ou antes) uma
      determinada posição na lista
   ’ remover um elemento em uma determinada posição
      da lista
   “ exibir / imprimir os elementos de uma lista
   ” concatenar duas listas                          14
Tipos de listas

§ Neste estágio, estaremos trabalhando com dois
  tipos de listas lineares: seqüencial e encadeada
    Œ Seqüencial: os nós desta lista são armazenados em
     endereços seqüenciais. Materializada na forma de um
     vetor (arranjo ou matriz)
        L    João   Maria   Ana   ...
               1     2       3    ...     MAX

    • Encadeada: seqüência de elementos encadeados por
     ponteiros, ou seja: dado + ponteiro próx. elemento
     ponteiros
L
      João          Maria           Ana           Edu
                                                           15
Para um bom aproveitamento:

§ Resolva todas as questões da lista de tipos
  abstratos
§ Procure o professor ou monitor da disciplina e
  questione conceitos, listas, etc.
§ Não deixe para codificar tudo e acumular assunto
  para a primeira avaliação.
   § Este é apenas um dos assuntos abordados na prova!




                                                         16

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Java5
Java5Java5
Java5
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
C 1
C 1C 1
C 1
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
[Parfor] esw aula 03
[Parfor] esw   aula 03[Parfor] esw   aula 03
[Parfor] esw aula 03
 
TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#
 
Java1
Java1Java1
Java1
 
Java7
Java7Java7
Java7
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Java4
Java4Java4
Java4
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 

Andere mochten auch

Andere mochten auch (8)

Java 07
Java 07Java 07
Java 07
 
Lista 03
Lista 03Lista 03
Lista 03
 
Cap05b
Cap05bCap05b
Cap05b
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Java 03
Java 03Java 03
Java 03
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Java 02
Java 02Java 02
Java 02
 
Modulo b
Modulo bModulo b
Modulo b
 

Ähnlich wie Pged 03 (20)

Cap10
Cap10Cap10
Cap10
 
Ed1
Ed1Ed1
Ed1
 
Explicando Estruturas/Registros no C#
Explicando Estruturas/Registros no C#Explicando Estruturas/Registros no C#
Explicando Estruturas/Registros no C#
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Java 02
Java 02Java 02
Java 02
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Top0
Top0Top0
Top0
 
Top0
Top0Top0
Top0
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Pged 04
Pged 04Pged 04
Pged 04
 
Tipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e EncapsulamentoTipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e Encapsulamento
 
5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem c
 
Funções em C
Funções em CFunções em C
Funções em C
 
Ud2
Ud2Ud2
Ud2
 

Mehr von samuelthiago

Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_vsamuelthiago
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_ivsamuelthiago
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iiisamuelthiago
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_iisamuelthiago
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_isamuelthiago
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iisamuelthiago
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)samuelthiago
 

Mehr von samuelthiago (20)

Eclipse i (1)
Eclipse i (1)Eclipse i (1)
Eclipse i (1)
 
Html básico
Html básicoHtml básico
Html básico
 
Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
 
Java 08
Java 08Java 08
Java 08
 
Java 06
Java 06Java 06
Java 06
 
Java 05
Java 05Java 05
Java 05
 
Java 04
Java 04Java 04
Java 04
 
Java 01
Java 01Java 01
Java 01
 
Pged 08
Pged 08Pged 08
Pged 08
 
Pged 07
Pged 07Pged 07
Pged 07
 
Pged 06
Pged 06Pged 06
Pged 06
 
Pged 05
Pged 05Pged 05
Pged 05
 
Pged 02
Pged 02Pged 02
Pged 02
 

Pged 03

  • 1. Curso Superior de Tecnologia em Telemática Programação e Estruturas de Dados Tipos Abstratos de Dados e Listas Lineares Copyright©2010 Prof. César Rocha cesarocha@ifpb.edu.br 1
  • 2. Objetivos § Explorar os conceitos fundamentais acerca da definição de tipos abstratos usando C § Desafios em modelar entidades do mundo real, dados e operações em um TAD, como materializar estes conceitos usando a linguagem C e bibliotecas § Overview sobre listas lineares § Suas propriedades e operações fundamentais, listas seqüenciais e encadeadas § Este módulo é breve, mas constitui um importante instrumento para os próximos módulos do curso 2
  • 3. Estrutura de Dados I Parte I : Tipos Abstratos de Dados 3
  • 4. Motivação § Em linguagens de programação, as variáveis e constantes são classificadas de acordo com um tipo de dados nativo da linguagem em uso § Ex: Todos os tipos primitivos (float, int, double, char,..) § Estes tipos são utilizados para representar números inteiros, caracteres, etc. § Uma vez que o tipo é estabelecido, também podemos saber que operações são suportadas por este tipo § Entretanto, para resolvermos problemas complexos no mundo real com programação, faz-se necessário modelar outros tipos de dados... 4
  • 5. Motivação § Estudo de caso breve e simples: § Implementando um sistema de caixa numa linguagem procedural § Você pergunta ao seu contratante: “Mas...o que é um sistema de caixa?” § É um sistema que cadastra produtos e clientes e relaciona-os numa venda § Operações básicas deste tipo de sistema (resumidamente...) § Incluir produto numa venda, cadastrar um cliente novo, calcular total de uma venda, fechar venda, etc. 5
  • 6. Motivação § No exemplo anterior, dizemos que o programador deverá “levantar” uma abstração da realidade § Isso em função de um conjunto de dados que representa cada uma das entidades e suas operações § O termo “abstrato” significa “esquecer a forma de implementação” (ou a estratégia). § Em seguida, deve ser escolhida a forma (como) de representar tais dados na linguagem escolhida § Que recursos são oferecidos pela linguagem? § A partir da abstração, estaremos dando início a abstração modelagem de tipos complexos 6
  • 7. Definição § Tipo Abstrato de Dado § É uma abstração da realidade, mediante a definição de um conjunto de dados que a representa e quais operações serão realizadas sobre estes dados § Implementar um TAD numa linguagem de programação é encontrar uma forma de representá- la utilizando esta linguagem escolhida § Utilizando os tipos nativos e suas operações suportadas pelo computador § Em C, a implementação destes TADs se dá basicamente através de ponteiros e estruturas 7
  • 8. Regras básicas de modelagem Œ Encapsulamento: não é preciso saber os detalhes de implementação do TAD. Seu usuário irá se preocupar apenas com base nas operações oferecidas (interface) • Modularização: é a divisão de uma tarefa maior e mais complexa em tarefas menores e, provavelmente, mais fáceis de implementar e testar 8
  • 9. Boas práticas usando C § Antes: § Para que as funções implementadas em um arquivo.c possam ser usadas por um outro módulo C, este precisa conhecer os cabeçalhos das funções oferecidas por arquivo.c § 1ª tentativa: repetição dos cabeçalhos das funções § E se um arquivo usa funções de vários outros módulos? § Depois: § Um módulo de funções C normalmente é associado a um arquivo de mesmo nome e que contém apenas os cabeçalhos (arquivo.h)das funções oferecidas por este módulo e, eventualmente, os tipos de dados que ele exporte (typedef’s, struct’s, etc). 9
  • 10. pilha.h Boas práticas usando C pilha.c // definição estrutura //implementação do TAD typedef struct pilha{ #include “pilha.h” … #include<bibliotecas C> }TPilha; // Protótipos // Corpo das funções // método responsável por… com assinatura Extraia do TAD Pilha* criaPilha( int tamanho ); apenas os // método responsável por… protótipos e crie uma biblioteca em int consultaTopo( void ); um arquivo header // método responsável por… void empilha (Pilha* p, int elem); prog3.c // método responsável por… prog2.c int desempilha( void ); prog1.c /* main.c */ #include “pilha.h” #include<bibliotecas C> Este arquivo .h irá conter toda a interface do main() { TAD e definições de tipos. Deverá definir /* declare e use o TAD */ apenas os protótipos das funções e ser muito bem documentado. Ao final, ele poderá ser } utilizado em qualquer outro programa, desde que informado no include. 10
  • 11. Estrutura de Dados I Parte 2 : Listas Lineares 11
  • 12. Conceitos § Listas, por definição, são estruturas formadas por um conjunto de dados de forma a preservar a relação de ordem linear entre eles § lista telefônica, lista de clientes de uma agência bancária, lista de setores de disco § Uma lista contém nós, os quais são acessados através de operações que esta lista possui § Podemos representar as listas da seguinte forma: E1 E2 E3 ... E(n-1) E(n) 12
  • 13. Listas Lineares § Propriedades de uma lista: § Existem n elementos na sequência; sequência § E1 é o primeiro elemento da sequência; § En é o último elemento da sequência; § Para todo i, j entre 1 e n, se i<j, então o elemento Ei antecede o elemento Ej; § Portanto, podemos concluir que, em uma lista, existem elementos sucessores e antecessores: § E2 é sucessor de E1 e antecessor de E3 § En não possui sucessores, mas E1 possui 13
  • 14. Operações § A literatura é unânime quanto às operações básicas realizadas numa estrutura lista: Œ criar uma lista vazia • verificar se uma lista está vazia Ž obter o tamanho da uma lista • obter/modificar o valor do elemento em uma determinada posição na lista • obter a posição de elemento cujo valor é dado ‘ inserir um novo elemento após (ou antes) uma determinada posição na lista ’ remover um elemento em uma determinada posição da lista “ exibir / imprimir os elementos de uma lista ” concatenar duas listas 14
  • 15. Tipos de listas § Neste estágio, estaremos trabalhando com dois tipos de listas lineares: seqüencial e encadeada Œ Seqüencial: os nós desta lista são armazenados em endereços seqüenciais. Materializada na forma de um vetor (arranjo ou matriz) L João Maria Ana ... 1 2 3 ... MAX • Encadeada: seqüência de elementos encadeados por ponteiros, ou seja: dado + ponteiro próx. elemento ponteiros L João Maria Ana Edu 15
  • 16. Para um bom aproveitamento: § Resolva todas as questões da lista de tipos abstratos § Procure o professor ou monitor da disciplina e questione conceitos, listas, etc. § Não deixe para codificar tudo e acumular assunto para a primeira avaliação. § Este é apenas um dos assuntos abordados na prova! 16