Vous êtes sur la page 1sur 10

Estruturas de Dados

Parte 1

Vetores e Matrizes; Procedimentos e Funes; Estruturas Pilha, Fila e Fila Circular

Faculdades Integradas Stella Maris FISMA Curso de Tecnologia em Anlise e Projeto de Sistemas Prof. Mrcio A. S. Torrente

Implementao de Estruturas de Dados Parte 1

Introduo s Estruturas de dados

Andradina SP

Diferentes tipos de estrutura de dados so adequadas a diferentes tipos de aplicao e algumas so altamente especializadas, destinando-se a algumas tarefas especficas. Por exemplo, as rvores Binrias (Btrees), Listas Encadeadas e Grafos so particularmente indicadas para a implementao de bancos de dados, enquanto que a implementao de compiladores de programas geralmente requer o uso de Pilhas e Filas. Estruturas de dados e algoritmos so temas fundamentais da cincia da computao, sendo utilizados nas mais diversas reas do conhecimento e com os mais diferentes propsitos de aplicao. Sabe-se que algoritmos manipulam dados. Quando estes dados esto organizados (dispostos) de forma coerente, caracterizam uma estrutura de dados. A organizao e os mtodos para manipular essa estrutura que lhe conferem singularidade. As estruturas de dados so chamadas tipos de dados compostos que dividem-se em homogneos (vetores e matrizes) e heterogneos (registros). As estruturas homogneas so conjuntos de dados formados pelo mesmo tipo de dado primitivo(Caracter, inteiro ou real). As estruturas heterogneas so conjuntos de dados formados por tipos de dados primitivos diferentes (campos de um registro). O enfoque deste estudo, daqui por diante ser voltado s estruturas homogneas de dados implentadas atravs de variveis compostas.

Variveis Indexadas
A declarao de variveis, uma a uma, suficiente para a codificao algortmica da soluo de uma ampla gama de problemas, mas insuficiente para resolver um grande nmero de problemas computacionais. Imagine, por exemplo, como faramos para construir um algoritmo, que lesse os nome de 500 pessoas e imprimisse um relatrio destes mesmos nomes, mas ordenados alfabeticamente. No seria uma tarefa simples, pois teramos que definir 500 variveis do tipo literal, como mostrado abaixo: Exemplo: Algoritmo "Invivel" var nome1, nome2, nome3, nome4, nome5,..., nome499, nome500: literal inicio leia(nome1) leia(nome2) leia(nome3) ... ... ... leia(nome500) ... fimalgoritmo Considere o tamanho do algoritmo, e o trabalho braal necessrio para constru-lo. Para resolver problemas como este, e outros, existem as variveis indexadas. A declarao de uma varivel indexada corresponde, na verdade, declarao de muitas variveis cujo identificador difere apenas por um ndice. O ndice corresponde a um valor numrico comeando por 1. Cada varivel indexada pode receber valores no decorrer do algoritmo como se fosse uma varivel simples.

Variveis Indexadas Unidimensionais (Vetores)


Variveis indexadas com uma nica dimenso, tambm conhecidas como vetores, so referenciadas por um nico ndice. A sintaxe para declarao : <identificador> : Vetor [<dimenso>] de <tipo> Onde: dimenso = [Vi..Vf] e Vi= Valor inicial do ndice e Vf valor Final do ndice. Exemplo:
Prof. Mrcio A. S. Torrente 2

Implementao de Estruturas de Dados Parte 1

var idade : Vetor[1..5] de inteiro nome : Vetor[1..5] de Caracter A declarao acima corresponde declarao de 5 variveis: nome[1], nome[2], nome[3], nome[4], nome[5], idade[1], idade[2], idade[3], idade[4] e idade[5]. Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padro: <identificador>[<posio>] <- <valor> Exemplo: nome[1] <- Joo da Silva idade[1] <- 35 nome[3] <- Maria Aparecida idade[3] <- idades[1] i <- 5 idade[i] <- 45 Exemplo: Algoritmo que l um vetor NUMERO de 6 posies, conta quantos valores deste vetor so negativos e em seguida mostra todos os valores do vetor e a quantidade calculada. Algoritmo "ManipulaVetor" var NUMERO: Vetor[1..6] de real i, conta_neg : inteiro inicio conta_neg <- 0 para i de 1 ate 6 faca escreva(Entre com um valor para NUMERO[, i, ]:) leia (NUMERO[i]) fimpara para i de 1 ate 6 faca se NUMERO[i] < 0 entao conta_neg <- conta_neg + 1 fimse fimpara para i de 1 ate 6 faca escreval (NUMERO[, i, ]:, NUMERO[i]) fimpara escreva ("Total de nmeros negativos: ", conta_neg) fimalgoritmo

