SlideShare uma empresa Scribd logo
1 de 23
ESTRUTURA DE DADOS
Prof. Me. Paulo Henrique Santana de Oliveira
Linguagem Binária
A unidade básica da informação é o bit, cujo valor compreende uma entre duas
possibilidades mutuamente exclusivas. Por exemplo, se um interruptor de luz pode
estar em uma das duas posições, mas não em ambas simultaneamente, o fato de
ele estar na posição de "ligado" ou na posição de "desligado" é um bit de
informação.
Linguagem Binária
Os dígitos binários 0 e 1 são usados para representar os dois possíveis estados de
determinado bit (na realidade, a palavra "bit" é uma contração das palavras
"binary digit"). Dados n bits, uma string de n ls e 0s é usada para representar seus
valores. Por exemplo, a string 101011 representa seis chaves, estando a primeira
delas "ativada" (1), a segunda "desativada" (0), a terceira ativada, a quarta
desativada, a quinta e a sexta ativadas.
Tabela ASCII
O nome ASCII vem do inglês American Standard Code for Information Interchange
ou ”Código Padrão Americano para o Intercâmbio de Informação”. Ele é baseado
no alfabeto romano e sua função é padronizar a forma como os computadores
representam letras, números, acentos, sinais diversos e alguns códigos de
controle.
Conversão de bases
Exercício
Com base no que você aprendeu sobre bases binária, decimal e caracteres,
converta seu e-mail para binário.
O que significa Estrutura de Dados?
Estrutura de Dados é o ramo da computação que estuda os diversos mecanismos de organização
de dados para atender aos diferentes requisitos de processamento.
As estruturas de dados definem a organização, métodos de acesso e opções de processamento
para a informação manipulada pelo programa. A definição da organização interna de uma
estrutura de dados é tarefa do projetista da estrutura, que define também qual a API para a
estrutura, ou seja, qual o conjunto de procedimentos que podem ser usados para manipular os
dados na estrutura. É esta API que determina a visão funcional da estrutura de dados, que é a
única informação relevante para um programador que vá utilizar uma estrutura de dados pré-
definida.
Tipos de Dados
A organização de uma estrutura de dados é construída a partir de alguns blocos
básicos, presentes na maior parte das linguagens de programação de alto nível. A
partir desses blocos elementares (os tipos escalares) e de operadores das
linguagens de programação, construções mais complexas podem ser definidas, tais
como arranjos e estruturas.
Tipos de dados – Escalares
A mais simples estrutura para representar um dado é um escalar, que representa um elemento de
informação que pode ser acessado através de um identificador.
A representação elementar de um dado se dá através de um escalar. Em assembly, tipicamente
todos os valores escalares são representados na forma de bytes ou words. Diferentes linguagens
de alto nível determinam tipos diferenciados de escalares que são compreendidos pela linguagem.
Internamente, todos os dados são representados no computador como sequências de bits2.2. Esta
é a forma mais conveniente para manipular os dados através de circuitos digitais, que podem
diferenciar apenas entre dois estados (on ou off, verdade ou falso, 0 ou 1).
char caráter
int inteiro
float real
double real de precisão dupla
Tipos de dados – Ponteiros
Em C, é possível ter acesso não apenas ao valor de uma variável
mas também ao seu endereço. O operador unário &, aplicado a
uma variável, retorna o endereço de memória associado à
variável. A manipulação de endereços dá-se através da
utilização de ponteiros. Ponteiros constituem um dos recursos
mais utilizados na programação C. Eles fornecem um
mecanismo poderoso, flexível e eficiente de acesso a variáveis.
Há computações que só podem ser expressas através do uso de
ponteiros. Para definir que uma variável vai guardar um
endereço, o operador unário * é utilizado na declaração, como
mostra a imagem.
Tipos de dados – Agregados
As linguagens de programação normalmente oferecem facilidades para construir tipos
compostos por agregados de outros elementos. Estruturas agregadas uniformes, onde
todos os elementos são de um mesmo tipo arranjados em uma área contígua de memória,
constituem arranjos ou vetores sequenciais; seus elementos podem ser acessados através
de um índice representando a posição desejada. Em C, arranjos são definidos e acessados
através do operador de indexação [], como em:
int elem[5]; // definição: arranjo com cinco inteiros.
elem[0] = 1; // acesso ao primeiro elemento do arranjo.
Tipos de dados – Agregados
Agregados não-uniformes, com componentes de tipos distintos, constituem
registros. Em C, registros são definidos através do uso da construção struct, como
em:
struct {
int a;
char b;
} x; // definição da estrutura.
Tipos de dados – Agregados
A palavra chave struct inicia a definição da estrutura. A etiqueta (tag) é opcional, porém deve estar
presente caso se deseje referenciar esta estrutura em algum momento posterior. Da mesma forma, a
lista de variáveis declaradas (var1,..., varN) também não precisa estar presente -- a não ser que a
etiqueta não esteja presente. Quando a etiqueta está presente na definição de uma estrutura,
variáveis com essa mesma estrutura podem ser definidas posteriormente.
struct simples {
int a; float b;
}; // da declaração da variável com esse tipo de estrutura, como em
struct simples x;
Tipos de dados – Agregados
Uma vez que uma estrutura tem componentes internos que devem ser acessados para
processamento, algum mecanismo de acesso deve ser fornecido pela linguagem. C oferece dois
operadores que permitem acessar elementos de estruturas. O operador básico de acesso a
elementos de estruturas é o operador . (ponto). Por exemplo, para atribuir o valor 1 ao componente
a de x, a expressão usada é x.a = 1;. A outra forma de expressar acesso aos elementos de uma
estrutura está associada ao conceito de ponteiros para estruturas -- neste caso, o operador -> (seta)
é utilizado. Considere o exemplo
Simples *y; y = &x; y->a = 1; // equivalente ao exemplo anterior
Observe que a expressão y->a equivale à (*y).a, sendo simplesmente uma notação mais confortável
para denotar a mesma operação.
SEGUNDA PARTE
Listas Lineares
Lista linear é uma estrutura de dados na qual elementos de um mesmo tipo de dado estão
organizados de maneira sequencial. Não necessariamente, estes elementos estão
fisicamente em sequência, mas a ideia é que exista uma ordem lógica entre eles. Um
exemplo disto seria um consultório médico: as pessoas na sala de espera estão sentadas em
qualquer lugar, porém sabe-se quem é o próximo a ser atendido, e o seguinte, e assim por
diante. Assim, é importante ressaltar que uma lista linear permite representar um conjunto
de dados afins (de um mesmo tipo) de forma a preservar a relação de ordem entre seus
elementos. Cada elemento da lista é chamado de nó, ou nodo.
Listas Lineares – Definição e exemplos
Conjunto de N nós, onde N ≥ 0, x1, x2, ..., xn, organizados de forma a refletir a
posição relativa dos mesmos. Se N ≥ 0, então x1 é o primeiro nó. Para 1 < k < n, o nó
xk é precedido pelo nó xk-1 e seguido pelo nó xk+1 e xn é o último nó. Quando N =
0, diz-se que a lista está vazia. Exemplos de listas lineares:
Pessoas na fila de um banco; Letras em uma palavra; Relação de notas dos alunos de
uma turma; Itens em estoque em uma empresa; Dias da semana; Vagões de um
trem; Pilha de pratos; Cartas de baralho.
Alocação de uma Lista
Quanto a forma de alocar memória para armazenamento de seu elementos, uma
lista pode ser: Sequencial ou Contígua
Numa lista linear contígua, os nós além de estarem em uma sequência lógica, estão
também fisicamente em sequência. A maneira mais simples de acomodar uma lista
linear em um computador é através da utilização de um vetor.
Alocação de uma Lista
A representação por vetor explora a sequencialidade da memória de tal forma que
os nós de uma lista sejam armazenados em endereços contíguos.
Encadeada
Os elementos não estão necessariamente armazenados sequencialmente na
memória, porém a ordem lógica entre os elementos que compõem a lista deve ser
mantida. Listas lineares encadeadas serão discutidas adiante.
Lista Encadeada
Uma lista encadeada ou lista ligada é uma estrutura de dados linear e dinâmica. Ela
é composta por várias células que estão interligadas através de ponteiros, ou seja,
cada célula possui um ponteiro que aponta para o endereço de memória da próxima
célula. Desse modo, as células da estrutura não precisam estar em posições
contíguas da memória. Isso faz com que a estrutura se torne dinâmica, pois há
qualquer momento, é possível alocar uma nova célula e mudar os ponteiros das
células já existentes, de modo que a nova célula seja inserida na estrutura com
êxito, na posição desejada pelo programador.
Operações com Listas
As operações comumente realizadas com listas são:
Criação de uma lista; Remoção de uma lista; Inserção de um elemento da lista;
Remoção de um elemento da lista; Acesso de um elemento da lista; Alteração de um
elemento da lista; Combinação de duas ou mais listas; Classificação da lista; Cópia da
lista; Localizar nodo através de info.
Tipos de Listas Lineares
Os tipos mais comuns de listas lineares são as:
PILHAS Uma pilha é uma lista linear do tipo LIFO - Last In First Out, o último elemento que entrou, é o primeiro a sair.
Ela possui apenas uma entrada, chamada de topo, a partir da qual os dados entram e saem dela. Exemplos de pilhas
são: pilha de pratos, pilha de livros, pilha de alocação de variáveis da memória, etc.
FILAS Uma fila é uma lista linear do tipo FIFO - First In First Out, o primeiro elemento a entrar será o primeiro a sair. Na
fila os elementos entram por um lado (“por trás”) e saem por outro (“pela frente”). Exemplos de filas são: a fila de
caixa de banco, a fila do INSS, etc.
DEQUES Um deque - Double-Ended QUEue) é uma lista linear na qual os elementos entram e saem tanto pela “pela
frente” quanto “por trás”. Pode ser considerada uma generalização da fila.
Assim, o que vai distinguir os diferentes tipos de listas são as operações que se podem realizar sobre as mesmas,
podendo tanto serem implementadas com alocação sequencial quanto com alocação encadeada.

