Você está na página 1de 8

Universidade do Extremo Sul Catarinense

Curso de Cincia da Computao


Disciplina: 7532
Professor:




Qual o papel das estruturas de dados no processo de desenvolvimento de software?


Desde o sculo XVI o Homem tem procurado facilitar sua vida atravs de inveno de
mecnicos para controlar operaes complexas. Blaise
primeira calculadora mecnica para coleta de impostos do pai. Em
computador digital o ENIAC (Electronic Numerical
vlvulas eletrnicas, entretanto, era
projetado para o clculo de trajetria balstica para o Exrcito dos Estados Unidos da Amrica.
As mquinas modernas, porm, alm de realizar clculos
armazenadoras e processadoras de informao
pesquisando, transferindo e atualizando uma enorme quantidade de dados
destas operaes necessita que os dados estejam bem
armazenamento destes dados sejam rpidos e
estruturas de dados e de algoritmos. As estruturas de dados so formas
estes dados.

As estruturas de dados esto presentes em qualquer sistema computacional que precise
acessar dados, por exemplo:

Os endereos mais recentes visitados por um browser na Internet quan
forward;
Editores de texto que revertem as
Dados organizados em uma planilha eletrnica;
Sistema de arquivos de
Implementaes de microinstrues em CPU;
Pesquisa atravs de ndices e

Como podemos perceber as estruturas de dados so usadas em todas as partes de um sistema
computacional, como por exemplo a
para buscar mtodos em uma classe, bus
prioridade de um grupo de threads.

Alm de todas as aplicaes mostradas no esqueamos que um programa de computador formado
de um algoritmo e dados.

Em resumo, uma Estrutura de Dados
meio, por exemplo, de listas, pilhas, filas, rvores entre outras.

So utilizadas para resolverem problemas que se encontram

A) Armazenamento de Dados no mundo real

Uma ficha de pessoal, que descreve um ser humano real;
Um registro de controle, que descreve a parte de um carro;
Um registro de transao financeira de um item em um supermercado, descrevendo um cheque
real feito para pagar uma conta em um supermercado.

B) Modelagem do Mundo Real

Uma Estrutura de Dados do tipo fila pode representar os clientes em uma fila de banco.


Universidade do Extremo Sul Catarinense
Curso de Cincia da Computao
Disciplina: 7532 - Estrutura de Dados I
Professor: Gilberto Vieira da Silva
gilbertovieirasilva@hotmail.com
INTRODUO
das estruturas de dados no processo de desenvolvimento de software?
Desde o sculo XVI o Homem tem procurado facilitar sua vida atravs de inveno de
mecnicos para controlar operaes complexas. Blaise Pascal (1623-1662), por
primeira calculadora mecnica para coleta de impostos do pai. Em meados dos anos 40 surge o primeiro
computador digital o ENIAC (Electronic Numerical Integrator and Computer). A funo deste colosso de 18.000
vlvulas eletrnicas, entretanto, era realizar uma grande carga de clculos matemticos, j que ele foi
trajetria balstica para o Exrcito dos Estados Unidos da Amrica.
As mquinas modernas, porm, alm de realizar clculos extremamente rpidos tambm
armazenadoras e processadoras de informao. Elas esto constantemente armazenando,
pesquisando, transferindo e atualizando uma enorme quantidade de dados complexos. A execuo otimizada
a que os dados estejam bem organizados e que os
destes dados sejam rpidos e eficientes, sendo assim, os computadores necessitam de boas
algoritmos. As estruturas de dados so formas sistemticas de organizar e acessar
As estruturas de dados esto presentes em qualquer sistema computacional que precise
Os endereos mais recentes visitados por um browser na Internet quan
ditores de texto que revertem as alteraes mais recentes;
ados em uma planilha eletrnica;
istema de arquivos de sistemas operacionais;
es de microinstrues em CPU;
esquisa atravs de ndices em um banco de dados relacional.
as estruturas de dados so usadas em todas as partes de um sistema
utacional, como por exemplo a JVM (Java Virtual Machine) da SUN que utiliza
para buscar mtodos em uma classe, buscar objetos instanciados na memria ou para executar uma ordem de
prioridade de um grupo de threads.
Alm de todas as aplicaes mostradas no esqueamos que um programa de computador formado
ma Estrutura de Dados uma organizao de dados na memria de um computador, por
, de listas, pilhas, filas, rvores entre outras.
So utilizadas para resolverem problemas que se encontram, por exemplo, nas seguintes situaes:
A) Armazenamento de Dados no mundo real
Uma ficha de pessoal, que descreve um ser humano real;
Um registro de controle, que descreve a parte de um carro;
Um registro de transao financeira de um item em um supermercado, descrevendo um cheque
para pagar uma conta em um supermercado.