Variveis Indexadas Bidimensionais (Matrizes)


Variveis indexadas com duas dimenses, tambm conhecida como matrizes, so referenciadas por dois ndices, cada qual comeando por 1. A sintaxe para declarao : <identificador> : Vetor [<dimenso1>,<dimenso2>] de < tipo > Onde: dimenso1 e dimenso2 = [Vi..Vf] e Vi= Valor inicial do ndice e Vf valor Final dos ndices. Exemplo: var PESSOA: Vetor[1..2,1..3] de Caracter

Prof. Mrcio A. S. Torrente

Implementao de Estruturas de Dados Parte 1

A declarao acima corresponde declarao de 6 variveis: PESSOA[1,1], PESSOA[1,2], PESSOA[1,3], PESSOA[2,1], PESSOA[2,2], e PESSOA [2,3]. Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padro: < identificador>[<posio1>,<posio2>] <- <valor> Exemplo: PESSOA[1,3]<- Antonio i <- 3 j <- 2 PESSOA[i,j] <- Mrcio Exemplo: Algoritmo que l uma matriz denomidada Valor(3,3) e calcula as somas: a) da linha 3; b) da coluna 2; c) da diagonal principal; d) da diagonal secundria; e e) de todos os elementos da matriz.
Algoritmo "ManipulaMatriz" var VALOR : VETOR [1..3,1..3] DE REAL somaLinha3, somaColuna2, somaDiagPrinc, somaDiagsecu, somaTudo: REAL i, j: INTEIRO //os ndice sempre inteiro inicio somaLinha3 <- 0 somaColuna2 <- 0 somaDiagPrinc <- 0 somaDiagsecu <- 0 somaTudo <- 0 Para i de 1 ate 3 faca Para j de 1 ate 3 faca Escreva("Digite um valor para a matriz: ") Leia (VALOR[i,j]) fimpara fimpara Para i de 1 ate 3 faca Para j de 1 ate 3 faca somaTudo <- somaTudo + VALOR[i,j] se i=3 entao somaLinha3 <- simaLinha3 + VALOR[i,j] fimse se j=2 entao somaColuna2 <- somaColuna2 + VALOR[i,j] fimse se i=j entao somaDiagPrinc <- somaDiagPrinc + VALOR[i,j] fimse se j=4-i entao somaDiagsecu <- somaDiagSecu + VALOR[i,j] fimse fimpara fimpara Para i de 1 ate 3 faca para j de 1 ate 3 faca escreval (VALOR[, i, ,, j, ]=, VALOR[I,J]) fimpara fimpara escreval ("Soma de todos os elementos ", somaTudo) escreval ("Soma dos elementos da linha 3 ", somaLinha3) escreval ("Soma dos elementos da coluna 2 ", somaColuna2) escreval ("Soma dos elementos da diagonal principal ",somaDiagPrinc) escreval ("Soma dos elementos da diagonal secundria ",somaDiagsecu) fimalgoritmo
Prof. Mrcio A. S. Torrente 4

Implementao de Estruturas de Dados Parte 1

Subalgoritmos ou Sub-rotinas
So trechos de algoritmos que efetuam um ou mais clculos determinados ou quaisquer outras instrues de programa. Ao invs de escrever-se um algoritmo grande, escrevem-se vrios algoritmos menores, os quais, no isoladamente, mas em conjunto, resolvem o problema proposto. conveniente utiliz-los quando uma determinada tarefa efetuada em diversos lugares no mesmo algoritmo. Ao invs de escrever-se um trecho diversas vezes, escreve-se um sub-algoritmo (ou sub-rotina) e chama-o diversas vezes. Eles reduzem o tamanho do algoritmo. Facilitam a compreenso e visualizao do algoritmo. So declarados no incio do algoritmo e podem ser chamados em qualquer ponto aps sua declarao. Eles podem ser Funes que retorna algum valor ou Procedimento (Subrotina) que no retorna nada.