Mais conteúdo relacionado

Semelhante a Estrutura de Dados

Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
Alvaro Oliveira
 
Programando em python listas
Programando em python   listasProgramando em python   listas
Programando em python listas
samuelthiago
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
Fabio Spanhol
 
Conceitos essenciais de bases de dados
Conceitos essenciais de bases de dadosConceitos essenciais de bases de dados
Conceitos essenciais de bases de dados
Patrícia Morais
 
004 programando em python - listas
004   programando em python - listas004   programando em python - listas
004 programando em python - listas
Leandro Barbosa
 

Semelhante a Estrutura de Dados (20)

Classes e Estrutura de Dados
Classes e Estrutura de DadosClasses e Estrutura de Dados
Classes e Estrutura de Dados
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Motivação
MotivaçãoMotivação
Motivação
 
Pged 03
Pged 03Pged 03
Pged 03
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Programando em python listas
Programando em python   listasProgramando em python   listas
Programando em python listas
 
Sql - introdução
Sql -  introduçãoSql -  introdução
Sql - introdução
 
Estruturas de Dados: Listas, fundamentos.
Estruturas de Dados: Listas, fundamentos.Estruturas de Dados: Listas, fundamentos.
Estruturas de Dados: Listas, fundamentos.
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Trabalho de análise e projeto 2
Trabalho de análise e projeto 2Trabalho de análise e projeto 2
Trabalho de análise e projeto 2
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Lista de inteiros
Lista de inteirosLista de inteiros
Lista de inteiros
 