Uma Estrutura de Dados do tipo fila pode representar os clientes em uma fila de banco.


das estruturas de dados no processo de desenvolvimento de software?
Desde o sculo XVI o Homem tem procurado facilitar sua vida atravs de inveno de dispositivos
1662), por exemplo, desenvolveu a
meados dos anos 40 surge o primeiro
Integrator and Computer). A funo deste colosso de 18.000
realizar uma grande carga de clculos matemticos, j que ele foi
trajetria balstica para o Exrcito dos Estados Unidos da Amrica.
extremamente rpidos tambm so
Elas esto constantemente armazenando, analisando,
complexos. A execuo otimizada
organizados e que os mtodos de acesso e de
eficientes, sendo assim, os computadores necessitam de boas
sistemticas de organizar e acessar
As estruturas de dados esto presentes em qualquer sistema computacional que precise armazenar e
Os endereos mais recentes visitados por um browser na Internet quando se utiliza o back ou
as estruturas de dados so usadas em todas as partes de um sistema
utiliza-se de estruturas de dados
car objetos instanciados na memria ou para executar uma ordem de
Alm de todas as aplicaes mostradas no esqueamos que um programa de computador formado
uma organizao de dados na memria de um computador, por
nas seguintes situaes:
Um registro de transao financeira de um item em um supermercado, descrevendo um cheque
Uma Estrutura de Dados do tipo fila pode representar os clientes em uma fila de banco.
Tipos Abstratos de Dados (TAD)

Um TAD uma estrutura que encapsula um conjunto de atributos (dados) e um conjunto de mtodos
(operaes) que atuam sobre os dados encapsulados. Um TAD precisa ser abstrado de qualquer linguagem
de programao. Toda operao a ser realizada sobre os dados em um TAD s poder ser executada atravs
dos mtodos definidos na estrutura deste TAD. Sendo assim, um programa baseado em TAD dever conter
algoritmos e estruturas de dados que implementem, em uma determinada linguagem de programao, os
mtodos e as estruturas de dados dos TAD utilizados pelo programa. O conceito de TAD fornece fundamentos
bsicos para a abordagem OO.


Todas as estruturas de dados podem ser analisadas por meio dos TADs (Tipos de Dados Abstratos).

Um TAD pode ser definido como um conjunto de valores e uma coleo de operaes que atuam
sobre esses valores.

A idia base dos TADs possibilitar a percepo da separao do que fazer e como fazer.

A importncia da compreenso de um TAD o fato das Estruturas de Dados poderem ser estudadas
do ponto de vista de serem TADs.











Por exemplo: A fila um TAD que possui uma seqncia finita de elementos do tipo T, com as seguintes
operaes:

a) Criar a fila, deixando-a vazia;
b) Testar a fila se est ou no vazia;
c) Enfileirar um novo elemento no final da fila, desde que no esteja cheia;
d) Retirar um elemento do incio da fila, desde que ela no esteja vazia;
e) Consultar o incio da fila, desde que ela no esteja vazia.


Os TADs so construdos a partir dos tipos primitivos, estes agrupados por meio de tipos construdos e
organizados em rotinas e funes.

Tipos primitivos:

Inteiro / int
Real / float
Lgico / bool
Caracter / char

Para cada tipo primitivo definido um conjunto de operaes possveis.











Estrutura de Dados

Funo Funo
dados
dados

Tipos construdos (mecanismos):

Vetor

Em pseudocdigo: int vet[4];

Em C++: int vet[4];


0 1 2 3

Matriz

Em pseudocdigo: int mat[4][3];

Em C++: int mat[4][3];

0
1
2
3
0 1 2

Registros

Em pseudocdigo:

tipo reg
{
int cod;
real peso;
};

Declarao das variveis:
reg cadastro;

reg banco[10];