Criando Funes
A criao de uma Funo deve ser declarada, com os demais objetos, no incio do programa. Este tipo de subalgoritmo sempre retornam um e apenas um valor ao algoritmo que lhe chamou. Cada funo tem associada ao seu valor de retorno um tipo explcito. Da mesma maneira com que os parmetros so fixos para todas as chamada o retorno tambm fixo. Algoritmo "<nome do algoritmo>" var <declarao de variveis globais> <definio da funo> inicio < lista de comandos> fimalgoritmo Sintaxe para definio da Funo: Funcao <identificador> ([var]<parmetros>) : <tipo de retorno> var <declarao de variveis locais> inicio <lista de comandos> retorne <valor de retorno> fimfuncao Onde: Identificador = Nome da funo. Passagem de parmetros por referncia = utiliza-se a construo VAR antes dos identificadores para indicar a passagem por referncia. Os identificadores so separados por vrgula. Parmetros = Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de dados a separao feita com ponto-e-vrgulas ';'. Tipo de retorno da funo = Real, Inteiro, Lgico ou Caracter. Declarao de variveis locais = idntica a declarao de variveis globais. As variveis declaradas localmente tem validade dentro do escopo da funo. Retorne = local onde colocado a varivel de retorno. Exemplo:

Algoritmo "Funo Personalizada"


Prof. Mrcio A. S. Torrente 5

Implementao de Estruturas de Dados Parte 1

var Valor_1,Valor_2, soma: real Funcao FSoma(parametro1, parametro2: Real):Real var total : real Inicio total <- parametro1 + parametro2 retorne total fimfuncao inicio Escreva("Valor 1: ") leia(Valor_1) Escreva("Valor 2: ") leia(Valor_2) soma <- FSoma(Valor_1,Valor_2) escreval("Soma das vaiveis ", soma) Fimalgoritmo

Criando Procedimentos (Sub-rotinas)


Sintaxe para definir um Procedimento: procedimento <identificador> ([var]<parmetros>) var <declarao de variveis locais> inicio <lista de comandos> fimprocedimento Onde: Identificador = Nome do procedimento. Passagem de parmetros por referncia = utiliza-se a construo VAR antes dos identificadores para indicar a passagem por referncia. Os identificadores so separados por vrgula. Parmetros = Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de dados a separao feita com ponto-e-vrgulas ';'. Exemplo: Para ler trs nmeros inteiros quaisquer e mostr-los em ordem crescente: Algoritmo "Procedimento Personalizado" var A,B,C : Inteiro Procedimento TROCA(var x, y : inteiro) var aux : inteiro inicio aux <- x x <- y y <- aux fimprocedimento inicio escreva(Digite 3 nmeros inteiros quaisquer: ) leia(A,B,C) se A > B entao TROCA(A,B) fimse se B > C entao TROCA(B,C) fimse
Prof. Mrcio A. S. Torrente 6

Implementao de Estruturas de Dados Parte 1

se B < A entao TROCA(A,B) fimse escreval(A," ",B," ",C," ",D) fimalgoritmo

Estruturas de Dados do Tipo Pilha


As pilhas so estruturas baseadas no princpio LIFO (last in, first out), na qual os dados que foram inseridos por ltimo na pilha sero os primeiros a serem removidos. Existem duas funes que se aplicam a todas as pilhas: PUSH, que insere um dado no topo da pilha, e POP, que remove o item no topo da pilha. Esquema de uma pilha de dados implementada num vetor: Pilha 5 4 3 2 1 <= max (nmero mximo de elementos da pilha) C B A <= topo (ndice do ultimo elemento inserido na pilha)

As variveis max e topo devem ser declaradas como globais e determinam as seguintes condies especiais:

Quando topo = 0, a pilha est vazia. Quando topo = max, a pilha est cheia.

Algoritmos para empilhar e desempilhar dados respectivamente: Procedimento PUSH(dado : caracter) inicio se topo = max entao escreval(Pilha cheia!) senao topo <- topo + 1 pilha[topo] <- dado fimse fimprocedimento Funcao POP : caracter inicio se topo = 0 entao escreval(Pilha vazia!) retorne senao retorne pilha[topo] topo <- topo - 1 fimse fimfuncao Para mostrar todos os elementos da pilha: Procedimento MOSTRA_PILHA var i : inteiro inicio para i de 1 ate topo faca escreval(pilha[i]) fimpara fimprocedimento

Estruturas de Dados do Tipo Fila


As filas so estruturas baseadas no princpio FIFO (first in, first out), em que os elementos que foram inseridos no incio so os primeiros a serem removidos. Uma fila possui duas funes bsicas: ENQUEUE,
Prof. Mrcio A. S. Torrente 7

Implementao de Estruturas de Dados Parte 1