Conceitos essenciais de bases de dados
Conceitos essenciais de bases de dadosConceitos essenciais de bases de dados
Conceitos essenciais de bases de dados
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
004 programando em python - listas
004   programando em python - listas004   programando em python - listas
004 programando em python - listas
 
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array List
 
Prova perito pf area 3 1997
Prova perito pf area 3 1997Prova perito pf area 3 1997
Prova perito pf area 3 1997
 

Estrutura de Dados

  • 1. ESTRUTURA DE DADOS Prof. Me. Paulo Henrique Santana de Oliveira
  • 2. Linguagem Binária A unidade básica da informação é o bit, cujo valor compreende uma entre duas possibilidades mutuamente exclusivas. Por exemplo, se um interruptor de luz pode estar em uma das duas posições, mas não em ambas simultaneamente, o fato de ele estar na posição de "ligado" ou na posição de "desligado" é um bit de informação.
  • 3. Linguagem Binária Os dígitos binários 0 e 1 são usados para representar os dois possíveis estados de determinado bit (na realidade, a palavra "bit" é uma contração das palavras "binary digit"). Dados n bits, uma string de n ls e 0s é usada para representar seus valores. Por exemplo, a string 101011 representa seis chaves, estando a primeira delas "ativada" (1), a segunda "desativada" (0), a terceira ativada, a quarta desativada, a quinta e a sexta ativadas.
  • 4. Tabela ASCII O nome ASCII vem do inglês American Standard Code for Information Interchange ou ”Código Padrão Americano para o Intercâmbio de Informação”. Ele é baseado no alfabeto romano e sua função é padronizar a forma como os computadores representam letras, números, acentos, sinais diversos e alguns códigos de controle.
  • 5.
  • 7. Exercício Com base no que você aprendeu sobre bases binária, decimal e caracteres, converta seu e-mail para binário.
  • 8. O que significa Estrutura de Dados? Estrutura de Dados é o ramo da computação que estuda os diversos mecanismos de organização de dados para atender aos diferentes requisitos de processamento. As estruturas de dados definem a organização, métodos de acesso e opções de processamento para a informação manipulada pelo programa. A definição da organização interna de uma estrutura de dados é tarefa do projetista da estrutura, que define também qual a API para a estrutura, ou seja, qual o conjunto de procedimentos que podem ser usados para manipular os dados na estrutura. É esta API que determina a visão funcional da estrutura de dados, que é a única informação relevante para um programador que vá utilizar uma estrutura de dados pré- definida.
  • 9. Tipos de Dados A organização de uma estrutura de dados é construída a partir de alguns blocos básicos, presentes na maior parte das linguagens de programação de alto nível. A partir desses blocos elementares (os tipos escalares) e de operadores das linguagens de programação, construções mais complexas podem ser definidas, tais como arranjos e estruturas.
  • 10. Tipos de dados – Escalares A mais simples estrutura para representar um dado é um escalar, que representa um elemento de informação que pode ser acessado através de um identificador. A representação elementar de um dado se dá através de um escalar. Em assembly, tipicamente todos os valores escalares são representados na forma de bytes ou words. Diferentes linguagens de alto nível determinam tipos diferenciados de escalares que são compreendidos pela linguagem. Internamente, todos os dados são representados no computador como sequências de bits2.2. Esta é a forma mais conveniente para manipular os dados através de circuitos digitais, que podem diferenciar apenas entre dois estados (on ou off, verdade ou falso, 0 ou 1). char caráter int inteiro float real double real de precisão dupla
  • 11. Tipos de dados – Ponteiros Em C, é possível ter acesso não apenas ao valor de uma variável mas também ao seu endereço. O operador unário &, aplicado a uma variável, retorna o endereço de memória associado à variável. A manipulação de endereços dá-se através da utilização de ponteiros. Ponteiros constituem um dos recursos mais utilizados na programação C. Eles fornecem um mecanismo poderoso, flexível e eficiente de acesso a variáveis. Há computações que só podem ser expressas através do uso de ponteiros. Para definir que uma variável vai guardar um endereço, o operador unário * é utilizado na declaração, como mostra a imagem.
  • 12. Tipos de dados – Agregados As linguagens de programação normalmente oferecem facilidades para construir tipos compostos por agregados de outros elementos. Estruturas agregadas uniformes, onde todos os elementos são de um mesmo tipo arranjados em uma área contígua de memória, constituem arranjos ou vetores sequenciais; seus elementos podem ser acessados através de um índice representando a posição desejada. Em C, arranjos são definidos e acessados através do operador de indexação [], como em: int elem[5]; // definição: arranjo com cinco inteiros. elem[0] = 1; // acesso ao primeiro elemento do arranjo.
  • 13. Tipos de dados – Agregados Agregados não-uniformes, com componentes de tipos distintos, constituem registros. Em C, registros são definidos através do uso da construção struct, como em: struct { int a; char b; } x; // definição da estrutura.
  • 14. Tipos de dados – Agregados A palavra chave struct inicia a definição da estrutura. A etiqueta (tag) é opcional, porém deve estar presente caso se deseje referenciar esta estrutura em algum momento posterior. Da mesma forma, a lista de variáveis declaradas (var1,..., varN) também não precisa estar presente -- a não ser que a etiqueta não esteja presente. Quando a etiqueta está presente na definição de uma estrutura, variáveis com essa mesma estrutura podem ser definidas posteriormente. struct simples { int a; float b; }; // da declaração da variável com esse tipo de estrutura, como em struct simples x;
  • 15. Tipos de dados – Agregados Uma vez que uma estrutura tem componentes internos que devem ser acessados para processamento, algum mecanismo de acesso deve ser fornecido pela linguagem. C oferece dois operadores que permitem acessar elementos de estruturas. O operador básico de acesso a elementos de estruturas é o operador . (ponto). Por exemplo, para atribuir o valor 1 ao componente a de x, a expressão usada é x.a = 1;. A outra forma de expressar acesso aos elementos de uma estrutura está associada ao conceito de ponteiros para estruturas -- neste caso, o operador -> (seta) é utilizado. Considere o exemplo Simples *y; y = &x; y->a = 1; // equivalente ao exemplo anterior Observe que a expressão y->a equivale à (*y).a, sendo simplesmente uma notação mais confortável para denotar a mesma operação.
  • 17. Listas Lineares Lista linear é uma estrutura de dados na qual elementos de um mesmo tipo de dado estão organizados de maneira sequencial. Não necessariamente, estes elementos estão fisicamente em sequência, mas a ideia é que exista uma ordem lógica entre eles. Um exemplo disto seria um consultório médico: as pessoas na sala de espera estão sentadas em qualquer lugar, porém sabe-se quem é o próximo a ser atendido, e o seguinte, e assim por diante. Assim, é importante ressaltar que uma lista linear permite representar um conjunto de dados afins (de um mesmo tipo) de forma a preservar a relação de ordem entre seus elementos. Cada elemento da lista é chamado de nó, ou nodo.
  • 18. Listas Lineares – Definição e exemplos Conjunto de N nós, onde N ≥ 0, x1, x2, ..., xn, organizados de forma a refletir a posição relativa dos mesmos. Se N ≥ 0, então x1 é o primeiro nó. Para 1 < k < n, o nó xk é precedido pelo nó xk-1 e seguido pelo nó xk+1 e xn é o último nó. Quando N = 0, diz-se que a lista está vazia. Exemplos de listas lineares: Pessoas na fila de um banco; Letras em uma palavra; Relação de notas dos alunos de uma turma; Itens em estoque em uma empresa; Dias da semana; Vagões de um trem; Pilha de pratos; Cartas de baralho.
  • 19. Alocação de uma Lista Quanto a forma de alocar memória para armazenamento de seu elementos, uma lista pode ser: Sequencial ou Contígua Numa lista linear contígua, os nós além de estarem em uma sequência lógica, estão também fisicamente em sequência. A maneira mais simples de acomodar uma lista linear em um computador é através da utilização de um vetor.
  • 20. Alocação de uma Lista A representação por vetor explora a sequencialidade da memória de tal forma que os nós de uma lista sejam armazenados em endereços contíguos. Encadeada Os elementos não estão necessariamente armazenados sequencialmente na memória, porém a ordem lógica entre os elementos que compõem a lista deve ser mantida. Listas lineares encadeadas serão discutidas adiante.
  • 21. Lista Encadeada Uma lista encadeada ou lista ligada é uma estrutura de dados linear e dinâmica. Ela é composta por várias células que estão interligadas através de ponteiros, ou seja, cada célula possui um ponteiro que aponta para o endereço de memória da próxima célula. Desse modo, as células da estrutura não precisam estar em posições contíguas da memória. Isso faz com que a estrutura se torne dinâmica, pois há qualquer momento, é possível alocar uma nova célula e mudar os ponteiros das células já existentes, de modo que a nova célula seja inserida na estrutura com êxito, na posição desejada pelo programador.
  • 22. Operações com Listas As operações comumente realizadas com listas são: Criação de uma lista; Remoção de uma lista; Inserção de um elemento da lista; Remoção de um elemento da lista; Acesso de um elemento da lista; Alteração de um elemento da lista; Combinação de duas ou mais listas; Classificação da lista; Cópia da lista; Localizar nodo através de info.
  • 23. Tipos de Listas Lineares Os tipos mais comuns de listas lineares são as: PILHAS Uma pilha é uma lista linear do tipo LIFO - Last In First Out, o último elemento que entrou, é o primeiro a sair. Ela possui apenas uma entrada, chamada de topo, a partir da qual os dados entram e saem dela. Exemplos de pilhas são: pilha de pratos, pilha de livros, pilha de alocação de variáveis da memória, etc. FILAS Uma fila é uma lista linear do tipo FIFO - First In First Out, o primeiro elemento a entrar será o primeiro a sair. Na fila os elementos entram por um lado (“por trás”) e saem por outro (“pela frente”). Exemplos de filas são: a fila de caixa de banco, a fila do INSS, etc. DEQUES Um deque - Double-Ended QUEue) é uma lista linear na qual os elementos entram e saem tanto pela “pela frente” quanto “por trás”. Pode ser considerada uma generalização da fila. Assim, o que vai distinguir os diferentes tipos de listas são as operações que se podem realizar sobre as mesmas, podendo tanto serem implementadas com alocação sequencial quanto com alocação encadeada.