Em C++: struct reg
{
int cod;
float peso;
};

Declarao das variveis:

reg cadastro;

reg banco[10];

Ponteiros

Em pseudocdigo: int *pidade;

Em C++: int *pidade;

Funes:

Em pseudocdigo:

prog soma
int x, y, z;

leia x;
leia y;
z <- somaxy( x, y )
imprima A soma de x + y : , z;

fimprog

Em C++:

void soma( )
{
int x, y, z;

cin>>x;
cin>>y;
z = somaxy(x,y);
cout<<A soma de x + y :<<z;
}


Em pseudocdigo:

int somaxy(int h, int j)
{
int l;

l <- h + j;
retorne ( l );
}

Em C++:
int somaxy(int h, int j)
{
int l;
l = h + j;
return( l );
}

Observaes:
1) A quantidade de parmetros no algoritmo chamador deve ser igual a quantidade de parmetros no
algoritmo chamado.
2) Parmetro: meio de comunicao entre o A chamador, e o B chamado



Recursividade
Um mtodo recursivo aquele que chama a si mesmo. Ele pode ser utilizado para resolver vrios
problemas matemticos como a funo Fatorial e tambm Fibonacci, entre outros.
Em programas complexos e reais, a recursividade utilizada para resolver problemas onde em uma data
situao identifica-se que o problema a ser resolvido em um determinado ponto possui os mesmos critrios
daquele que se encontra em execuo.


Exemplo: Fatorial
5! = 5 * 4 * 3 * 2 * 1 (resultado = 120)
Funo que calcula o fatorial utilizando um lao de repetio:
int calculaFatorialFOR(int valorFatorar){
int fat = 1;
for(int n = valorFatorar; n > 0; n--){
fat = fat * n;
}
return fat;
}

Funo que calcula o fatorial utilizando recurso:
int calculaFatorialRecursivo(int valorFatorar){
int fat;
if(valorFatorar == 0){
fat = 1;
}else{

int n = valorFatorar - 1;
int r = calculaFatorialRecursivo(n);
fat = valorFatorar * r;
}
return fat;
}


Uma exigncia importante para que um algoritmo recursivo esteja correto que ele no gere uma
seqncia infinita de chamadas a si mesmo. Evidentemente, todo algoritmo que realmente gere tal seqncia
pode no terminar nunca. Para, no mnimo, um argumento ou grupo de argumentos, a funo recursiva f deve
ser definida de modo a no envolver f. Dever existir uma "sada" da seqncia de chamadas recursivas.
No exemplo apresentado, perceba que a cada chamada recursiva do mtodo calculaFatorialRecursivo a
varivel passada por parmetro e subtrada em -1, o que leva o algoritmo a parar quando o valor fatorar for
zero.

ALGORTIMOS DE BUSCA E ORDENAO

BUSCA BINRIA
possvel que voc esteja com uma impresso errada de que a recursividade uma ferramenta muito
til para definir funes matemticas, mas no tem influncia sobre atividades de computao mais prticas. O
prximo exemplo ilustra uma aplicao de recursividade sobre uma das atividades mais conhecidas na
computao: a busca.
Imagine um vetor de elementos no qual os objetos foram posicionados em determinada ordem, ou seja,
possuem um critrio de ordenao, como por exemplo, uma lista de inteiros de estar em ordem crescente ou
decrescente. Em um exemplo mais prtico, um dicionrio ou um catlogo de telefones pode ser considerado
um vetor cujos elementos esto em ordem alfabtica. O arquivo da folha de pagamento de uma empresa pode
estar classificado pela ordem do CPF dos funcionrios. Suponha que esse vetor exista e desejemos localizar
determinado elemento dentro dele. Por exemplo, queremos pesquisar um nome num catlogo de telefones,
uma palavra num dicionrio ou determinado empregado num arquivo de pessoal. O processo usado para
encontrar tal elemento chamado busca.