que adiciona um elemento ao final da fila, e DEQUEUE, que remove o elemento no incio da fila. A operao DEQUEUE s pode ser aplicado se a fila no estiver vazia, causando um erro de underflow ou fila vazia se esta operao for realizada nesta situao. Esquema de uma fila de dados implementada num vetor: Fila = 1 A ^ primeiro 2 B 3 C ^ ultimo 4 5 ^ max tam = 3

As variveis max, primeiro, ultimo e tam devem ser declaradas como globais e determinam as seguintes condies especiais:

Quando tam = 0, a fila est vazia. Quando tam = max, a fila est cheia.

Algoritmos para inserir e retirar dados da fila respectivamente: Procedimento INQUEUE(dado : caracter) inicio se tam = max entao escreval(Fila cheia!) senao ultimo <- ultimo + 1 fila[ultimo] <- dado tam <- tam + 1 fimse fimprocedimento Funcao OUTQUEUE : caracter inicio se tam = 0 entao escreval(Fila vazia!) senao retorne fila[primeiro] primeiro <- primeiro + 1 tam <- tam - 1 fimse fimfuncao Para mostrar todos os elementos da fila: Procedimento MOSTRA_FILA var i : inteiro inicio para i de primeiro ate ultimo faca escreval(fila[i]) fimpara fimprocedimento

A Fila Circular
O conceito de fila circular usado quando usamos estas estruturas estticas, como um vetor, para representarmos a fila de dados, ou seja, definimos um vetor de 100 posies, logo poderemos ter no mximo cem elementos na fila, definimos duas variveis que tero a posio do incio e do final da fila, conforme
Prof. Mrcio A. S. Torrente 8

Implementao de Estruturas de Dados Parte 1

inserimos um elemento na fila, incrementamos a varivel final, e ao excluirmos incrementamos a varivel incio, assim quando a varivel final obter o valor cem o processo terminaria, porm o conceito de fila circular nos apresentado para suprir isto, e neste momento a varivel final recebe o valor do incio novamente da fila. Dessa forma, qualquer nmero de itens poderia ser colocado na fila, contanto que itens tambm estivessem sendo retirados. Essa implementao chamada de fila circular, porque usa seu vetor de armazenamento como se fosse um crculo em vez de uma lista linear. Em essncia, a fila s est cheia quando os ndices de armazenamento e recuperao, variveis de incio e final da fila, so iguais; caso contrrio, h espao na fila para outro elemento. Talvez o uso mais comum de fila circular seja em sistemas operacionais, onde a fila circular contm as informaes lidas dos arquivos em disco ou do console. Filas circulares tambm so usadas em programas aplicativos de tempo real, que devem continuar a processar informaes enquanto pem as requisies de E/S em um buffer. Muitos editores de texto fazem isso enquanto re-formatam um pargrafo ou justificam uma linha. O que est sendo digitado no mostrado at que o outro processo termine. Para conseguir isso, o programa aplicativo deve verificar a entrada do teclado durante a execuo do outro processo. Se uma tecla foi pressionada, ela rapidamente colocada em uma fila e o processo continua. Uma vez que o processo tenha terminado, os Caracteres so recuperados da fila. Esquema de uma fila circular de dados implementada num vetor: 1 F 2 G ^ ultimo 3 C 4 D ^ primeiro 5 E max = 5 tam = 4

Fila =

Neste caso, os valores contidos na fila do primeiro ao ultimo so: D, E, F e G. Considere ento o valor C, na posio 3 como lixo da fila, pois j foi logicamente retirado da fila mas permanece fisicamente ocupando sua posio no vetor. Agora surgem outras condies especiais:

Ao incluir um dado, quando ultimo = max e tam < max, circular a fila tornando ultimo = 1. Ao retirar um dado, quando primeiro = Max e tam > 0, circular a fila tornando primeiro = 1.

Algoritmos para inserir e retirar dados da fila circular respectivamente: Procedimento INQUEUE(dado : Caracter) inicio se tam = max entao escreval(Fila cheia!) senao Se ultimo = Max entao ultimo <- 1 seno ultimo <- ultimo + 1 fimse fila[ultimo] <- dado tam <- tam + 1 fimse fimprocedimento

Funcao OUTQUEUE : Caracter inicio se tam = 0 entao escreval(Fila vazia!) senao retorne fila[primeiro]
Prof. Mrcio A. S. Torrente 9

Implementao de Estruturas de Dados Parte 1

se primeiro = Max ento primeiro <- 1 senao primeiro <- primeiro + 1 fimse tam <- tam - 1 fimse fimfuncao

Prof. Mrcio A. S. Torrente

10

Vous aimerez peut-être aussi