Como a busca uma atividade muito conhecida na computao, queremos descobrir um mtodo
eficiente para execut-la. Talvez o mtodo de busca mais simples seja o da busca seqencial ou linear, no qual
cada item do vetor examinado por vez e comparado ao item que se est procurando, at ocorrer uma
coincidncia. Se a lista no estiver organizada ou se foi formada a esmo, possvel que a busca linear seja a
nica maneira de localizar algo dentro dela (a menos, evidentemente, que a lista seja primeiro reorganizada).
Entretanto, um mtodo desse tipo jamais seria usado para localizar um nome num catlogo de telefones. Em
vez disso, o catlogo seria aberto numa pgina qualquer e os nomes pertencentes a essa pgina seriam
examinados. Como os nomes encontram-se em ordem alfabtica, esse exame determinaria se a busca deve
continuar na primeira ou segunda metade do catlogo.

Agora, apliquemos essa idia pesquisa em vetores.
Mtodo de desenvolvimento do algoritimo
Se um vetor contiver somente um elemento, o problema ser simples. Caso contrrio, compare o item
sendo procurado ao item posicionado no meio do vetor. Se forem iguais, a busca terminou com sucesso. Se o
elemento do meio for maior que o elemento sendo procurado, o processo de busca ser repetido na primeira
metade do vetor (porque esse item deve estar na primeira metade); caso contrrio, o processo ser repetido na
segunda metade. Observe que, toda vez que uma comparao feita, o nmero de elementos a pesquisar
cortado pela metade. Para os vetores grandes, esse mtodo superior busca seqencial na qual cada
comparao reduz o nmero de elementos a pesquisar em apenas um. Por causa da diviso do vetor a ser
pesquisado em duas partes iguais, esse mtodo de busca chamado busca binria.

Observe que definimos de modo muito natural uma busca binria recursivamente. Se o item sendo
procurado no for igual ao elemento do meio do vetor, as instrues sero pesquisar um subvetor usando o
mesmo mtodo. Dessa forma, o mtodo de busca definido em termos de si mesmo com um vetor menor
como entrada. Temos certeza de que o processo terminar porque os vetores de entrada ficaro cada vez
menores, e a busca em um vetor de um nico elemento definida no recursivamente, uma vez que o
elemento do meio desse vetor seu nico elemento.


Exemplo de um mtodo de busca binria em C.
int buscaBinaria_2(int vetor[], int valorProcurado, int inicio, int fim) {
countChamadas++;
if(inicio > fim){
//O valor procurado no foi encontrado
return -1;
}

int meio = (inicio + fim) / 2;

if(vetor[meio] == valorProcurado){
return meio;
}else if (valorProcurado < vetor[meio]){
//procura na primeira parte (menor)
//inicio -->> no deve ser alterado
//fim -->> meio -1 porque a posio equivalente a meio j foi comparada

fim = meio -1;
return buscaBinaria_2(vetor, valorProcurado, inicio, fim);

}else {
//procura na segunda parte (maior)
inicio = meio + 1;
//fim -->> no ser alterado
return buscaBinaria_2(vetor, valorProcurado, inicio, fim);
}

//valor no encontrado
return -1;
}


ORDENAO / CLASSIFICAO

Ordenar corresponde ao processo de rearranjar um conjunto de objetos em ordem ascendente ou
descendente. O objetivo principal da ordenao facilitar a recuperao posterior de itens do conjunto
ordenado. A atividade de colocar as coisas em ordem est presente na maioria das aplicaes em que os
objetos armazenados tm de ser pesquisados e recuperados.

A disciplina de Classificao de dados e anlise de suas complexidades ir apresentar com maiores
detalhes estes algoritmos.

Mtodo de ordenao BubbleSort (Bolha)

o mtodo mais simples em termos de implementao, porm o menos e eficiente. A idia principal
do algoritmo percorrer o vetor n - 1 vezes, a cada passagem fazendo flutuar para o inicio o menor elemento
da seqncia. Essa movimentao, ilustrada na figura abaixo, lembra a forma como as bolhas procuram seu
prprio nvel, por isso o nome do algoritmo. Seu uso no recomendado para vetores com muitos elementos.




Exemplo de ordenao em C

for(int i = 0; i < NUM_ELM; i++){
//percorre a lista at o penltimo elemento
for(int j = 0; j < NUM_ELM - 1; j++){
int elAtual = vetorDesordenado[j];
int elProx = vetorDesordenado[j + 1];
if(elAtual > elProx){

//altera o elemento atual, informando o prximo
vetorDesordenado[j] = elProx;

//altera o prximo elemento, informando o atual
vetorDesordenado[j + 1] = elAtual;
}
}
}

Você também pode gostar