Professional Documents
Culture Documents
Educao a Distncia
Caderno de Estudos
Linguagens de Programao
e estrutura de dados
UNIASSELVI
2014
NEAD
EDITORA
GRUPO
CENTRO UNIVERSITRIO
LEONARDO DA VINCI
Rodovia BR 470, Km 71, n 1.040, Bairro Benedito
89130-000
Cx. P. 191 - INDAIAL/SC
- 89130-000 - INDAIAL/SC
www.grupouniasselvi.com.br
Fone Fax: (047) 3281-9000/3281-9090
Elaborao:
Prof. Edna da Luz Lampert
Prof. Elton Giovani Gretter
005.133
L237l Lampert, Edna da Luz
Linguagens de programao e estrutura de dados / Edna da Luz
Lampert, Elton Giovani Gretter. Indaial : Uniasselvi, 2014.
237 p. : il
ISBN 978-85-7830-857-5
1. Linguagens de programao
I. Centro Universitrio Leonardo da Vinci.
APRESENTAO
Caro(a) acadmico(a)!
O estudo desta disciplina muito importante para ampliar seus conhecimentos acerca
da estrutura de dados e sua relevncia para a linguagem de programao e como esses dois
conceitos esto muito atrelados, para o desenvolvimento de programas de tecnologia da
informao.
Desejo sucesso nessa nova busca de informaes, principalmente no que tange ampliar
seus conhecimentos!
UNI
1 INTRODUO .............................................................................................................. 97
2 TIPOS ESTRUTURADOS ............................................................................................. 98
2.1 TIPO ESTRUTURA .................................................................................................... 98
2.1.1 Variveis do tipo heterognea ............................................................................... 100
2.1.2 Variveis do tipo homognea ................................................................................ 101
2.1.3 Arranjos unidimensionais ...................................................................................... 101
2.1.4 Arranjos multidimensionais .................................................................................... 104
2. 2 PONTEIRO PARA ESTRUTURAS .......................................................................... 105
2.2.1 Operadores ........................................................................................................... 108
2.3 DEFINIO DE NOVOS TIPOS ............................................................................. 110
2.3.1 Comando typedef ................................................................................................... 112
2.4 VETORES DE ESTRUTURAS .................................................................................. 113
2.5 VETORES DE PONTEIROS PARA ESTRUTURAS ................................................. 114
2.5.1 Funes de vetores de ponteiros para estruturas .................................................. 116
2.6 TIPO UNIO .............................................................................................................. 119
2.7 TIPO ENUMERAO .............................................................................................. 120
LEITURA COMPLEMENTAR ......................................................................................... 121
RESUMO DO TPICO 2 ................................................................................................ 122
AUTOATIVIDADE .......................................................................................................... 124
INTRODUO AO ESTUDO DE
LINGUAGEM DE PROGRAMAO E
ESTRUTURAS DE DADOS
Objetivos de aprendizagem
L
I
N
PLANO DE ESTUDOS G
U
A
Esta unidade do caderno de estudos est dividida em trs G
E
tpicos. No final de cada um deles voc encontrar atividades visando N
S
compreenso dos contedos apresentados.
D
E
P
R
O
G
R
TPICO 1 - CONCEITOS FUNDAMENTAIS A
- INTERPRETAO VERSUS M
A
COMPILAO
TPICO 2 - FUNES O
E
TPICO 3 - VETORES E ALOCAO DINMICA
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1
TPICO 1
CONCEITOS FUNDAMENTAIS -
INTERPRETAO VERSUS COMPILAO
1 INTRODUO
E
S
A Estrutura de dados um processo muito importante, segundo Edelweiss e Galante T
R
(2009, p. 36), um fator que determina o papel dessas estruturas no processo de programao U
T
de aplicaes a identificao de quo bem as estruturas de dados coincidem com o domnio U
R
do problema a ser tratado. Por isso essencial linguagem de programao o suporte no A
desenvolvimento do programa e auxlio absoluto das estruturas de dados, esta lgica permite D
E
que sejam agregados valor na especificao dos dados, relacionando de forma estruturada os
D
dados, as variveis e seus elementos. Guimares e Lages, (2013, p. 52), afirmam: A
D
O
S
4 TPICO 1 UNIDADE 1
(...) decises sobre estruturas dos dados no podem ser feitas sem conhecimento dos
algoritmos aplicados a eles, e vice-versa: a estrutura e a escolha dos algoritmos dependem
muitas vezes fortemente da estrutura dos dados, e, a arte de programar consiste na arte de
organizar e dominar a complexidade.
O
A programao Java, por sua vez, uma linguagem que atualmente est em ascenso,
E
muito utilizada para vrios tipos de aplicaes, principalmente para aplicaes web. Sua
principal caracterstica est na segurana que sua aplicao disponibiliza, sua agilidade para
E
S ser executado e confiabilidade em ser utilizado para vrios tipos de aplicaes. Como suas
T
R aplicaes esto voltadas principalmente para produtos que imitam o mundo real podemos
U
T citar os aplicativos e programas para jogos de computadores.
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 1 5
D
E
P
R
O
2.1 INTERPRETAO G
R
A
M
O interpretador possui como funo executar o cdigo-fonte, traduzindo o programa A
a cada linha de cdigo que vai sendo escrito (digitado), assim que o computador consegue
O
interpretar os cdigos, o programa vai sendo executado, a cada execuo do cdigo o programa
E
precisa ser novamente interpretado pelo computador. Conforme Costa (2010, p. 26), na
E
tcnica de interpretao, um programa convertido em outro, dinamicamente. Toda vez que S
T
uma execuo for necessria, o cdigo-fonte ser traduzido para uma linguagem que possa R
U
ser executada, direta ou indiretamente, pelo sistema operacional. T
U
R
A
D
E
D
A
D
O
S
6 TPICO 1 UNIDADE 1
UNI
Conforme Costa (2010, p. 26), quando escrevemos programas
de um computador em uma linguagem de programao, o
conjunto de instrues que formam o programa chamado de
cdigo-fonte. O cdigo-fonte define as instrues do programa
de computador, que, para estarem corretas, devem atender
estrutura lxica, sinttica e semntica da linguagem de
programao utilizada.
L
I
N
Os programas interpretados tornam o processo de traduo para o sistema mquina
G
U
mais rpido para sua execuo, possuem maior dinamicidade e podem ser utilizados em vrios
A sistemas operacionais, possuem maior portabilidade. No entanto, seu desempenho na execuo
G
E dos cdigos para a linguagem da mquina inferior aos programas compilados.
N
S
D
E FIGURA 1- EXECUO DO PROGRAMA INTERPRETAO
P
R
O
G
R
A Instruo
M Cdigo Fonte
A
O
Interpretador Sada
E Cdigo Executvel
E
S
T
Entrada
R
U
T
U
R FONTE: A autora
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 1 7
2.2 COMPILAO
UNI
Conforme Lorenzi e Lopes (2000) o Fortran e Cobol foram
as primeiras linguagens de programao de alto nvel, cujas L
I
construes no mostram qualquer semelhana com a linguagem N
de mquina. G
U
A
G
E
N
S
Conforme Lopes (1997, p. 52), um compilador tem a funo de transformar um algoritmo
D
codificado em uma linguagem X para a linguagem da mquina equivalente. Conforme Sebesta E
(2010), os programas podem ser traduzidos para linguagem da mquina, a qual pode ser P
executada diretamente no computador. Esse mtodo chamado de implementao baseada R
O
em compilao, com a vantagem de ter uma execuo de programas muito mais rpidos, uma G
R
vez que o processo de traduo estiver completo. Uma funo muito especfica do compilador, A
M
para que o mesmo seja executado, todo o programa fonte precisa estar codificado e digitado, A
aps este processo ocorre a execuo do programa, resumidamente, para que o programa
O
seja executado, todo o cdigo precisa ser compilado, para ser executado pelo computador.
E
E
Costa (2010) afirma, quando compilamos programas de computador utilizamos resultado S
T
desse processo de compilao para executar os programas. Depois de compilado, o programa R
U
pode ser executado indefinidamente, sem a necessidade de repetio do processo de traduo. T
U
Uma compilao s ser necessria quando uma mudana no cdigo-fonte do programa for R
A
refletida no programa compilado.
D
E
D
A
D
O
S
8 TPICO 1 UNIDADE 1
Programa Fonte
Linguajem Automtica
Anlise
Lxica
Anlise
Sinttica
COMPILAO
Gerao de
Objeto
Programa Objeto
Linguajem Mquina
FONTE: A autora
L
I
N
G
U
A
G 3 LINGUAGEM DE PROGRAMAO C
E
N
S
D
Caro acadmico(a), recorda-se que anteriormente estvamos falando sobre linguagens
E de programao que so consideradas de alto nvel, a linguagem de programao C possui
P
R
essa caracterstica. Outra caracterstica da linguagem C pode ser observada a partir do seu
O prprio compilador, este por sua vez executa os cdigos, gerando programas executveis muito
G
R menores e muito mais rpidos do que outras linguagens de programao.
A
M Como uma das funcionalidades da linguagem C, precisa executar de forma repetida
A
suas funes, realiza um processo de separar as atividades definidas e codificadas, com isso
D
A Cocian (2004, p. 32) destaca as vantagens da linguagem de programao C tornar-se
D
O cada vez mais conhecida e utilizada, como:
S
UNIDADE 1 TPICO 1 9
1. A portabilidade do compilador.
2. O conceito de bibliotecas padronizadas.
3. A quantidade e variedade de operadores poderosos.
4. A sintaxe elegante.
5. O fcil acesso ao hardware quando necessrio.
6. A facilidade com que as aplicaes podem ser otimizadas, tanto na codi-
ficao, quanto na depurao, pelo uso de rotinas isoladas e encapsuladas.
L
A definio de dados pode ser compreendida, estruturada e formada por inmeros dados I
N
que so estipulados para cada objetivo em que o computador tenha que entender e executar G
U
alguma tarefa. Conforme Sebesta (2010, p. 268): A
G
E
Um tipo de dado define uma coleo de valores de dados e um conjunto de N
S
operaes pr-definidas sobre eles. Programas de Computador realizam tare-
fas quo bem os tipos de dados disponveis na linguagem usada casam com os D
objetivos no espao do problema do mundo real. Logo crucial uma linguagem E
oferecer suporte para uma coleo apropriada de tipos e estruturas de dados. P
R
O
G
Com essa afirmao pode-se perceber que as estruturas de dados permitem que R
A
a linguagem de computador possa interpretar e compilar os dados e cdigos para uma M
A
determinada linguagem de programao. Edelweiss e Galante (2009), descrevem os tipos de
dados primitivos, em que no possuem uma estrutura sobre seus valores, ou seja, no possvel O
decompor o tipo primitivo em partes menores. Os tipos bsicos so, portanto, indivisveis. E
Consideravelmente este tipo de dado no pode sofrer alteraes, pois definido por E
ter campos de dados infinitos, podemos citar como exemplo desse dado o CPF de um usurio. S
T
R
U
Os tipos de dados primitivos so formados por nmeros inteiros, nmeros, ponto T
U
flutuantes, caracteres e tipos nulos, conforme pode ser observado na tabela a seguir, onde R
A
possui o cdigo e a funo de cada um deles em uma estrutura de dados primitivos.
D
E
D
A
D
O
S
10 TPICO 1 UNIDADE 1
L 3.2.1 Constantes
I
N
G
U
A
Segundo Almeida (2008, p. 27), constantes so dados cujos valores so fixos e que
G
E
no se alteram ao longo da execuo de um programa. Exemplos: nmeros, letras, palavras,
N
S
entre outros. Geralmente, a constante definida no incio do programa e sua utilizao acontece
no decorrer dele.
D
E
P FIGURA 3 - CONSTANTES
R
O
G
R
A
M
A
E
S
T
R FONTE: A autora
U
T
U
R Os dados CONSTANTES so definidos por um nico valor, desde o incio do programa,
A
at o final de sua execuo, isto resultando em um processo, em que no possvel os dados
D
E j definidos serem alterados, sejam alteraes por comandos ou funes.
D
A
D
O
S
UNIDADE 1 TPICO 1 11
3.2.2 Variveis
Variveis por sua vez, conforme define Cocian (2004, p. 99), devem ser declaradas
antes de serem utilizadas. Existem dois tipos de variveis: Globais e Locais. Variveis globais
devem ser declaradas no incio do programa e fora de qualquer funo. As variveis locais
devem ser declaradas no incio da funo, onde elas sero vlidas. Os dados variveis seguem
uma lgica muito parecida com as constantes, no entanto elas so declaradas no incio do
programa e no incio das funes.
Almeida (2008, p. 27), por sua vez destaca que as variveis usadas em algoritmos
devem ser declaradas antes de serem utilizadas, visto que os compilados precisam reservar um
espao na memria para cada um deles. Resumindo, uma varivel so as formas de como o
computador disponibiliza um espao para armazenar os dados, estas variveis ficam abertas,
disponveis para receber qualquer dado, podem ser alteradas quando existir a necessidade de
mudana. Por isso esses dados, so denominados de variveis, pois podem sofrer alteraes
e serem mudadas quando for necessrio.
L
I
Cocian (2004, p. 100), afirma que as variveis podem ser de vrios tipos, como: int N
G
(interias), float (real). Os nomes das variveis indicam o endereo de memria onde est U
A
um determinado dado. Conforme Almeida (2008), varivel a representao simblica dos G
E
elementos de certo conjunto. Cada varivel ocupa uma posio de memria, cujo contedo N
S
pode ser modificado durante a execuo de um programa. Mesmo que uma varivel assuma
D
diferentes valores, ela s poder armazenar um valor por vez. E
P
FIGURA 4 - VARIVEL R
O
G
R
A
M
A
O
E
S
T
FONTE: A autora R
U
T
Especificamente um dado varivel pode obter um nico valor, isso desde o incio at U
R
o final das execues do programa, esse procedimento ocorre devido a um processo em que A
caracterstica dos dados variveis est relacionada com a declarao da varivel, pois ao
realizar este procedimento de declarar a varivel existe a necessidade de informar o nome e
qual o tipo de dado que esta receber.
3.3 ATRIBUIO
Exemplo:
O
E
TABELA 2: ATRIBUIO
E
S x = 4; Significa que a varivel x recebe o valor de 4
T
R val = 2.5; Varivel val recebe valor de 2,5
U
T y = x + 2; A varivel y recebe valor de x mais valor de 2
U
R Varivel y recebe valor que estava armazenado
A y = y + 4;
nela mesma, mais valor de 4
D
E FONTE: A autora.
D
A
D Pode-se perceber que os valores atribudos, sempre ocorrem da direita para a
O
S
UNIDADE 1 TPICO 1 13
esquerda, sucintamente, o valor das expresses podem ser tanto constantes, quanto variveis,
outro fator muito importante para a atribuio sua disponibilidade de realizar a atribuio de
um valor, para vrias outras variveis, isso ocorre atravs de um encadeamento de atribuies.
Conforme Exemplo:
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
14 TPICO 1 UNIDADE 1
UNI
Dados Escalar so valores individuais sem componentes interno,
assim como os exemplos de NUMBER, DATE ou BOOLEAN.
L
I
N
G
U TABELA 3: OPERADORES ARITMTICOS
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
D
A
D
O
S
UNIDADE 1 TPICO 1 15
Declarao de variveis.
Dim x, y, z As Integer
x = 10
y = 25
z = x*y
Nesse exemplo a varivel z conter o valor 250
3.5 FUNES
Analisando que a linguagem C constituda por vrios blocos de construo, logo, esses
blocos so considerados como funcionais, isso permite que um programa seja desenvolvido
atravs desses blocos funcionais, formando assim as estruturas das funes.
Como na utilizao da matemtica, as funes em C recebem vrios parmetros e esses
geram um valor como resultado de uma funo, lgico esse processo ocorre com auxlio dos
programadores que executam as funes, esse processo ocorre de forma ordenada, resultando
em vrias funes executadas pelo prprio programa.
L
I
Segundo Aguilar (2011, p. 197), as funes formam um miniprograma dentro de um N
G
programa. As funes economizam espao, reduzindo repeties e tornando mais fcil a U
A
programao, proporcionando um meio de dividir um projeto grande em pequenos mdulos G
E
mais manejveis. Seguindo essa linha, Mokarzel e Soma (2008, p. 44), salientam que: N
S
D
E
D
A
D
O
S
16 TPICO 1 UNIDADE 1
Para que se possa utilizar uma funo, existe a necessidade de realizar a declarao
desta funo, devem ser definidos os parmetros que a funo ir receber e tambm quais
so os parmetros que esta funo deve retornar como resposta para o programa, essas
informaes ficam armazenadas no manual do usurio do compilador do sistema.
Segue exemplo, conforme Dornelles (1997), de uma sintaxe declarando uma funo:
E
S
T
R
U
T
U FONTE: Pereira (1996)
R
A
D A seguir vamos analisar um exemplo, tambm do autor Dornelles (1997), com relao
E
a funo da biblioteca, demonstrando como a mesma pode ser declarada.
D
A
D
O A funo cos () da biblioteca math.h declarada como:
S
UNIDADE 1 TPICO 1 17
Isto significa que a funo no tem parmetros de entrada e tem um parmetro int de
sada. Para podermos usar uma funo de biblioteca devemos incluir a biblioteca na compilao
do programa. Esta incluso feita com o uso da diretiva #include colocada antes do programa
principal.
L
I
N
G
U
A
G
E
FONTE: Dornelles (1997) N
S
D
FIGURA 8 - PRINCIPAIS FUNCIONALIDADES DE BIBLIOTECA E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
FONTE: Pereira (1996) T
U
R
A
Seguem alguns exemplos das funes disponveis nas Bibliotecas C, isso segundo a
D
ideia de Dornelles (1997): Biblioteca math.h e Biblioteca stdlib.h. E
D
A
D
O
S
18 TPICO 1 UNIDADE 1
Biblioteca math.h:
int abs (int i);
double fabs (double d);
D
A
D
Gera um nmero inteiro aleatrio entre 0 e num - 1.
O
S
UNIDADE 1 TPICO 1 19
4 EXEMPLO DE CDIGO EM C
D
A
D
O
S
20 TPICO 1 UNIDADE 1
L
reservadas, no entanto isso est definido pelos padres da American National Standards Institute
I
N
(ANSI). Na tabela a seguir vamos conhecer estas palavras reservadas:
G
U
A
G FIGURA 9 - PALAVRAS RESERVADAS
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
4.2 COMENTRIOS
T
U
R
A Os comentrios permitem que o computador compreenda de forma mais rpida as tarefas
D executadas e solicitadas pelo programa. Segundo Rebollo (2013), os comentrios podem ser
E
de uma linha ou comentrios de mltiplas linhas. Comentrios de mltiplas linhas comeam
D
A com /* e terminam com */ tudo que estiver entre esses smbolos considerado comentrio.
D
O Comentrio de uma linha inicia com // e termina no final da linha. Esse processo necessrio
S
UNIDADE 1 TPICO 1 21
para agilizar o tempo de respostas, fazendo com que os comentrios sejam compilados para
que seja compreensvel pelo computador e que auxilie o programador a entender a solicitao.
Os comentrios servem para auxiliar no processo de documentar o cdigo fonte, esse processo
facilita a compreenso, principalmente se este programa possui centenas de linhas de cdigos.
L
I
N
G
U
A
G
E
N
S
P
Exemplo de um comentrio com barra dupla contendo uma linha no final do cdigo: R
O
G
R
FIGURA 11 - BARRA DUPLA LINHA NO FINAL A
M
A
O
E
S
T
R
U
T
U
R
A
FONTE: Rebollo (2013)
D
E
D
A
D
O
S
22 TPICO 1 UNIDADE 1
Neste exemplo de insero de comentrio que podem ser inseridas vrias linhas,
geralmente utilizadas no cabealho do programa, dentro do cdigo.
L
I
N
G
U
A
G
E FONTE: Rebollo (2013)
N
S
D
E
P
R
O 4.3 IDENTAO
G
R
A
M
A Identao nada mais do que a organizao da escrita de cdigos-fonte, essa
organizao ocorre de forma horizontal, definindo a ordem das linhas de cdigos em forma
O
hierarquizada. A seguir vamos analisar um exemplo da linha de cdigo, conforme organizao
E
da identao:
E
S
T Variavel A = 0
R
U
SE (Variavel A < 1) ENTO
T
U
ESCREVA "Varivel A menor que 1."
R
A
FIM SE
D
E
Os comandos que fazem parte do escopo so SE ENTO FIM SE, analisando o
D
A comando acima pode-se perceber que ESCREVA est alinhado mais direita, indicando que
D
O no pertence ao escopo principal deste programa. A identao no possui especificaes para
S
UNIDADE 1 TPICO 1 23
uma nica linguagem de programao, no entanto ela pode ser utilizada em qualquer linguagem,
porm ela pode sofrer comportamentos diferentes, dependendo do uso das linguagens de
programao.
5 COMPILAO DE PROGRAMAS EM C
L
I
N
Como j visto no incio deste tpico de estudos, os compiladores so identificados como G
U
programas que realizam a traduo do cdigo-fonte para uma linguagem compilada e entendvel A
G
para o computador. O processo de traduo (compilao) implica na converso de programa, E
N
expresso em cdigo-fonte, em um programa equivalente, expresso em cdigo-executvel. A S
seguir vamos conhecer esses trs componentes da compilao de programas. D
E
Cdigo-fonte: um cdigo escrito em uma linguagem de programao. Os P
programas-fontes so normalmente compostos de diversos cdigos-fontes, R
armazenados em vrios arquivos. O
G
Cdigo-objeto: o cdigo gerado na linguagem de mquina da arquitetura- R
-alvo. Esse cdigo, entretanto, no pode ser diretamente executado pelo A
processador, j que nem todas as referncias necessrias execuo esto M
A
resolvidas. Pode faltar, por exemplo, referncias a endereos de funes que
esto em outros cdigos-objetos.
O
Cdigo executvel: o cdigo gerado na linguagem de mquina da arqui-
tetura-alvo, com todas as referncias resolvidas, que pode ser diretamente E
executado pelo processador. O arquivo contendo esse cdigo chamado de
E
programa executvel. (PINHEIRO, 2012, p. 6) S
T
R
Segundo Aguilar (2011, p. 33), o processamento de execuo de um programa escrito U
T
em uma linguagem de programao e por meio de um compilador costuma obedecer os 7 U
R
(sete) seguintes passos: A
1. Escrever o programa-fonte com um editor e guard-lo em um dispositivo de D
armazenamento, como, por exemplo, um disco. E
2. Introduzir o programa-fonte em memria.
D
3. Compilar o programa com o compilador C. A
4. Verificar e corrigir erros de compilao. D
5. Obteno do programa-objeto. O
S
24 TPICO 1 UNIDADE 1
O
Se no houver erro de compilao no nosso cdigo, este comando gera o executvel com o
E
nome prog (prog.exe, no Windows). Podemos ento executar o programa:
E
S > prog
T
R Digite a temperatura em Celsius: 10
U
T A temperatura em Fahrenheit vale: 50.000000
U
R >
A
D
E Obs.: Em itlico est representado as mensagens do programa e, em negrito, exemplificamos
D um dado fornecido pelo usurio via teclado.
A
D FONTE: Celes e Rangel. 2002. Disponvel em: <http://www.ic.unicamp.br/~ra069320/PED/
O
S MC102/1s2008/Apostilas/Cap01.pdf>. Acesso em: 08 Set. 2014
UNIDADE 1 TPICO 1 25
UNI
Conhea o compilador GCC GNU Compiler Colletion em:
<http://www.debian.org/releases/stable/ia64/ch01s02.html.pt>
Passo a passo para compilar usando sistema operacional Linux
ou Windows, segue informaes: <https://linux.ime.usp.
br/~lucasmmg/livecd/documentacao/documentos/terminal/
Compilando_um_arquivo_em_C.html> L
I
<http://fig.if.usp.br/~esdobay/c/gcc.html> N
G
U
A
G
Vamos exemplificar de forma bem simples como executar uma compilao utilizando o E
N
sistema operacional Linux. Abra uma arquivo kwrite e insira o seguinte comando: S
D
1. Criar o cdigo-fonte abaixo e salv-lo com o nome de ola.c), se no colocar o 'c no ir E
funcionar: P
R
O
G
R
FIGURA 14 - COMPILANDO A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
FONTE: A autora
26 TPICO 1 UNIDADE 1
FIGURA 15 - COMPILANDO
3. Para confirmar se realmente o comando do programa foi compilado, navegue pelo diretrio-
L
I raiz do arquivo-fonte, verificando que foi criado o arquivo ola, com permisses diferentes das
N
G do ola.c:
U
A
G
E
FIGURA 16 - COMPILANDO
N
S
D
E
P
R
O
G
R
A
M
A
E
S
4. Para executar o comando do programa, digite ./ola [ENTER]. Como resposta de sada do
T
R
programa a seguinte mensagem ir aparecer na tela: ola, nola, mundo!
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 1 27
FIGURA 17 - COMPILANDO
FIGURA 18 - COMPILANDO
L
I
N
G
U
A
G
E
N
S
D
E
P
FONTE: A autora R
O
G
R
A
M
A
6 LINGUAGEM DE PROGRAMAO JAVA O
E
Conforme site JAVABR, o Java uma linguagem de programao e plataforma S
T
computacional lanada pela primeira vez pela Sun Microsystems em 1995. O Java rpido, R
U
seguro e confivel. De laptops a datacenters, consoles de games a supercomputadores T
cientficos, telefones celulares Internet, o Java est em todos os lugares! A programao Java U
R
possui como objetivo programar em alto nvel, onde seus comandos e cdigos de programas so A
compilados diretamente em uma mquina virtual, tornando o processo muito mais rpido e no D
E
consumindo, assim, memria e processamento de um computador. O grande diferencial desta
D
linguagem, alm de ser popularmente muito utilizada, sua aplicao web, pois possui como A
D
objetivo disponibilizar ambientes muito parecidos com o mundo real, por ser uma linguagem O
S
rpida e inteligente.
28 TPICO 1 UNIDADE 1
A base da programao Java so as classe e seus objetos, que 'imita', o mundo real,
o que facilita bastante a programao. Por exemplo, os carros so uma classe, j um gol
um objeto da classe carro. As classes possuem mtodos e caractersticas que so comuns a
todos os objetos. Essa associao com o mundo real ajuda bastante na hora abstrao, de
criar aplicaes complexas.
O Java bastante flexvel, por conta da possibilidade de expanso atravs das bibliotecas,
ou APIs, alm das extenses do Java, voltada especificamente para desenvolvimento de
aplicaes para desktop, para celulares, para empresas, para udio, para grficos 3D, banco de
dados, para aplicaes de Internet, criptografia, computao/sistemas distribudos, linguagem
de marcao e vrias outras.
FONTE: Disponvel em: <http://www.java.com/pt_BR/download/faq/whatis_java.xml>. Acesso em: 08
Set. 2014
L
Segundo Horstmann (2008, p. 38), a linguagem possui vrios recursos de segurana que
I
N
garantem que nenhum applet nocivo possa ser executado no seu computador. Com este
G benefcio extra, esses recursos tambm ajudam a aprender a linguagem mais rapidamente.
U
A
G
E Outro fator muito interessante e importante da linguagem Java foi sua grande
N
S contribuio para impulsionar a forma como eram desenvolvidos os programas, possui uma
D especificidade de desenvolver seus cdigos orientados a objetos. Boraks (2013, p. 11) afirma
E
que o Java simplificou a programao geral na web, ela inovou com um tipo de programa de
P
R rede chamado applet que, na poca, mudou a maneira do mundo on-line pensar em contedo.
O
G
R
A
M
A 6.1 EXEMPLOS DE CDIGOS
(...) applets so pequenos programas Java que podem ser inseridos dentro de
uma pgina HTML. Com este recurso, uma pgina torna-se dinmica, podendo
interagir com o usurio que a consulte. Um applet pode ainda executar tarefas
complexas, como realizar clculos e apresentar grficos, sons e imagens em
movimento.
Schutzer e Massago (2010), apresentam uma insero de applet em uma pgina HTML,
como exemplo, usando a diretiva <applet>, a qual deve apresentar pelo menos trs parmetros:
code, width e height, veja a seguir o exemplo: L
I
N
G
U
A
<applet G
E
code = [java applet] N
S
width = [largura]
D
height = [altura]> E
P
R
O
G
R
A
M
6.3 SEGURANA A
O
D
E
Outro fator observado por Horstmann (2008), com relao segurana na utilizao da
D
linguagem Java, onde a mquina virtual pode capturar muitos erros de iniciantes e inform-los A
D
de uma maneira precisa. O
S
30 TPICO 1 UNIDADE 1
6.4 PORTABILIDADE
Boraks (2013, p. 12) afirma que, algum meio de gerar cdigo executvel e portvel era
necessrio. Felizmente, o mesmo mecanismo que ajuda a manter a segurana dos sistemas
e computadores, permite tambm auxiliar a gerar portabilidade, neste caso estamos falando
do applet. Segundo Horstmann (2008, p. 38),
O
Pode-se afirmar que a plataforma Java 2 Micro Edition J2ME revolucionou a
E
comunicao entre os equipamentos mveis, tornando o processo de comunicao muito mais
E
S eficaz, como tambm permite, tanto equipamentos, quanto sistemas e aplicativos de empresas
T
R diferentes consigam realizar a comunicao entre si. Segundo Mattos (2005), a plataforma Java
U
T 2 Micro Edition J2ME destinada a dispositivos com recursos limitados de memria, vdeos
U
R e processamento, possui como objetivo fazer com que qualquer produto possa interagir com
A
recursos de maneira nica e simplificada.
D
E
afirma ainda que cada dispositivo executa internamente uma mquina virtual Java desenvolvida
por seu fabricante, e os aplicativos em Java de terceiros interagem apenas com a mquina
virtual e no com o dispositivo real. Fiorese (2005), classifica a plataforma J2ME, onde sua
implementao linguagem de programao Java, como qualquer outra linguagem, composta
por um grupo de comandos predefinidos que, aps escritos e compilados podem ser executados
resultando em aes especficas.
A linguagem de programao Java possui vrios fatores que a classificam como positivo,
como, por exemplo, a sua portabilidade que significa a facilidade de realizar a comunicao
entre equipamentos, sistemas e aplicativos de empresas diferentes. Outro fator positivo sua L
segurana que garante que a comunicao seja eficiente entre esses vrios equipamentos I
N
e sistemas, conseguindo proteger os equipamentos de invases que possam prejudicar e G
U
danificar os sistemas e mquinas. Sua estrutura de cdigo pode ser considerada como uma A
G
grande vantagem para o desenvolvimento e programao, pois sua estrutura e linguagem E
N
bsica facilitam, assim, a escrita dos cdigos de forma mais simplificada. S
D
E
A seguir vamos conhecer a estrutura de cdigo em Java, alguns exemplos de comandos
P
que so utilizados na programao Java, conforme diretrizes do autor Gacho (2014): R
O
G
R
A
1. // Duas barras significam comentrio M
2. /* comentrios tambm podem seguir o formato de C++ */ A
3.
O
4. public class NomeDoPrograma
5. { E
6. // O mtodo main sempre deve estar presente para que um cdigo E
7. // Java possa ser executado: S
T
8. static public void main(String[] args) R
U
9. { T
10. // aqui viro os comandos, que so parecidos com C++ U
R
11. } A
12. }
D
E
D
A
D
O
S
32 TPICO 1 UNIDADE 1
L
I
N Vamos analisar os comandos bsicos de Java para a aplicao a seguir, relacionando
G
U novamente o exemplo do comando ola mundo e vamos compilar este exemplo:
A
G
E FIGURA 20 - COMPILAO JAVA
N
S
D
E
P
R
O
G
R
A
M
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 1 33
A linha seguinte (public class AloMundo) declara uma classe chamada AloMundo.
Aps compilado, esse cdigo gerar um arquivo AloMundo.class no mesmo diretrio em
que se encontra o cdigo-fonte.
L
I
N
G
Algumas dicas em relao linguagem, os cdigos e seus comandos Java: U
A
G
Lembrando que um cdigo-fonte em Java pode descrever mais de uma classe. E
N
Aps a compilao do comando, cada descrio de classe gerar um arquivo .class de S
forma separada. D
E
Lembre-se, pode haver no mximo uma classe public dentro de cada cdigo-fonte Java.
P
Caso voc, inadvertidamente, declare mais de uma classe como public dentro de um R
O
cdigo-fonte Java, ocorrer um erro de compilao e este erro ser apresentado na tela. G
R
Todo o corpo da classe (o cdigo que define a classe) deve ser delimitado por chaves, A
M
assim como toda a estrutura de dados. A
FONTE: Adaptado de: <http://www.milfont.org/blog/wp-content/upload/Manual.pdf> Acesso em: 10
set. 2014 O
E
S
T
R
U
9 CICLO DE DESENVOLVIMENTO T
U
R
A
O ciclo de desenvolvimento de um sistema em Java segue basicamente uma metodologia
D
imposta para o desenvolvimento de softwares em outras linguagens, onde todas elas precisam E
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 1 35
RESUMO DO TPICO 1
D
E
A compilao tanto na linguagem C, quanto na linguagem Java, possui o mesmo objetivo,
P
que executar os cdigos em uma linguagem de fcil entendimento para o computador. R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
36 TPICO 1 UNIDADE 1
IDADE
ATIV
AUTO
D
b) ( ) Cdigo de mquina.
E c) ( ) Servidor de dados.
P d)
( ) Atribuio de cdigo.
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1
TPICO 2
FUNES
1 INTRODUO
D
A pilha de execuo est classificada como estrutura de dados, esta possui como objetivo E
cumprem um papel muito importante dentro dessa estrutura, pois os ponteiros possuem como E
2 FUNES
Esse processo de ser atribudo funo um subprograma se deve diviso que ocorre
de grandes tarefas que so divididas em tarefas menores, realiza o processamento de sub-rotina
e retorna para o programa principal outra informao, outro valor. Esse procedimento de dividir
as tarefas maiores em tarefas menores proporciona outra vantagem para a funo, isso evita
L
I que os cdigos sejam repetidos, e que o procedimento solicitado se transforme em uma funo
N
G e esta possa ser chamada por diversas vezes. A funo realiza o trabalho de agrupar conjuntos
U
A de comandos da linguagem de programao, esse processo disponibiliza uma resposta muito
G
E mais rpida, pois os parmetros ficam armazenados e podem ser chamados e consultados
N
S diversas vezes. A funo possui a responsabilidade de agilizar as chamadas, organizar os
D parmetros, realizando desta forma uma economia do cdigo-fonte de um programa.
E
P
R
Como descrito anteriormente uma funo considerada subprograma, esta precisa
O
G
receber um valor numrico, realizar o clculo e por fim retornar com um valor nico deste
R
A
comando. So encontrados dois tipos de funes, a de biblioteca e de usurio. A funo de
M
A
biblioteca so funes j existentes, estipuladas, escritas pelo fabricante do compilador, as
funes j esto pr-compiladas, j esto escritas em cdigo mquina. A funo de usurio
D Mendes (2011, p. 114), coloca que a funo recursiva so funes que obtm um
E
resultado atravs de vrias chamadas prpria funo. Entretanto, as chamadas recursivas
D
A devem ser limitadas para evitar o uso excessivo de memria. Nesse sentido, deve-se estar
D
O atento para que a funo verifique a condio de trmino de uma recurso.
S
UNIDADE 1 TPICO 2 39
D
E
D
A
D
O
S
40 TPICO 2 UNIDADE 1
Um ponto a ser observado que uma funo esttica, pode ser sempre reutilizada,
pode ser citada, como exemplo, a funo mais bsica utilizada para executar uma rotina,
conhecida como funo main, esse comando utilizando em um cdigo, dentro de uma classe.
P
R
O
As funes com argumentos tambm so funes estticas, podem ser reutilizadas, no
G
R
entanto ela se difere por possuir apenas as informaes necessrias para que a funo consiga
A executar o processo com argumentos, estas ficam descritas dentro de parnteses. Levando em
M
A conta um fator muito importante nesta funo que a funo com argumento pode ter entre
um e at vrios argumentos, desde que estes sejam separados por vrgulas. Outro fator que
O
deve ser observado neste caso que cada argumento deve ter seu tipo declarado, conforme
E
seguem os exemplos abaixo, de acordo com o autor Xavier (2010, p. 35):
E
S
T
R public static void funcao1 (String arg1) {}
U
T public static void funcao2 (int arg1, int arg2) {}
U
R public static void funcao3 (String arg1, char arg2, int arg3, float arg4, Object arg5) {}
A
D
E A seguir ser apresentado um exemplo desta funo de resultado fatorial, ser aplicada
D uma funo de 1 a 10, resultando em um nmero no fator final.
A
D
O
S
UNIDADE 1 TPICO 2 41
Vamos utilizar para criar funes o JavaScript, neste caso utilizada a palavra-chave
L
Function, aps esse procedimento precisa ser dado um nome para esta funo. Vamos I
N
apresentar o exemplo da Function a seguir, conforme autor Xavier (2010, p. 35): G
U
A
G
function nomeDaFuncao ( parmetros ) { cdigo da funo } E
N
S
D
A
O principal cargo de funes com retorno desenvolver um resultado para um D
O
determinado script, onde a soluo da soma gerada e utilizada para desenvolver este resultado S
42 TPICO 2 UNIDADE 1
A seguir vamos analisar um exemplo do autor Xavier (2010), em relao funes com
retorno, usando a funo return:
E
S 2.2.2 Usando pginas Web em JavaScript
T
R
U
T Uma das principais funes de JavaScript escrever funes para que sejam includas
U
R em pginas web, desenvolvidas em linguagem HTML, onde podem interagir diretamente com
A
Modelo de Objeto de Documento. O JavaScript torna a execuo das aes muito mais rpidas,
D
E pois realizam a execuo do cdigo diretamente no navegador do usurio, outra vantagem
D detectar de forma autnoma as aes e solicitaes do usurio.
A
D
O
S
UNIDADE 1 TPICO 2 43
3 DEFINIO DE FUNES
A funo deve ser utilizada sempre que seja necessrio obter um nico valor. Esse uso
corresponde noo matemtica de funo. Consequentemente, muito estranho que uma
funo realize uma tarefa diferente de desenvolver um valor, e no deve faz-lo. (AGUILAR
L
2011, p. 268). I
N
G
U
A
G
E
N
S
4 PILHA DE EXECUO
D
E
Pilhas so classificadas como uma estrutura de dados, muitas vezes utilizada para P
R
realizar a implementao de sua estrutura na linguagem de programao, uma estrutura muito O
G
utilizada, pois permite que todo acesso que realizado em um programa ou ao em cdigo R
A
precisa passar pelo topo da estrutura de dados. A pilha segue uma lgica de programao, M
A
onde cada cdigo ou um novo elemento includo em uma pilha, este passa a ser pertencente
da estrutura de dados do topo, outra caracterstica muito positiva para a programao que O
nesta estrutura, apenas o topo pode ser excludo. Nesse sentido, seguindo os princpios e E
A estrutura da pilha composta por duas operaes bsicas, isso quer dizer que para
realizar o empilhamento de uma estrutura de pilha precisa realizar uma operao para empilhar
um novo elemento e a segunda operao bsica desempilhar um elemento. Na operao de
empilhamento de um novo elemento, o processo ocorre quando so inseridos os elementos
no topo do empilhamento. Na operao de desempilhar um elemento, pega-se o elemento e
remove-o do empilhamento.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M FONTE: Farias (2009)
A
chamada topo. Como j mencionado, este processo conhecido como elementos que so
retirados do topo da pilha, isso quer dizer que sempre o ltimo elemento a entrar na pilha ser
o primeiro elemento a ser retirado do topo da pilha.
A partir dessa premissa, em que mesmo sendo o ltimo elemento inserido na pilha,
ser o primeiro a ser removido, este termo conhecido como LIFO (Last In, First Out). A lista
LIFO considerada uma estrutura dinmica, denominada uma coleo que pode aumentar e
diminuir durante sua existncia. Esta denominao de LIFO vem justamente por serem listas
que crescem e diminuem. Ainda, segundo Pereira (1996, p. 18):
Uma pilha pode suportar at trs operaes bsicas, essas operaes bsicas
so conhecidas como:
TOP: Acessa o elemento que est posicionado no topo da pilha.
PUSH: Este possui como funo inserir um novo elemento no topo da pilha.
POP: Este remove um elemento que est no topo da pilha.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
FONTE: Jprofessor (2014) E
E
Analisando a figura acima podemos perceber que Top est indicando os elementos que S
T
esto no topo da pilha, por outro lado a funo Push est inserindo os elementos na pilha, e a R
U
funo Pop exclui os elementos da pilha, como podem ser vistos nas pilhas inferiores da figura, T
U
isso pode ser percebido nas trs pilhas em que um elemento foi excludo. R
A
D
E
D
A
D
O
S
46 TPICO 2 UNIDADE 1
Quando existe a necessidade de criar uma nova pilha muitos procedimentos devem
ser levados em considerao e alguns cuidados precisam ser observados. Quando se cria
uma nova pilha a mesma aparecer vazia, deve ser informado que a pilha est vazia. Esses
procedimentos precisam ser considerados para que a pilha tenha sua utilidade e seja utilizada
pelos elementos que a completam. Edelweiss e Galante (2009, p. 129), apresentam o seguinte
raciocnio em relao criao da pilha.
A estratgia indicar que a pilha est vazia, este procedimento feito quando
o ndice do topo da pilha estiver indicando uma unidade a menos do que o
ndice de sua base. Outra estratgia os algoritmos que manipulam as pilhas
(insero, remoo e consulta) utilizam esta estratgia para reconhecer que
a pilha est vazia.
L
I 4.2 INSERO DE UM NODO NA PILHA
N
G
U
A A insero de um nodo na pilha s pode ocorrer se houver espao na pilha, isso pode
G
E ser verificado pelo valor que limita o espao da pilha. Esse procedimento de insero de um
N
S nodo na pilha segue a lgica da pilha, onde esse nodo ser inserido no topo, essa funo
D conhecida tambm pela funo Push. Segundo Edelweiss e Galante (2009, p. 130), caso a
E
insero seja realizada, o valor do topo da pilha incrementado, sendo este agora o nodo do
P
R topo, consequentemente, o nico ao qual se tem acesso. Para verificar se existe espao na
O
G pilha, e a insero ocorra no nodo, precisa ser inserido o valor da posio que o nodo assumir,
R
A se no existir mais espao na pilha a funo sucesso apresenta falso a insero do nodo.
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 2 47
FONTE: A autora
Para realizar a remoo de um nodo da pilha necessrio que este esteja no topo
da pilha, esta operao reconhecida como Pop, essa remoo pode acontecer se a pilha
apresentar pelo menos um nodo, esse procedimento faz com que o valor da pilha diminua,
considerando que podem a partir desse ponto, incluir novos elementos na pilha, sem espao no
L
possvel incluir, por isso a funo de remoo do nodo. Abaixo vamos analisar um exemplo I
N
de um algoritmo Remoo de um Nodo da Pilha: G
U
A
G
FIGURA 26 - REMOO DE NODO NA PILHA E
N
S
D
E
P
R
O
G
R
A
M
A
O
FONTE: A autora E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
48 TPICO 2 UNIDADE 1
O acesso ao nodo de uma pilha pode ser feito apenas com o nodo que est no topo
da pilha, se existir a necessidade de acessar outros nodos da pilha, precisa ser removido os
nodos que esto antes do nodo a ser acessado, iniciando a remoo sempre pelo topo da pilha.
L
valor no topo da pilha, isso se a pilha estiver com espao livre para guardar este encadeamento.
I
N
G J no processo de inserir um nodo em uma pilha encadeada, o processo ocorre seguindo
U
A a lgica da pilha, em que os elementos so includos no topo dela, nesse sentido o novo nodo
G
E deve ser encadeado com o elemento que estiver no topo da pilha, passando este nodo a ser
N
S o novo topo. Vamos analisar a seguir um exemplo de como executar a insero de um nodo
D em uma pilha encadeada:
E
P
R
O FIGURA 27 - INSERIR NODO EM UMA PILHA
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A FONTE: A autora
D
O
S
UNIDADE 1 TPICO 2 49
5 PONTEIRO DE VARIVEIS
Pode-se dizer que para cada tipo de memria, existe um tipo de ponteiro, pois este
possui como caracterstica armazenar endereos de memria, isso em situaes de existncia
de valores que sejam correspondentes com os valores dos ponteiros. Um exemplo de valores
a declarao varivel como: int a, ao realizar o processo de declarar a varivel, com o nome
de a, estamos dizendo que esta varivel pode conter nmeros inteiros, essa declarao
permite que automaticamente seja reservado um espao na memria para valores inteiros.
Com a declarao da varivel j apontada e armazenado seu valor em um espao na memria L
desenvolve-se um ponteiro, necessitando apenas direcionar este ponteiro para a varivel criada. I
N
Segundo Martin (2014, p. 277), os ponteiros permitem que sejam representadas estruturaras G
U
de dados complexas, permite a alterao de valores passados como argumentos para funes A
G
e mtodos. E
N
S
int j;
j = 22;
Perceba que o ponteiro declara a varivel j como sendo um nmero inteiro, como no
exemplo o nmero inteiro j = 22.
FIGURA 28 - PONTEIRO
L
I
N
G
U
A FONTE: Schepp (2011)
G
E
N
S
D
E
UNI
P CASAVELLA, Eduardo. Ponteiros em C. A utilizao de ponteiros
R
O em linguagem C uma das caractersticas que tornam a
G linguagem to flexvel e poderosa.
R Para descobrir mais sobre Ponteiros, acesse o Link: <http://
A
M linguagemc.com.br/ponteiros-em-c/>.
A
E
Percebe-se que na figura fica muito clara a disposio do funcionamento do Ponteiro,
E
onde o ponteiro declara a varivel, com isto o valor ocupa um espao na memria e fica
S armazenada, este espao destinado para o valor desta varivel.
T
R
U
T
U
R
A
D 6 RECURSIVIDADE
E
D
A
D Recursividade se define por executar chamadas de uma mesma funo, esse processo
O
S ocorre dentro do corpo de uma funo existente e declarada, a recursividade chama novamente
a prpria funo. Podemos exemplificar de forma mais simples, onde a funo declarada de C
UNIDADE 1 TPICO 2 51
chama a sua prpria funo C, isso denominado de recursividade direta, no entanto podem
ser chamadas tambm funes indiretas, como, por exemplo, a funo C chama a funo D,
e esta funo D, chama a funo C, isso caracterizado como recursividade indireta.
No entanto ao desenvolver uma funo recursiva devem ser tomadas algumas medidas,
mesmo ela sendo uma soluo simples, executando tarefas repetitivas, isso ocorre sem usar
estruturas de repetio, caracterizando-se em processo nada dinmico. Todo processo de
desenvolvimento ao utilizar a recursividade exige muita ateno na sua aplicao, para que
no tenha problema na declarao das funes e no torne o programa demorado no momento
de devolver as respostas das chamadas.
Os cuidados se devem s propostas das funes recursivas. Toda vez que uma funo
chamada de forma recursiva, estas so armazenadas na memria do parmetro de cada
chamada, isso ocorre para que os valores no se percam.
Levando em considerao que cada instncia de uma funo pode acessar as instncias
criadas para ela mesma, no podendo esta instncia acessar os parmetros de outras instncias
e a chamada de uma funo conhecida como registro de ativao, devendo esta chamada
obter os seguintes retornos: deve retornar um endereo, registrar o estado e as Flags do L
I
computador, transformar as variveis como argumentos e o retorno da varivel. N
G
U
A
A seguir temos um exemplo de como ocorre uma funo recursiva utilizando a linguagem G
E
de programao em C. A funo recursiva precisa criar um programa que pea um nmero N
S
inteiro ao usurio e retorne a soma de todos os nmeros de 1 at o nmero que o usurio
D
introduziu, sendo os seguintes valores 1 + 2 + 3 + ... + n: E
P
Vamos criar uma funo soma(int n). R
O
Se n=5, essa funo deve retornar: soma(5) = 5 + 4 + 3 + 2 + 1 G
R
Se n=4, essa funo deve retornar: soma(4) = 4 + 3 + 2 + 1 A
M
Se n=3, essa funo deve retornar: soma(3) = 3 + 2 + 1 A
O
Isso feito de uma maneira muito simples, atravs de um simples teste condicional do
E
tipo IF ELSE. Veja a seguir como ficou nosso cdigo em C:
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
52 TPICO 2 UNIDADE 1
#include <stdio.h>
int soma(int n)
{
if(n == 1)
return 1;
else
return ( n + soma(n-1) );
}
int main()
{
int n;
printf("Digite um inteiro positivo: ");
scanf("%d", &n);
D
E FIGURA 29 - FUNO RECURSIVA DIRETA
P
R
O
G
R
A
M
A
E
S
T FONTE: A autora
R
U
T
U Pereira (1996), apresenta ainda uma forma indireta de recurso, na qual rotinas so
R
A conectadas atravs de uma cadeia de chamadas sucessivas que acabam retornando a primeira
D que foi chamada.
E
D
A
D
O
S
UNIDADE 1 TPICO 2 53
FONTE: A autora
Analisando os exemplos acima percebemos que a funo recursiva direta chama ela
mesma, com R chamando a funo R, j na funo recursiva indireta a funo R chama a
funo C, e a funo C realiza a chamada da funo R.
L
UNI I
N
G
Conhea mais acerca da Recursividade e suas funcionalidades U
A
dentro das funes acessando o link: <http://geraldoferraz. G
blogspot.com.br/2011/11/recursividade.html> e tambm o link: E
<http://linguagemc.com.br/recursividade-em-c/> N
S
D
E
P
R
O
G
R
7 VARIVEIS ESTTICAS DENTRO DE FUNES A
M
A
A varivel esttica definida por ser um valor que est disponibilizado dentro de um O
escopo local, em uma funo, toda vez que a mesma inicializada pela primeira vez o fluxo E
de controle atinge o bloco ao qual corresponde seu valor, como no perde tambm seu valor, E
S
quando o nvel de execuo do programa deixa o escopo. Um procedimento que ocorre em uma T
R
varivel esttica que esta no fica armazenada em uma pilha, no entanto fica armazenada em U
uma memria esttica, este procedimento ocorre devido a um processo realizado pelo prprio T
U
funcionamento do programa. Segundo Junior, et al. (2012, p. 376), as variveis estticas so R
A
variveis locais cujos valores persistem dentro da funo, e permanecem a cada vez que a
D
funo chamada. E
D
A
Com isso a memria esttica continua existindo aps a funo ser executada, pois seu D
O
S
54 TPICO 2 UNIDADE 1
valor fica armazenado, definindo que essa varivel que foi declarada para esta funo, apenas
pode ser visualizada dentro da mesma funo qual foi declarada. Outra funo muito relevante
que a varivel esttica desempenha a recuperao do valor de uma varivel atribuda,
quando a funo foi executada pela ltima vez, uma vantagem que se deve novamente ao
armazenamento da memria esttica. Conforme Aguilar (2011, p. 268), as variveis estticas
mantm sua informao, inclusive depois de terminada a funo. Quando a funo novamente
chamada a varivel adota o valor que tinha quando foi chamada anteriormente.
A varivel esttica precisa ser declarada dentro de uma funo, esta funo possui
como responsabilidade realizar a impresso de nmeros que so reais, a grande vantagem
desta funo declarada pela varivel esttica est em imprimir um nmero real por vez, cada
nmero separado e colocando at cinco nmeros em cada linha impressa. Essa impresso
ocorre da seguinte forma, na primeira linha so impressos cinco nmeros, na segunda linha
so impressos mais cinco nmeros e assim consequentemente.
L
I Void imprime ( float a )
N
G {
U
A static int n = 1;
G
E printf ( " % f " , a );
N
S
if (( n % 5 ) == 0 ) printf ( " \ n " );
D
n++;
E }
P
R
O
G
R
A
M
A
7.1 VARIVEL LOCAL
E
A varivel local definida especificamente para uma funo que possui um
E
S
armazenamento destinado para uma varivel que est definida dentro de uma funo, isso
T
R
acontece devido as variveis locais serem declaradas para apenas uma funo. Esta varivel
U
T
guarda os valores de vrias chamadas de uma funo, esse procedimento muito importante
U
R
quando existe a necessidade de conter um valor na sada da funo, sem necessitar que uma
A varivel global seja criada. Lorenzi, Mattos e Carvalho (2007, p. 44), apresentam as variveis
D locais como declaradas na seo de declarao da sub-rotina, fazendo que somente essa
E
sub-rotina possa utiliz-lo. O restante do programa no reconhece essas variveis.
D
A
D
O Segundo Xavier (2010), as variveis locais so aquelas nas quais apenas a funo que
S
UNIDADE 1 TPICO 2 55
a declarou pode us-la, conforme o exemplo da declarao de um valor int x, dentro de uma
funo main, apenas a funo main pode utilizar esta varivel, vejamos o exemplo:
D
E
P
R
7.2 VARIVEL GLOBAL O
G
R
A
M
A varivel global, por sua vez, declarada fora das funes, externamente a uma A
funo, por isso sua disponibilidade est associada globalmente, para que as funes estejam
O
localizadas abaixo das variveis declaradas. Um fator muito interessante de uma varivel global
E
a caracterstica de ficar escondida dentro do mdulo ao qual foi declarada, e pode ser visvel
E
apenas para este mdulo. Conforme Lorenzi, Mattos e Carvalho (2007, p. 43), colocam que S
T
as variveis globais so declaradas na seo de declarao do programa principal. Isso que R
U
essas variveis possam ser empregadas em todo o programa, inclusive dentro das sub-rotinas, T
U
pois todo o programa capaz de enxerg-las. R
A
D
Conforme o autor Xavier (2010), a varivel declarada fora de qualquer funo. E
Variveis globais podem ser utilizadas por qualquer funo. E qualquer funo pode alterar D
o valor, utiliz-la em um processo ou at mesmo atribuir o valor que quiser, vamos analisar o A
D
exemplo a seguir: O
S
56 TPICO 2 UNIDADE 1
L
I Xavier (2010), apresenta a varivel _iniciado que est sendo usada nas duas funes -
N
G main e start. Toda vez que a funo start chamada, incrementada (somada) um a _iniciado.
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 2 57
RESUMO DO TPICO 2
Neste tpico de estudos ns falamos muito sobre as funes, sua conceituao, definio,
caractersticas e suas funcionalidades, lembrando que uma caracterstica muito interessante
da funo que esta pode ser atribuda como um subprograma, ao qual a funo recebe
uma tarefa grande e se subdivide em sub-tarefas.
Uma definio muito importante sobre a funo que a mesma realiza o processo de agrupar
conjuntos de comandos da linguagem, com isso as chamadas das funes retornam a
L
resposta muito rpido, pois os parmetros ficam armazenados, com isso podem ser chamados I
N
e consultados vrias vezes. A caracterstica mais relevante da funo que quando um cdigo G
U
do programa se repete, este ser transformado em uma nova funo dentro do programa. A
G
E
N
A pilha classificada como uma estrutura de dados, para que todo processo, como uma S
ao, chamada ou comando, possa especificamente passar pelo topo da estrutura da pilha. D
E
Outra caracterstica da pilha de execuo : a programao segue uma lgica, em que cada
P
cdigo ou elemento includo em uma nova pilha, e esta por sua vez passa a fazer parte da R
O
estrutura de dados, lembrando que os elementos da pilha so retirados em ordem inversa, G
R
o ltimo elemento, sempre o primeiro a sair, essa lgica conhecida como Last In e First A
M
Out. A
O
A principal funcionalidade dos ponteiros de variveis realizar o processo de armazenar
E
endereos de memria, primeiro precisa-se declarar uma varivel, para saber qual o
E
tamanho que esta varivel vai ocupar na memria. Um exemplo desta funcionalidade S
T
realizar a declarao da varivel int a, estamos declarando que esta varivel pode conter R
U
nmeros inteiros. T
U
R
A
Recursividade, esta palavra j diz tudo, possui como finalidade executar chamadas de uma
D
mesma funo. E
D
A varivel esttica definida por ser um valor que deve ser declarado dentro da funo, este A
D
valor armazenado na memria esttica do programa e continua existindo, mesmo aps a O
S
execuo desta funo, pois seu valor est armazenado na memria esttica.
58 TPICO 2 UNIDADE 1
IDADE
ATIV
AUTO
1 A pilha de execuo possui a funo de incluir cada elemento ao topo de uma pilha,
so denominadas de estruturas de dados auxiliando a linguagem de programao,
pois todo cdigo precisa passar pelo topo da pilha. Com a incluso dos elementos
no topo da pilha, como esses elementos podem ser excludos do topo? Assinale (V)
para as alternativas Verdadeiras e (F) para as alternativas Falsas.
( ) TOP.
( ) POP
( ) PUSH
( ) LAST.
2 Recursividade se define por executar chamadas de uma mesma funo, esse processo
ocorre dentro do corpo de uma funo existente e declarada, a recursividade chama
L
I novamente a prpria funo. Toda vez que uma funo chamada de forma recursiva,
N
G estas so armazenadas na memria do parmetro de cada chamada, isso ocorre
U
A para que os valores no se percam. Na recursividade pode-se executar a chamada
G
E da mesma funo, atravs de suas formas:
N
S ( ) Contnua.
D ( ) Indireta.
E
( ) Direta.
P
R
( ) Instvel.
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1
TPICO 3
1 INTRODUO
E
2 VETORES E ALOCAO DINMICA S
T
R
U
T
U
R
A
D
2.1 VETORES (ARRAYS) E
D
A
D
A principal funcionalidade de um vetor realizar a estruturao de um conjunto de O
S
dados, para que isso ocorra precisa ser definio desde a estrutura, auxiliando o programador
60 TPICO 3 UNIDADE 1
Como mencionado os vetores podem ser considerados como uma sequncia lgica
L de elementos, podem estar disponveis atravs de uma lista, para acessar esta lista existe a
I
N necessidade de seguir um ndice, este ndice por sua vez pode ser acessado individualmente,
G
U contendo dados constitudos por nmeros inteiros. Para realizar a indexao desses elementos,
A
G necessrio que sejam do nmero 0, entre n-1, n definido pela quantidade de elementos
E
N que compem o vetor, o n pode ser considerado tambm como a dimenso ou o tamanho
S
deste vetor. Aps a declarao do vetor, seu tamanho torna-se fixo, no sendo possvel
D
E alterar o seu tamanho posterior execuo do programa, pois seu tamanho est armazenado
P e gravado na memria.
R
O
G
R
Segundo Aguilar (2011, p. 250), um vetor (array) uma sequncia de objetos do mesmo
A
M
tipo. Os objetos so chamados elementos do array e so numerados consecutivamente de
A
O
utilizado para armazenar valores do tipo char, int ou float. Perry (1999, p. 683), diz que para
E
monitorar e processar vrios itens precisa colocar esses itens em um nico array, com apenas
um nome. A vantagem de um array poder percorrer todas as variveis com a instruo de
E
S loop, como um loop for.
T
R
U
T Conforme Aguilar (2011, p. 250), um array pode conter a idade dos alunos de uma
U
R sala, as temperaturas de cada dia de um ms em uma determinada cidade ou o nmero de
A
pessoas que vivem em cada estado do Brasil. Ser apresentado a seguir um exemplo de um
D
E array, onde este possui 6 (seis) elementos: a[0] = 25,1; a [1] =34,2; a[2] = 5,25; a[3] = 7,45;
D a[4] = 6,09; e a[5] = 7,54.
A
D
O
S
UNIDADE 1 TPICO 3 61
Pode-se perceber que a tabela acima est representando uma rea da memria de um
computador, pois o array sempre armazenado com seus elementos em uma sequncia de
posies, como uma sequncia contnua. Cada item no array chamado de elemento, seguindo
essa linha, cada elemento acessado de forma independente, conforme a posio do ndice,
no exemplo acima fica muito claro, as posies so especificadas atravs dos nmeros.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
Fonte: Palmeira (2014) M
A
O
D
E
D
A
D
O
S
62 TPICO 3 UNIDADE 1
TABELA 4: SYSTEM.ARRAY
Rank Retorna o nmero de dimenses do array.
GetLength Retorna o nmero de elementos da dimenso especfica do array.
Length Retorna o total de elementos do array.
GetLowerBound Retorna limite baixo da dimenso especificada.
GetupperBound Retorna o limite alto da dimenso especificada.
IsReadOnly Indica se o array apenas para leitura.
IsSynchronized Indica se o acesso ao array thread-safe.
Retorna um objeto que pode ser usado para sincronizar o acesso para o
SyncRoot
array.
IsFixedSize Indica se o array tem um tamanho fixo.
Retorna a referncia para o elemento localizado em uma posio especfica
GetValue
no array.
GetEnumerator Retorna o IEnumerator para o array, permitindo o uso da instruo foreach.
Sort Ordena os elementos de um array.
Retorna o ndice da primeira ocorrncia do valor em um array
IndexOf
unidimensional ou em uma parte dele.
Retorna o ndice da ltima ocorrncia do valor do array unidimensional ou
LastIndexOf
em uma parte dele.
L Reverte a ordem dos elementos em um array unidimensional ou em uma
I
Reverse
N
parte dele.
G Clone Cria um novo array que uma cpia superficial do array de origem.
U
A CopyTo Copia os elementos de um array para outro.
G
E Copia a seo de um array para outro, executando qualquer modelagem
N Copy
S requerida.
D
Clear Configura a faixa de elementos no array para 0 ou null.
E
Fonte: Medeiros (2014)
P
R
O
G
R
A
M UNI
A
D
A
D
O
S
UNIDADE 1 TPICO 3 63
3 ALOCAO DINMICA
Antes de explicar sobre o que se trata a alocao dinmica, vamos falar um pouco sobre
o uso da memria em um programa. Para que sejam armazenados dados e informaes em um
espao de memria, precisamos proceder de trs formas, utilizar as variveis globais, variveis
locais e solicitar um espao para o prprio sistema. Conforme Pereira (1996, p. 146), sabemos
que para executar um programa, o computador precisa carregar seu cdigo executvel, para
a memria. Neste momento, uma parte da memria total disponvel no sistema reservada
para o uso do programa e o restante fica livre.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
FONTE: Rocha (2010)
O
E
Conforme j visto anteriormente as variveis globais so classificadas por continuar
E
existindo enquanto o programa est sendo executado. Na varivel local, o espao armazenado S
T
somente para funes declaradas, onde a varivel est sendo executada. J para armazenar R
U
espao na memria ocorre um processo que exige que seja solicitado para o sistema, no entanto T
U
esse processo deve ocorrer enquanto o sistema est sendo executado, deve ser determinado R
A
tambm o espao ao qual precisa ser armazenado, este espao continua armazenado e
D
registrado, enquanto no seja solicitado de forma explicita para o sistema, at que este espao E
seja liberado. D
A
D
O
Agora que sabemos sobre as definies das variveis que realizam o armazenamento S
64 TPICO 3 UNIDADE 1
E
S
T
R
U
T Este exemplo acima de um comando para obter certeza que existe espao suficiente
U
R para alocar memria no programa. Vamos analisar na figura abaixo como ficaria disponibilizada
A
e reservada a memria, utilizando a funo malloc().
D
E
D
A
D
O
S
UNIDADE 1 TPICO 3 65
L
I
FONTE: Rocha (2010) N
G
U
A
de extrema importncia que seja verificado e testado se a alocao ocorreu de forma G
E
correta, esse processo deve ser realizado antes mesmo de utilizar o apontador. Vamos analisar N
S
como devem ser os comandos para essa verificao, segue exemplo da figura logo abaixo.
D
E
FIGURA 34 - TESTE DA FUNO MALLOC()
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
FONTE: Rocha (2010) S
66 TPICO 3 UNIDADE 1
Para que o procedimento de liberao de espao de uma memria alocada seja efetivo
precisamos executar o comando que utiliza a funo free(), deve ser observado que aps a
liberao do espao na memria esta no poder ser mais acessada. Vamos analisar a seguir
o exemplo da funo free() na execuo de liberar espao na memria alocada dinamicamente.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
FONTE: Rocha (2010)
E
E
S A alocao dinmica, nada mais do que criar um espao na memria de um programa
T
R
ou sistema operacional, no entanto, esse procedimento de criar uma alocao, de armazenar
U
T
um espao da memria deve ser realizado enquanto o programa est sendo executado. Outra
U
R
caracterstica da alocao dinmica que para realizar o armazenamento de vrios elementos
A s possvel alocar espao para um elemento por vez, no possvel alocar espao para vrios
D ao mesmo tempo. Tanto para liberar espao, como para desalocar espao de um elemento
E
a funo deve estar sendo executada pelo programa. Com relao aos elementos, para a
D
A liberao de espao da memria alocada, precisa ser feito de um elemento de cada vez, como
D
O no processo de alocao de espao da memria. A alocao de memria pode ocorrer em
S
UNIDADE 1 TPICO 3 67
duas categorias, sendo Esttica ou Dinmica, como veremos a seguir na definio de cada
uma dessas alocaes de memria.
D
E
Podemos considerar que a definio de uma alocao dinmica ocorre quando a
P
alocao de memria estava prevista no desenvolvimento do cdigo do programa, em que o R
O
espao j estava alocado, reservado para as variveis, esse processo de predefinir um espao G
R
para alocamento da memria chamado de alocao dinmica. Lorenzi, Mattos e Carvalho A
M
(2007, p. 51), definem a alocao dinmica como ocorre em tempo de execuo, ou seja, A
as variveis e estruturas so declaradas sem a necessidade de se definir seu tamanho, pois
O
nenhuma memria ser reservada ao colocar o programa em execuo.
E
E
Pereira (1996, p. 146), diz se o programa capaz de criar novas variveis enquanto S
T
executa, isto , se as reas de memria que no foram declaradas no programa passam a R
U
existir durante a sua execuo, ento dizemos que a alocao dinmica. T
U
R
A
D
E
D
A
D
O
S
68 TPICO 3 UNIDADE 1
LEITURA COMPLEMENTAR
RECURSIVIDADE EM JAVA
A recursividade nada mais nada menos do que uma funo dentro da outra e ela deve
ser pensada como uma pilha (estrutura de dados onde o ltimo a entrar deve ser o primeiro a
sair). A estrutura dela consiste em descer at a base fazendo os clculos ou rotinas de cada
instruo, e ento da base at o topo da pilha so empilhados os resultados de cada instruo
e no final o topo contm o resultado que retornado. Na figura a seguir, temos um exemplo
que frequentemente usado para explicar a recursividade, podemos encontrar em diversos
livros didticos, porque um dos mais fceis para se entender, estou falando do fatorial.
L
I
N
G
U
A
G
E
N
S
D
E
P
R Obs.: O fatorial(4) s pode ser descoberto depois que o fatorial(3) for descoberto,
O
G que por sua vez s poder ser descoberto depois do fatorial(2) e assim por diante. Por isso vai
R
A do topo at a base, e depois vai empilhando os resultados da base at o topo.
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 3 69
L
Essa a funo recursiva do fatorial em JAVA. Agora vamos implementar um mtodo I
N
principal para testar esta funo, para facilitar coloque esse mtodo dentro da classe que j G
U
foi criada. Como a seguir: A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
Com isso eu encerro este artigo, espero que tenham gostado e entendido a to temida T
recursiva. Qualquer dvida podem entrar em contato. U
R
A
Concluso D
E
D
Ao final deste artigo podemos ver que a recursividade no aquele bicho papo que A
D
muitos pensam, tudo questo de ateno e organizao. Se voc tiver pacincia, ateno O
S
70 TPICO 3 UNIDADE 1
e organizao vai se dar muito bem com a recursividade, no esquecendo claro de fazer
aquele bom e velho teste de mesa (pelo menos no comeo), e importante lembrar, tambm,
que a recursividade trabalha com o conceito de pilha e pode at substituir laos de repetio.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 3 71
RESUMO DO TPICO 3
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
72 TPICO 3 UNIDADE 1
IDADE
ATIV
AUTO
a) ( ) Valores ndices.
b) ( ) Valores Programa.
c) ( ) Valores Subndice.
d) ( ) Valores Subprograma.
D a) ( ) REALLOC()
E
b) ( ) FREE()
P
R
c) ( ) MALLOC()
O
G
d) ( ) CALLOC()
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 1 TPICO 3 73
IAO
AVAL
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
74 TPICO 3 UNIDADE 1
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2
ESTRUTURAS DE DADOS
Objetivos de aprendizagem
D
E
D
A
D
O
S
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2
TPICO 1
CADEIA DE CARACTERES
1 INTRODUO
Unidimensionais; Leitura de Vetores e Escrita de Vetores. Todos esses conceitos podem ser E
D
A
D
O
S
78 TPICO 1 UNIDADE 2
2.1 CARACTERES
O
Conforme a definio de Ramos; Neto; Vega (2009), caracteres podem ser utilizados
E
para representar elementos de pontuao, dgitos, sinais, espaos e letras. Um valor da classe
E
S
string constitudo por uma sequncia de caracteres delimitada por um par de apstrofos ( '
T
R
) ou aspas ( ).
U
T
U Goodrich e Tamassia (2002, p. 417), afirmam que cadeia de caracteres podem surgir
R
A de uma variedade de origens, incluindo aplicaes cientficas, lingusticas e da internet. Vamos
D analisar a seguir estes exemplos de cadeia de caracteres:
E
D
A
D
O
S
UNIDADE 2 TPICO 1 79
P = GGTAAACTGCTTTAATCAAACGC
R = U.S. Men win soccer world cup!
S = http://www.wiley.com/college/goodrich/
A string tambm denominada cadeia de caracteres, pois uma lista linear ou vetor,
onde cada elemento desse vetor um carcter, e o agrupamento deles ir representar uma
informao. Vamos analisar o exemplo da seguinte frase: Vendas crescem 28% ao ms!
(JUNIOR; et al. 2011, p. 393):
V e n d a s c r e s c e m 2 8 % a o m s !
No exemplo anterior pode ser analisada a estrutura de dados, esta estrutura comporta
26 caracteres, incluindo nmeros e espaos em branco, todos esses caracteres da estrutura L
I
de dados formam uma informao. N
G
U
A
O conceito de string pode ser construdo atravs do uso de vrias linguagens de G
E
programao, como, por exemplo a construo de algoritmos simples, vamos analisar a seguir N
S
esses modelos, vamos iniciar pela linguagem C. Segundo JUNIOR; et al. (2011, p. 402),
D
E
na linguagem de programao C no existe um tipo de dado string, pois nessa
linguagem uma string considerada um arranjo (ou vetor) de caracteres (tipo P
R
char), sendo que sua manipulao ocorre atravs do uso de diversas funes O
de manipulao ocorre do uso de diversas funes de manipulao de strings. G
Esse arranjo armazena uma sequncia de caracteres do tipo char, cujo ltimo R
A
elemento o carcter: NULL, tipicamente, representado na forma do carcter M
'\0', ou simplesmente pelo seu valor 0. A
O
E
Analise a seguir algumas sub-rotinas predefinidas em C, para tratamento de strings:
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
80 TPICO 1 UNIDADE 2
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O FONTE: Juni; et al. (2011)
G
R
A
M
Agora que sabemos mais sobre as sub-rotinas que realizam o tratamento de strings na
A
O
e funes utilizando os caracteres. Vamos analisar a seguir algumas caractersticas dos dados
E
que so caracteres.
E
S Dados na forma de caracteres so armazenados nos computadores como
T codificaes numricas, onde a codificao mal-usada era o ASCII (Padro
R de Codificao para Intercmbio de Informao American Standard Code for
U
T Information Interchange) dados de 8 bits, usam valores de 0 a 127 para codifi-
U car 128 caracteres diferentes. O padro UCS-2, um conjunto de caracteres
R
A de 16 bits. Essa codificao geralmente chamada de Unicode. (SEBESTA
2010, p. 273).
D
E
D
A
D
O
S
UNIDADE 2 TPICO 1 81
UNI
Java foi a primeira linguagem de programao que utilizou
amplamente conjunto de caracteres Unicode UCS-2, adotado
posteriormente tambm pelas linguagens JavaScript, Python,
Perl e em C#.
D
E
D
A
D
O
S
82 TPICO 1 UNIDADE 2
D
E 2.2.1 Constantes do tipo caracteres
D
A
D
O Podemos definir as constantes como valores pertencentes a programas de computador
S
que por sua vez no podem mudar seus valores durante a sua execuo. Segundo Aguilar
UNIDADE 2 TPICO 1 83
(2011, p. 84), os programas de computador contm certos valores que no devem mudar
durante a execuo do programa. Tais valores so chamados de constantes. Entretanto,
existem outros valores que mudaro durante a execuo do programa; esses valores so
chamados de variveis.
Constantes literais.
Constantes definidas.
Constantes enumeradas. L
I
Constantes declaradas. N
G
U
As constantes literais so as mais usuais; recebem valores, tais como A
45.32564,222 ou introduza seus dados que no so escritos diretamente G
E
no texto do programa. As constantes definidas so identificadores que se N
associam a valores literais constantes e que recebem determinados nomes. S
As constantes declaradas so como variveis: seus valores so armazenados D
na memria, mas no podem ser modificados. As constantes enumeradas E
permitem associar um identificador, tal como cor, a uma sequncia de outros
P
nomes, como azul, verde, vermelho e Amarelo. (AGUILAR 2011, p. 76). R
O
G
R
As constantes podem ser utilizadas para a declarao de valores em vrias linguagens A
M
de programao, como C++, Fortran 95, C#, bem como outras linguagens. Sua principal A
finalidade definir e verificar quais so os valores das constantes dos tipos de caracteres dessa
linguagem. Sebesta (2010, p. 259) apresenta a linguagem Java, esta permite a vinculao O
com a palavra reservada final. O valor inicial pode ser dado na sentena de declarao ou E
S
em uma sentena de atribuio subsequente. T
R
U
T
U
R
A
D
E
D
A
D
O
S
84 TPICO 1 UNIDADE 2
var
carcter : C, D
cadeia : NOME, CIDADE
Segundo Rita (2009, p. 40), variveis do tipo carcter so aquelas que podem armazenar
informaes compostas por um simples carcter ou um conjunto de letras, dgitos e smbolos
especiais. Com a utilizao das aspas simples no possvel realizar clculos, pois o programa
L
I
considera apenas como um texto, no entanto ao utilizar as aspas duplas o programa consegue
N
G
ser atribudo para uma cadeia de caracteres.
U
A
G
E
As variveis do tipo carcter possuem alguns pontos importantes que devem ser falados,
N conforme Almeida (2008, p. 27) cita:
S
D
E A utilizao de aspas simples ( ' ): usada na hora em que se faz atribui-
es de um valor para uma varivel do tipo carcter.
P A utilizao de aspas duplas ( ): usada na hora em que se faz atribuies
R
O de um valor para uma varivel do tipo de cadeia de caracteres.
G
R
A
M Vamos analisar na imagem abaixo como ficaria um exemplo das variveis do tipo carcter
A
utilizando aspas simples e aspas duplas:
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 1 85
L
I
As cadeias de caracteres so formadas por vrias operaes, como: atribuio, N
G
concatenao, referncia a subcadeias, comparao e casamentos de padres. U
A
G
Iniciando pede referncia a subcadeias, est conhecida por ser chamada E
de fatia. As operaes de atribuio e comparao de cadeia de caracteres so N
S
compiladas com a possibilidade de compilar operadores de diversos tamanhos.
O casamento de padres uma operao fundamental para as cadeias de D
caracteres, pois pode ser suportada diretamente, como pode ser fornecida por E
uma funo ou uma biblioteca de classe para uma linguagem de programao. P
(SEBESTA 2010, p. 275): R
O
G
R
A
M
A
UNI
O
Segundo Sebesta (2010), a linguagem SNOBOL, foi a primeira
E
linguagem bastante conhecida a suportar o casamento de
padres. E
S
T
R
U
T
U
Segundo Aguilar (2011, p. 269), uma constante do tipo carcter um carcter entre R
A
aspas e uma constante de tipo cadeia um conjunto de caracteres vlidos entre apstrofos
D
para evitar confundir com nomes de variveis, operadores e inteiros. As operaes de E
caracteres uma forma primitiva do computador executar uma determinada operao de D
A
caracteres. D
O
S
86 TPICO 1 UNIDADE 2
Clculo do comprimento.
Comparao.
Concatenao.
L Extrao de subcadeias.
I
N Busca de informao.
G
U
A
G
E
N
S
D 2.2.4 Strings
E
P
R Strings so definidas por serem caracteres utilizadas para representar valores
O
G textuais, como, por exemplo, nomes e endereos, podem ser consideradas como arranjos
R
A unidimensionais, onde os elementos so caracteres, como podem ser consideradas um tipo de
M
A carcter bsico da linguagem. Na linguagem de programao os caracteres que compem uma
string, compreendem os smbolos de uma tabela que esteja codificada, lembrando novamente
O
que os valores de uma string geralmente so escritos em uma sequncia de caracteres e
E
esses esto identificados com a utilizao de aspas duplas, como por exemplo a e 'a', este
E
S segundo exemplo representa um tipo de dado de carcter e o primeiro representa um tipo de
T
R dado string. A seguir vamos analisar como as operaes so tratadas em relao ao tipo string:
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 1 87
OPERAO DESCRIO
Inverso Retorna a string escrita na ordem inversa.
Compara se duas strings so iguais, retornando 0 (zero)
Comparao
em caso positivo.
Retorna a juno das duas strings, com a segunda string
Concatenao
comeando imediatamente aps o fim da primeira.
FONTE: Costa e Neta, 2014
Um tipo de dado String utilizado para representar cadeia de caracteres, onde esses
dados podem ser textos, nomes, sentenas; geralmente, esses tipos de dados strings so
textos pequenos, formados por cadeias de caracteres. Para efetuar operaes com cadeia de
caracteres em Java, precisa-se acionar mtodos presentes na classe String, de quem a cadeia
especfica de caracteres ser um objeto. (FEIJ; SILVA; CLUA, 2010, p. 93).
Segundo Ramos; Neto; Vega (2009, p. 140), a classe java.lang.string disponibiliza vrias
funcionalidades para manipular textos, como: comparao, contagem, pesquisa, eliminao e
insero de caracteres, converso de caixa de texto e tratamento de conjuntos de caracteres.
L
I
Vamos analisar na imagem a seguir os principais mtodos fornecidos por java.lang.string: N
G
U
A
FIGURA 38 java.lang.string G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
Um vetor pode ser considerado como uma cadeia de caracteres, quando representado
em algumas aplicaes de um programa, um vetor considerado um tipo char. Quando o vetor
classificado como tipo char, pode representar elementos como uma cadeia de caracteres,
e esse vetor apontando para ponteiros char, esse processo de representar os elementos e
apontar para os ponteiros do tipo char conhecido como vetor bidimensional de char.
Uma cadeia pode ser implementada como um vetor, cada elemento do vetor
contendo um ou mais caracteres. O vetor dever ser dimensionado de modo
a conter a cadeia; assim, se o comprimento da cadeia m e cada elemento
do vetor pode conter p caracteres, ento o nmero n de elementos do vetor
dever ser tal p.n m. Como por exemplo: n I_m/p_I (menor inteiro maior
ou igual a m/p). O armazenamento de mais de um carcter por elemento
torna necessria a existncia de operaes que obtenham ou modifiquem o
L
I valor de cada carcter. Tais operaes em geral utilizam algum mecanismo
N de deslocamento (shift) para trazer o carcter desejado para a primeira (ou
G ltima) posio dentro do espao ocupado pelo elemento. (VELOSO, SANTOS
U
A e AZEREDO 1983, p. 78).
G
E
N
S Para realizar a declarao da varivel para um vetor, como por exemplo de uma turma
D de alunos, deve-se declarar a quantidade de caracteres, como o nome de cada aluno, deve ter
E
no mximo at 70 caracteres, e o limite de alunos na turma deve ser de 40. Todo esse processo
P
R de identificar e declarar as variveis chamado de vetor bidimensional, nele que todos os
O
G
caracteres contendo os nomes ou nmeros de alunos que formam a turma so armazenados.
R
A
Conforme podemos analisar no exemplo a seguir, como declarar uma varivel de um vetor
M
A
bidimensional:
E
S Em uma situao, onde a representao de vetores de cadeia de caracteres, so
T
R declaradas, atravs de um ponteiro, e este ponteiro realiza a funo de alocar de forma dinmica
U
T cada elemento da cadeia de caracteres. Com este processo, o espao da memria otimizado
U
R e dessa forma reduzido, pois quando a quantidade de alunos for menor do que o declarado, a
A
dimenso mxima da cadeia de vetor no utilizada, lembrando que cada elemento do vetor
D
E da cadeia de caracteres um ponteiro. No caso de existir a necessidade de armazenar algum
D nome de aluno na cadeia de caracteres, ser prontamente alocado um espao na memria
A
D do vetor.
O
S
UNIDADE 2 TPICO 1 89
Vamos analisar como a funo para capturar os nomes dos alunos preenche o vetor
de nomes e pode ter como valor de retorno o nmero de nomes lidos:
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
FONTE: Celes e Rangel (2008) M
A
A funo para liberar os nomes alocados na tabela pode ser implementada por: O
E
S
T
R
U
T
U
R
A
D
E
D
FONTE: Celes e Rangel (2008) A
D
O
S
90 TPICO 1 UNIDADE 2
Uma funo para imprimir os nomes dos alunos pode ser dada por:
L
I
N FONTE: Celes e Rangel (2008)
G
U
A
G
E
N
S
P
R Leite (2006, p. 103) apresenta o vetor que possui apenas uma dimenso; como se
O
G seus elementos (notas mensais) pudessem ser expostos sobre uma linha. Na realidade pode
R
A ser considerada como uma lista ordenada de elementos que so do mesmo tipo de dado,
M
A sempre iniciando pela sequncia de um primeiro elemento, depois pelo segundo e assim
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 1 91
FIGURA 39 VETORES
L
FIGURA 40 VETORES UNIDIMENSIONAIS I
N
G
U
A
G
E
N
S
D
E
P
FONTE: Lorenzi e Lopes (2000) R
O
G
R
Observando que a cada posio apresentada, na figura anterior, deste vetor de Notas, A
M
podem receber valores, no entanto, apenas valores pr-definidos para cada tipo de vetor. Outro A
fator interessante cada posio do vetor, ou cada elemento do vetor pode ser acessado
O
atravs de um ndice, tambm desenvolvido para estes elementos do vetor. Conforme Lorenzi
E
e Lopes (2000, p. 52), um vetor pode ser declarado na seo de variveis ou na seo tipos.
E
Quando definido um tipo de vetor na declarao de tipos, ele pode ser utilizado por qualquer S
T
varivel declarada no programa, inclusive nas sub-rotinas. Vamos analisar o exemplo a seguir: R
U
T
U
R
A
D
E
D
A
D
O
S
92 TPICO 1 UNIDADE 2
L
I
N
G
U
A
G FONTE: Lorenzi e Lopes (2000)
E
N
S
Como cada tipo de vetor possui estipuladas suas predefinies para os vrios tipos de
D
E posies, este tipo pode ser manipulado, de formas diferentes dos outros tipos, como pode
P ser percebido na figura anterior, onde declarado o tamanho, as posies e os tipos de dados
R
O dos vetores. Segundo Feij, Silva e Clua (2010, p. 80), um vetor unidimensional, em Java,
G
R caracteriza um conceito que admite diversos valores, com a restrio de que todos os valores
A
M em um vetor devem ter a mesma natureza.
A
E
S 2.3.2 Leitura de vetores
T
R
U
T A leitura de um vetor pode ser feita com o emprego da estrutura de controle para...
U
R fim_para dentro da qual cada elemento lido para a memria. (LEITE 2006, p. 105).
A
D
E Vamos analisar a seguir um pseudocdigo que realiza a leitura de um vetor denominado
D Nmeros, de 15 elementos inteiros:
A
D
O
S
UNIDADE 2 TPICO 1 93
L
I
N
G
U
A
2.3.3 Escrita de vetores G
E
N
S
A escrita por sua vez recebe definies como argumentos de um apontador, isso ocorre D
E
quando o incio do espao temporrio, em que se necessita armazenar dados, como tambm
P
so declarados os espaos que estes dados temporrios necessitam. O processo de escrita dos R
O
elementos de um vetor segue o mesmo princpio da leitura. A nica diferena uma alterao G
R
a ser feita no comando, mudar de leia para escreva, dentro do lao para...fim_para. A
M
A
Vamos analisar o exemplo do pseudocdigo a seguir:
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
FONTE: Leite (2006) O
S
94 TPICO 1 UNIDADE 2
A escrita escreve sobre uma regio contnua de memria para o descritor de arquivo.
Todavia, um programa muitas vezes ir precisar escrever muitos itens de dados, cada um
residindo em uma diferente parte da memria. (MITCHELL; OLDHAM e SAMUEL 2001, p. 346).
Isso quer dizer que cada elemento possui como responsabilidade especificar ou identificar uma
regio da memria que ainda precisa ser escrita, esse processo pode ser feito declarando uma
varivel como struct iovec, se possuir a certeza do espaamento da regio que ir precisar,
caso contrrio, se o nmero de regies no for exata pode sofrer alteraes de tamanho,
possvel alocar um vetor de forma dinmica.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 1 95
RESUMO DO TPICO 1
Os caracteres podem ser definidos como dados primitivos, so encontrados na maioria dos
computadores, esto relacionados com a linguagem da mquina de um computador e essa
linguagem mquina permite a manipulao desses dados primitivos.
Uma cadeia de carcter (string) composta por uma sequncia ordenada de smbolos, letras
e nmeros, como tambm so caracteres os espaos em branco, dgitos e pontos, essa
sequncia pode ser representada pelo ltimo carcter identificado como \0, so pertencentes L
I
dessa famlia de caracteres os smbolos \n e \t. N
G
U
A
As constantes do tipo caracteres so definidas como valores que pertencem a um programa G
de computadores. Esses valores no podem ser alterados durante a execuo do programa E
N
e so chamados de constantes. S
D
E
As variveis do tipo caracteres possuem a finalidade de realizar o armazenamento de letras
P
e smbolos, que podem estar dentro de um texto. Essas variveis so do tipo inteiros e R
O
armazenam nmeros que podem ser associados aos smbolos. G
R
A
Uma cadeia de caracteres possui sua formao atravs de operaes. Essas operaes so M
A
constitudas atravs de Atribuio, Concatenao, Referncia a Subcadeias e por Casamento
de Padres. O
E
O vetor considerado uma cadeia de caracteres, este considerado como um tipo de E
S
Char, o tipo char pode representar elementos de cadeia de caracteres e ser apontado para T
ponteiros tambm do tipo Char. R
U
T
U
Vetor unidimensional definido por ser composto por uma linha ordenada de elementos e que R
A
so um tipo de dado. Para iniciar, a lista segue uma sequncia crescente, como por exemplo,
D
primeiro, segundo e terceiro elemento e assim por diante. Os vetores unidimensionais E
realizam a leitura e escrita de vetores. A leitura de vetores possui como funo realizar a D
leitura dos elementos da estrutura de dados para a memria. A escrita de vetores por sua A
D
vez possui a responsabilidade de armazenar espao na memria para dados temporrios. O
S
Os dois utilizam o comando para...fim_para de estrutura de controle.
96 TPICO 1 UNIDADE 2
IDADE
ATIV
AUTO
D
2 Strings so caracteres e possuem como funcionalidade representar os valores textuais,
E como por exemplo nome e endereos. Em uma linguagem de programao a string
P
R
compreendida por smbolos que esto codificados, e os valores de uma string
O devem ser escritos em uma sequncia lgica. Uma string pode realizar operaes
G
R com tratamentos como: pode ser escrita em ordem inversa; compara duas strings
A
M e retorna a juno das duas strings comparadas, com relao a essas operaes,
A
classifique V para as sentenas verdadeiras e F para as falsas.
O ( ) Comparao.
E ( ) Inverso.
E ( ) Concatenao.
S
T ( ) Compilao.
R
U
T
U Assinale a alternativa que apresenta a sequncia correta:
R
A a) ( ) V F F F.
D b) ( ) V V V F.
E
c) ( ) V V F V.
D
A d) ( ) F V V F.
D
O
S
UNIDADE 2
TPICO 2
1 INTRODUO
E
S
O objetivo deste tpico de estudos levar a uma compreenso sobre alguns pontos T
R
muito importantes e pertinentes aos estudos das estruturas de dados. Os estudos se daro U
T
com os seguintes temas: Variveis do tipo Heterognea; Variveis do tipo Homognea; Arranjos U
R
Unidimensionais; Arranjos Multidimensionais; Ponteiro para estruturas; Operadores; Definio A
de novos tipos; Comando Typedef; Vetores de estruturas; Vetores de ponteiros para estruturas; D
E
Tipo unio e Tipo enumerao.
D
A
D
Vamos aos estudos! O
S
98 TPICO 2 UNIDADE 2
2 TIPOS ESTRUTURADOS
Estruturar dados que so muitas vezes muito complexos exige que alguns processos
sejam realizados. Como as informaes so compostas por vrios tipos de campos, devem
ser analisados, contudo, como se processam os mecanismos que possibilitam o agrupamento
de tipos distintos. A seguir vamos conhecer mais sobre como estruturar um tipo de dado.
Segundo Edelweiss e Galante (2009, p. 36), a representao dos dados manipulados por uma
aplicao pode ser feita por diferentes estruturas de dados. Um fator que determina o papel
dessas estruturas no processo de programao de aplicaes a identificao de quo bem
as estruturas de dados coincidem com o domnio do problema a ser tratado.
Conforme Pereira (1996, p. 5), os objetivos das estruturas de dados, podem ser
identificados como terico e prtico:
P Um tipo estrutura de dados definido por conter vrios tipos de valores sua estrutura
R
O considerada muito bsica definida por ser um tipo de estrutura simples, tem como possibilidade
G
R
otimizar e dinamizar utilizao da memria de um programa de computador, disponibilizam
A
M
estruturas mais compreensveis para o desenvolvimento de programas mais complexos, isso
A
O
a maioria das linguagens de programao modernas oferecem um conjunto
E bsico de tipos de dados primitivos (inteiro, real, caracteres e lgicos) que
E
podem ser usados para soluo de problemas em geral, bem como alguns
S mecanismos que permitem criar agrupamentos complexos de dados destes
T tipos primitivos (vetor, registro, unio, ponteiro).
R
U
T
U Na linguagem de programao C, um tipo de dado tambm composto por diversos
R
A valores e estes so de tipo simples, para entender melhor pode-se dizer: para que um programa
D possa manipular dois pontos diferentes isso deve ocorrer na declarao dos pontos, como x e
E
y, em que a linguagem C realiza o agrupamento de dados. Caso no se tenha essa opo de
D
A realizar o agrupamento dos dois componentes citados, os pontos teriam que ser representados
D
O
S
UNIDADE 2 TPICO 2 99
em duas variveis independentes. Vamos analisar no exemplo a seguir essa afirmao dos
dois pontos de forma agrupada:
struct ponto {
float x;
float y;
};
Neste exemplo demonstrado como realizado o agrupamento dos dados, dos dois
pontos x e y, os dois pontos so considerados como um tipo de varivel simples. Aps esse
agrupamento possvel acessar os valores pertencentes aos dois pontos declarados na
varivel, como tambm possvel acessar todos seus dados, como nome e endereos, entre
outros dados.
Um tipo de dado definido por ser um conjunto de valores e formado por um conjunto de
operaes. Os dados podem ser nmeros inteiros e esto presentes em vrias linguagens de
programao. Esses valores de tipo de dado que so nmeros inteiros podem ser representados
pelos seguintes nmeros, -2, -1, 0, 1, 2 e assim consequentemente. J os dados do tipo
L
operaes podem ser apresentados como uma sequncia muito grande de valores, mas as I
N
mais comuns so soma, diviso, multiplicao, subtrao entre outras operaes, que podem G
U
ser vrios tipos. A
G
E
N
Resumidamente, um tipo estruturado de dados possui como finalidade permitir que S
dados complexos sejam estruturados, com objetivo de compor todos os pontos, declarar seus D
E
valores e suas variveis, isso para diversos campos da estrutura. Como mencionado no exemplo
P
dos pontos, anteriormente, o tipo estrutura realiza o agrupamento de diversas variveis dentro R
O
de uma nica estrutura. Analise a seguir um exemplo de uma declarao de uma varivel do G
R
tipo ponto: A
M
A
struct ponto p;
p. x = 10.0; O
p. y = 5.0; E
E
S
T
Os elementos podem ser acessados atravs do operador de acesso ponto ( . ), onde: R
U
/* declara o ponto do tipo struct */; T
U
/* declara o p como sendo uma varivel do tipo struct ponto */; R
A
/* este acessa os elementos de ponto */;
D
E
Um tipo de dado consiste da definio do conjunto de valores (denominado domnio) que uma
varivel pode assumir ao longo da execuo de um programa e do conjunto de operaes
que podem ser aplicados sobre ele.
Os tipos de dados estruturados permitem agregar mais do que um valor em uma varivel,
existindo uma relao estrutural entre seus elementos. Os principais tipos de dados
estruturados fornecidos pelas linguagens de programao so: arranjos, registros, sequncias
e conjuntos.
Ainda conforme Edelweiss e Galante (2009, p. 36), existem os tipos de dados bsicos
e os tipos de dados definidos pelo usurio, vamos analisar os dois tipos a seguir:
L
I
N
G
U 2.1.1 Variveis do tipo heterognea
A
G
E
N
S
Variveis do tipo heterognea so do tipo estruturado, so definidas por serem elementos
de tipos diferentes, os elementos que so do tipo estrutura de dados so heterogneos, este
D
E conjunto de elementos que no so do mesmo tipo de dados, podem ser conhecidos como um
P registro. Vamos analisar o seguinte exemplo: uma pessoa precisa comprar uma passagem de
R
O nibus e precisa saber algumas informaes referente: qual ser o nmero da passagem, origem
G
R e destino, data, horrio de sada e chegada, nmero da poltrona, idade do viajante e nome
A
M do passageiro. Berg e Figueir (2006, p. 149), apresentam as variveis do tipo heterogneas
A
so um conjunto de dados, onde os elementos no so do mesmo tipo de dados. Segundo
O Aguilar (2011, p. 246), um registro uma estrutura de dados heterognea, o que significa que
E cada um de seus componentes pode ser de tipos de dados diferentes. Consequentemente um
E arranjo de registros uma estrutura de dados cujos elementos so do mesmo tipo heterogneo.
S
T
R
U Podemos considerar cada um desses dados como Campos, os dados so os seguintes:
T
U nmero de passagem um dado (inteiro), origem e destino so (caracteres), data e horrio
R
A so (caracteres), nmero da poltrona e idade so do tipo (inteiro) e por ltimo o nome do
D passageiro um dado (carcter).
E
D
A
D
O
S
UNIDADE 2 TPICO 2 101
D
Como o exemplo a seguir: E
P
Notas: 6,0 5,0 4,5 9,0 10 7,0 2,0 8,0 3.5 R
O
Posio: 0 1 2 3 4 5 6 7 8 G
R
A
M
Pode ser percebido que a posio o ndice e as notas so os elementos que so A
individuais, para cada aluno, mas na estrutura de dados cada elemento est inserido em um
O
ndice, at mesmo para que o programa esteja organizado e que se tenha facilidade em uma
E
determinada busca de dados ou de elementos.
E
S
T
R
U
T
U
R
2.1.3 Arranjos unidimensionais A
D
E
Os arranjos unidimensionais so definidos por serem utilizados para armazenar vrios D
A
conjuntos de dados, em que esses dados so elementos que esto diretamente endereados D
O
para um nico ndice de elementos. Os arranjos unidimensionais tambm so conhecidos S
102 TPICO 2 UNIDADE 2
como vetores. Edelweiss e Galante (2014, p. 165) dizem um vetor um arranjo de uma s
dimenso que, portanto, necessita um s ndice para acessar seus elementos.
As caractersticas de um vetor so:
Este arranjo possui como finalidade armazenar elementos de dados em uma memria de
computador, no entanto, esses elementos so armazenados de forma organizada, seguindo um
armazenamento em sequncia crescente, onde um elemento organizado e armazenado aps
o outro. Conforme Edelweiss e Galante (2014, p. 165), os arranjos podem ser unidimensionais
(de uma s dimenso), quando precisam de um s ndice para identificar seus elementos, os
arranjos de uma nica dimenso tambm so chamados de vetores.
E
S
T Podemos perceber que os valores correspondem aos dados de altura das 5 pessoas,
R
U so contedos lidos do usurio. No item ndices apresentada a ordem crescente de forma
T
U organizada, como os valores esto armazenados e como podem ser acessados e manipulados
R
A pelo ndice.
D
E
Para otimizar e solucionar problemas de clculos de razes, vrios mtodos numricos
D
A diretos esto disponveis para auxiliar arranjos unidimensionais, Chapra (2012), apresenta
D
O como os problemas unidimensionais envolvem funes que dependem de uma nica varivel
S
UNIDADE 2 TPICO 2 103
D
UNI E
P
R
VOC SABIA QUE: O
Os arranjos em Java so unidimensionais: usa-se um G
nico ndice para acessar cada clula do arranjo. Apesar disso, R
A
existe uma maneira de definir arranjos de duas dimenses M
em Java pode-se criar um arranjo de duas dimenses como A
um arranjo de arranjos. Isto , pode-se definir um arranjo
bidimensional como sendo um arranjo em que cada uma de suas O
clulas outro arranjo. Tal arranjo bidimensional por vezes
chamado de matriz. (GOODRICH e TAMASSIA, 2002, p. 116). E
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
104 TPICO 2 UNIDADE 2
As matrizes podem ter duas ou mais dimenses, embora a grande maioria dos
problemas no envolva mais do que trs ou quatro. O nmero de dimenses de
uma matriz dever ser definido em funo das necessidades do problema que
est sendo analisado e das limitaes eventuais da linguagem em uso. Isso
porque, embora teoricamente no exista limitao para o nmero de dimen-
ses de uma matriz, uma implementao particular de uma linguagem pode
definir um limite para esse nmero. (EDELWEISS e GALANTE 2014, p. 165).
Uma caracterstica muito interessante deste arranjo e que seus dados podem
ser agrupados em diferentes direes, como sua varivel possui um nico nome denominado
L para o conjunto de dados, precisa-se realizar a diferenciao de um elemento do outro, esse
I
N procedimento pode ser realizado atravs de um ndice que seja associado ao conjunto de
G
U dados desses elementos.
A
G
E
N
S FIGURA 46 ARRANJOS MULTIDIMENSIONAI
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U FONTE: A autora
R
A
Segundo o referido autor, do mesmo modo como uma trilha real no se limita a andar
em uma nica direo; em vez disso, a topografia deve ser examinada a fim de se alcanar a
meta de forma eficiente. Vamos analisar a seguir o exemplo da otimizao multidimensional:
L
I
N
G
U
A
G
E
N
S
FONTE: Chapa (2012)
D
E
Como j mencionado anteriormente, para solucionar problemas de funes a lgica P
segue a mesma do arranjo unidimensional. O arranjo multidimensional realiza o mesmo R
O
processo de otimizao oscilando entre picos, subindo e descendo, maximizando a eficincia G
R
dos arranjos e minimizando os problemas das funes. Chapra deixa claro, na figura anterior, A
M
como pode ser observada a otimizao e demonstra como pode ser utilizada para representar A
a maximizao (os contornos aumentam em elevao at o mximo, como em uma montanha)
O
ou a minimizao (os contornos decrescem em elevao at o mnimo, como em um vale).
E
E
S
T
R
U
T
2. 2 PONTEIRO PARA ESTRUTURAS U
R
A
D
Ponteiros so definidos como variveis e possuem a responsabilidade de armazenar E
endereos na memria de um programa de computador. Ao realizar o processo de D
A
armazenamento de endereos na memria do programa possvel que sejam includos valores, D
O
bem como, tambm, podem ser utilizados. No entanto esse processo no apenas armazenar S
106 TPICO 2 UNIDADE 2
ou gravar um endereo na memria, para que isso ocorra existe a necessidade de se fazer a
declarao de um ponteiro, para que realize este armazenamento do endereo. Brookshear
(2013, p. 313) apresenta:
O ponteiro, tambm conhecido como apontador, e definido por ser uma varivel
que possui como uma de suas principais finalidades armazenar endereo na memria de um
programa, tendo como caractersticas em suas essenciais funcionalidades apontar e acessar
a posio, o endereo que a varivel est armazenada, apontar para as variveis que esto
alocadas e declaradas, sua associao sempre em relao ao tipo da varivel que se est
apontando.
L
I
Para que dados e informaes possam sem encontrados em uma lista enorme de dados,
N
G
possvel, segundo Brookshear (2013, p. 313),
U
A
G reservar uma clula de memria adicional, dentro de cada bloco de clulas
E como ponteiros, onde esses ponteiros sero apontados para outros blocos,
N estes representam um livro do mesmo autor. Com isso os livros com os mesmos
S
autores, mas com temas diferentes em comum podem tornar-se interligados
D com setas de identificao.
E
P
R Vamos analisar a figura a seguir, que representa esta funcionalidade do ponteiro.
O
G
R
A
M FIGURA 48 PONTEIROS INTERLIGADOS
A
E
S
T
R
U
T
U
R
A
D
E FONTE: Brookshear (2013)
D
A
D O ponteiro pode apontar para uma estrutura. Pode-se declarar um ponteiro para uma
O
S estrutura tal como se declara um ponteiro para qualquer outro objeto. Declara-se um ponteiro:
UNIDADE 2 TPICO 2 107
Uma caracterstica muito interessante que deve ser observada ao realizar a declarao
de um ponteiro : precisa-se especificar para qual localizao e qual tipo de varivel que este
ponteiro ser apontado. Geralmente, os ponteiros so declarados atravs do seguinte operador
( * ), utilizado antes do nome da varivel ao qual dever ser apontado. Podemos citar como
exemplo deste comando de declarao de ponteiro:
Tipo *nomeVariavel;
Outro exemplo:
Int *aux; L
I
Float *temp; N
Char *pont; G
U
A
G
E
N
Essas variveis, como aux, temp e pont, realizam o procedimento de armazenar os S
endereos na memria do programa, pois esto utilizando o operador ( * ) para apontar para D
E
a varivel. Vamos analisar a figura a seguir que trata essas variveis:
P
R
FIGURA 49 PONTEIROS O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
Fonte: Almeida (2013)
D
A
D
Analisando a figura possvel verificar que as variveis do tipo aux, temp e pont, realizam O
S
108 TPICO 2 UNIDADE 2
2.2.1 Operadores
L
I
N O significado de um operador uma operao que realiza e tipo de resultado
G
U depende dos tipos dos seus operandos. At que se conhea o tipo de operando(s), no se
A
G pode conhecer o significado da expresso. (AGUILAR 2008, p. 12). Os ponteiros possuem os
E
N seguintes operadores utilizados para realizar a declarao das variveis, so: ( * , & e Null). O
S
operador ( * ) possui como finalidade apontar a varivel para um ponteiro, bem como realizar
D
E
a recuperao de contedo das variveis declaradas. O operador ( & ) tem a funcionalidade
P
de indicar que um ponteiro poder apenas receber endereos de memria, esta sua nica
R
O
e principal funo para um operador. O operador Nulo (Null) possui como funcionalidade
G receber valores dele mesmo, valores nulos, no entanto, esses valores no sero apontados
R
A para nenhuma varivel na memria.
M
A
D A seguir a figura demonstra esses dois operadores, que possuem grande importncia
A
D para a definio dos ponteiros e para a declarao das variveis:
O
S
UNIDADE 2 TPICO 2 109
D
E
Um operador nada mais do que expresses, caracteres e vrios jarges da linguagem
P
de programao, que so considerados como valores e podem ser utilizados para realizar a R
O
alimentao dos operadores. Podemos encontrar vrios tipos de operadores e cada um possui G
R
sua finalidade e especificidade. A seguir vamos listar cada um desses operadores, para que A
M
tenha uma noo de quais so eles: A
Operadores Aritmticos.
O
Operadores Bit a Bit.
E
Operadores de Comparao.
E
Operadores de Controle de erro. S
T
Operadores de Execuo. R
U
Operadores de Incremento/Decremento. T
U
Operadores Lgicos. R
A
Operadores de String.
D
Operadores de Arrays. E
Operadores de Tipo. D
A
D
O
S
110 TPICO 2 UNIDADE 2
UNI
Acesse o Link a seguir e saiba mais sobre cada um desses
operadores: <http://php.net/manual/pt_BR/language.operators.
php>.
L
I
Um benefcio dos objetos que eles oferecem ao programador uma forma conveniente
N de construir novos tipos de dados. Suponha que voc necessite trabalhar com coordenadas
G
U x e y (par de quantidades numricas independentes) no seu programa. Seria interessante
A
G expressar operaes sobre esses valores simplesmente usando operaes aritmticas
E
N normais, como:
S
P
R Onde essas variveis posio1, posio2 e origem representam as coordenadas.
O
G
R FONTE: Filho (2011, p. 11)
A
M
A
precisa ser alocado espao na memria do programa. Aps realizar o procedimento de declarar
um novo tipo de dado, podem ser criadas novas variveis, que sirvam para armazenar valores
e conjuntos de dados.
Como o objetivo da estrutura agrupar vrios tipos de variveis em uma nica varivel,
esse processo possibilita otimizar toda a estrutura de dados existente. Vamos analisar na figura
a seguir o procedimento para se criar uma estrutura utilizando o comando Struct:
L
I
N
G
U
A
G
E
N
S
D
E
P
R
FONTE: Melo (2014) O
G
R
Vamos analisar nas figuras a seguir como so definidos os novos tipos de dados: A
M
A
FIGURA 52 DEFININDO OS NOVOS TIPOS DE DADOS
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
D
e pode ser utilizado para criar variveis que so denominadas como similares, como tipos de
E variveis do tipo simples.
P
R
O
G
R
A
M
A 2.3.1 Comando typedef
FONTE: A autora
possvel utilizar vetores de ponteiros para que seja possvel tratar vrios conjuntos
de elementos e estes possuem como especificidade serem complexos, lembrando que vetores
so considerados uma sequncia de valores e estes valores so do mesmo tipo de dado, como
so alocados e armazenados em uma sequncia organizada na memria do programa.
P
R
O
G
R
A
M
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 2 115
D
E
P
R
O
G
R
A
M
A
O
E
S
T
FONTE: Lima (2014) R
U
T
U
Esses exemplos apresentam a necessidade de definir o nmero mximo de alunos R
A
para o vetor, esse procedimento auxilia para se saber e at mesmo para alocar o espao
D
necessrio na memria desses dados no vetor, para que a memria seja utilizada de forma E
dinmica e eficiente. D
A
D
O
S
116 TPICO 2 UNIDADE 2
Podemos afirmar que os vetores de ponteiros para estruturas possuem vrias funes,
alm de alocar memria para um vetor, vamos apresentar a seguir algumas funes que fazem
parte dos vetores de ponteiros, como:
Funo Inicializa.
Funo Preenche.
Funo Retira.
Funo Imprime.
D
E
P
R
O
G
R
A FONTE: Lima (2014)
M
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 2 117
D
E
P
R
O
G
R
A
M
A
O
E
S
FONTE: Lima (2014) T
R
U
E por ltimo, mas no menos importante, a Funo Imprime possui como principal T
U
funo imprimir os dados de um aluno que est alocado na tabela, onde a funo recebe qual R
A
a posio do aluno na tabela e depois realiza a impresso dos dados desse aluno. A seguir
D
vamos analisar o exemplo desta funo: E
D
A
D
O
S
118 TPICO 2 UNIDADE 2
P
R
O
G
R
A
M
A
E
S
T
R
FONTE: Lima (2014)
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2 TPICO 2 119
union exemplo {
int i ;
char c ;
L
} I
N
G
U
A declarao de uma varivel do tipo de estrutura Unio pode ser declarada com o A
G
seguinte comando: E
N
S
D
union exemplo v ; E
P
R
Observando que esta estrutura de cdigo no possui a funo de declarar as variveis O
G
da estrutura e dados, mas sim possui a funo de definir o tipo de estrutura de unio. R
A
M
A
FIGURA 63 FUNO UNIO
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
FONTE: Garcia (2010) S
120 TPICO 2 UNIDADE 2
Segundo Aguilar (2011, p. 298), as unies declaradas com a palavra reservada union
armazenam tambm membros mltiplos em um pacote; no obstante, em vez de localizar seus
membros um trs do outro em uma unio.
L
I
N
#define FALSE 0
G #define TRUE 1
U
A typedef int Bool;
G
E /* pode armazenar qualquer inteiro*/
N
S
D
E Com relao ao exemplo anterior pode ser percebido que com as definies de FALSE
P e TRUE, possvel utilizar esses smbolos no cdigo do programa, que tornam mais claro
R
O o processo de armazenar os nmeros inteiros, observando que o tipo booleano pode ser
G
R equivalente a qualquer nmero, no apenas FALSE e TRUE.
A
M
A
Vamos analisar o exemplo a seguir, com relao criao de um tipo booleano, utilizando
D
E
D
A
FONTE: Garcia (2010)
D
O
S
UNIDADE 2 TPICO 2 121
LEITURA COMPLEMENTAR
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
FONTE: PINHEIRO, Francisco A. C. Elementos de Programao em C. Porto Alegre: Ed. E
Bookman, 2012
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
122 TPICO 2 UNIDADE 2
RESUMO DO TPICO 2
O tipo de estrutura formado por vrios tipos de valores, sua estrutura definida como um
tipo simples, com isso objetiva otimizar e dinamizar espaos na memria de um programa
de computador. Ao realizar a codificao de dados, a estrutura torna compreensvel o
desenvolvimento de programas que so considerados mais complexos.
E
S Vetores de ponteiros para estruturas so utilizados para tratar vrios tipos de conjunto de
T
R elementos, principalmente conjunto de elementos que possuem sua estrutura muito complexa
U
T de ser especificada.
U
R
A
Funes de vetores de ponteiros para estruturas possuem como funcionalidade alocar
D
E memria de um vetor para uma estrutura de ponteiros, realiza outros processos como: funo
D inicializa, funo preenche, funo retira, funo imprime.
A
D
O
S Tipo de estrutura de unio realiza o armazenamento de valores e estes so considerados
UNIDADE 2 TPICO 2 123
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
124 TPICO 2 UNIDADE 2
IDADE
ATIV
AUTO
( ) Arranjos e Operador.
( ) Terico e Prtico.
( ) Unio e Enumerao.
( ) Ponteiros e Vetores.
D
( ) Tipo de dados Vetores e Definido pelo Arranjo.
E ( ) Tipo de dados Bsico e Definido pelo Usurio.
P
R
( ) Tipo de dado Booleano e Definido por Variveis.
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 2
TPICO 3
MATRIZES
1 INTRODUO
Uma matriz definida por ser uma estrutura de dados que possui a funcionalidade de
armazenar vrios conjuntos de elementos. O armazenamento, como o acesso aos dados,
realizado de forma organizada e sequencial. Os elementos podem ser acessados seguindo um
L
ndice. O ndice organizado atravs das linhas e colunas pertencentes matriz e sua estrutura I
N
de dados. As matrizes podem ser entendidas como matrizes dimensionais, bidimensionais e G
U
multidimensionais, so formadas por vrias dimenses. A
G
E
N
Neste tpico de estudos veremos as matrizes. Sero abordados os seguintes contedos S
que definem a estrutura e os tipos de matrizes: Matrizes Especiais; Vetores bidimensionais D
E
Matrizes; Matrizes dinmicas; Representao de matrizes e Representao de matrizes
simtricas. P
R
O
G
Os tipos abstratos de dados possuem como finalidade agrupar toda a estrutura de dados, R
A
isso em conjunto com as operaes, consequentemente, realiza o processo de encapsular M
A
a estrutura de dados, toda a implementao da estrutura especfica dos tipos abstratos
de dados. O processo de abstrao dos dados ocorre atravs das classes structs, objetos, O
E
S
Seguindo com os estudos dessa unidade de estudos, daremos nfase tambm T
R
descrio dos conceitos dos tipos abstratos de dados, utilizando: os tipos de dados abstratos; U
T
ponto e tipo de dado abstrato; matriz. U
R
A
D
E
D
A
D
O
S
126 TPICO 3 UNIDADE 2
2 MATRIZES
E
Uma das caractersticas de declarao de uma matriz que ela precisa realizar alguns
E
S processos como, informar o tipo de dados que ser armazenado, informar a quantidade de
T
R clulas, linhas e colunas que sero disponibilizadas para o arranjo. A matriz possui dimenses
U
T de linhas e colunas que devem ser especificadas e ter uma delimitao, isso pode ser feito
U
R utilizando o delimitador [ ], aps o nome referido da matriz, so reconhecidos como tipos de
A
dados para a matriz os seguintes valores: int, float, double, char, bool, string. Para realizar a
D
E
declarao de uma matriz pode ser utilizada a seguinte sintaxe:
Como foi mencionado anteriormente, a matriz composta por dois tipos, matriz
unidimensional e matriz multidimensional. Sobre a matriz unidimensional podemos afirmar
que o modelo da figura acima, composta apenas por uma nica dimenso, em que os
dados e nmeros so organizados de forma contnua. Conforme Aguilar (2011, p. 237), so
denominados arrays (matriz) unidimensionais e nelas cada elemento definido ou feita
referncia por um ndice ou subndice. Esses vetores so elementos de dados escritos em
uma sequncia.
L
I
A matriz multidimensional formada por duas ou mais dimenses, como por exemplo N
G
uma tabela contendo linhas e colunas. Aguilar (2011, p. 240) apresenta um array (matriz), que U
A
pode ser definido em trs dimenses, quatro e at em n dimenses. Em geral, um array de n G
E
dimenses requer que os valores dos n subndices possam ser especificados para se identificar N
S
um elemento individual do array.
D
E
Java no suporta criar arrays unidimensionais cujos elementos tambm sejam arrays P
R
unidimensionais, por isso arrays de arrays. Eles costumam ser usados para representar tabelas O
G
de valores, que consistem em informaes dispostas em linhas e colunas. (SERSON 2007, R
A
p. 166), Nos dois formatos, a matriz se comporta da mesma forma em que os dados so M
A
armazenados e consultados de maneira contnua na memria do programa. Vamos analisar a
seguir um exemplo de uma matriz multidimensional: O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
128 TPICO 3 UNIDADE 2
L
I
N 2.1 MATRIZES ESPECIAIS
G
U
A
G
E Podemos considerar que uma matriz especial quando na sua maioria seus elementos
N
S so iguais a zero ou considerados um valor constante. Ateno muito especial se d neste
D modelo de matriz, pois existe um desperdcio de espao na alocao da memria, devido aos
E
elementos possurem o mesmo valor. Para que esse processo seja evitado, existe a necessidade
P
R de serem apresentados apenas valores que so considerados representativos e significativos
O
G
para a matriz, como valores que sejam diferentes de zero e valores constantes.
R
A
M
A
VELOSO; SANTOS; AZEREDO e FURTADO (1983) apresentam as matrizes especiais
L
I
N
FONTE: Adaptado de: Neto (2014) G
U
A
Observe a tabela anterior, onde o peso [ 3 ], representa as linhas da tabela e o segundo G
E
peso est representando [ 5 ] as colunas pertencentes da tabela. Analisando que o peso [ 3 ] N
S
composto por valores de zero at o nmero 2 e o peso [ 5 ] composto por valores de zero ao
D
nmero 4, sabendo a composio e as limitaes desses dois pesos, podemos a partir dessa E
premissa determinar os ndices de cada posio dos valores na matriz. No exemplo a seguir P
R
vamos representar a tabela contendo os valores: O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
130 TPICO 3 UNIDADE 2
Agora que temos os valores para cada peso e para os ndices, seguindo a metodologia
dos vetores bidimensionais, podemos analisar a tabela anterior da seguinte forma:
L
I
N TABELA 11: VALORES E PESOS DE VETORES BIDIMENSIONAIS.
G
U pesos[1][3] = 82
A
G pesos[0][4] = 36
E
N pesos[0][0] = 10
S
Peso [2][4] = 74
D
E FONTE: Adaptado de: Neto (2014)
P
R FIGURA 66 RESULTADO DOS VALORES E PESOS
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S FONTE: A autora
UNIDADE 2 TPICO 3 131
Vamos analisar a seguir como pode ser representado o comando da matriz bidimensionais
desses valores e pesos, que esto expostos no exemplo da figura 63.
Para preencher nossa matriz com os valores mostrados na tabela anterior podemos usar
uma declarao como:
int main()
{
int pesos [3] [5] = {{10, 30, 45, 70, 36},
L
{86, 44, 63, 82, 80}, I
N
{70, 61, 52, 63, 74}}; G
U
A
G
int linha,coluna; E
N
S
for (linha = 0; linha < 3; linha++) D
E
for (coluna = 0; coluna < 5; coluna++)
P
printf ("elemento [%d] [%d] = %d\n" , linha, coluna, pesos [linha] [coluna]); R
return (0); O
G
} R
A
M
FONTE: Neto (2014) A
O
Feij, Silva e Clua (2010) colocam que a manipulao de matrizes bidimensionais exige
E
o controle cuidadoso das variveis de ndices, para que seja possvel apontar exatamente para
E
cada valor desejado. S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
132 TPICO 3 UNIDADE 2
As matrizes dinmicas exigem que sejam criadas abstraes conceituais com vetores
e assim representar de forma bidimensional os conjuntos dessa estrutura e representar quais
matrizes esto alocadas dinamicamente. A matriz dinmica representada por vetores do tipo
simples, tambm representada por vetores do tipo unidimensional. A matriz dinmica possui
como finalidade armazenar elementos do vetor na primeira linha da matriz. Cria abstraes
conceituais com os vetores, para que possam ser representadas as matrizes que esto alocadas
dinamicamente. Rita (2009, p. 62), coloca que uma matriz poder ser formada de uma nica
linha (unidimensional) ou com mais de uma linha e colunas; nesse caso, ser tridimensional.
A matriz dinmica possui seu conjunto bidimensional que representado por um vetor
unidimensional. Para realizar o acesso aos seus elementos precisa-se acessar utilizando algumas
regras e procedimentos. Com relao ao acesso dos elementos que esto armazenados isso
ocorre em uma sequncia contnua. O primeiro acesso na primeira linha, depois o acesso
aos elementos da segunda linha e assim consequentemente. Ainda segunda Rita (2009, p.
L 62), h matrizes retangulares e quadradas. Quando o nmero de linhas diferente do nmero
I
N
de colunas, uma matriz considerada como uma matriz retangular. Caso o nmero de linhas
G
U
e colunas seja idntico, a matriz quadrada.
A
G
E
N FIGURA 67 MATRIZ DINMICA
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E FONTE: Cruz (1999)
D
A
D A matriz dinmica possui algumas limitaes que podem ser observadas como, sua
O
S
UNIDADE 2 TPICO 3 133
alocao esttica, suas dimenses devem ser analisadas antes de utilizar, armazenar e
acessar seus elementos, a alocao realizada diretamente na matriz, para que seja alocada de
forma dinmica se dar apenas para conjuntos de elementos unidimensionais, a representao
das matrizes alocadas dinamicamente ocorre atravs de abstraes conceituais e vetores que
realizam o papel de alocao. Rita (2009, p. 63) afirma que podemos declarar uma matriz com
tamanho fixo ou uma onde seu tamanho possa ser alterado durante a execuo do programa,
nesse caso, ela ser considerada uma matriz dinmica.
A declarao de uma matriz dinmica pode ser feita de modo em que as dimenses
da matriz possam sofrer alteraes, elas so aumentadas ou diminudas, isso pode ocorrer
ainda enquanto a macro da matriz for executada. Um problema que pode ocorrer quando
estiver realizando a declarao da matriz dinmica, onde os contedos podem ser pedidos ao
redimensionar a matriz. Para realizar a declarao de uma matriz dinmica, pode ser utilizado
o seguinte comando:
Para criar uma matriz dinmica com tamanho varivel, de forma esttica, pode-se utilizar L
I
n dimenses de forma simples, vamos analisar a seguir um exemplo de como dimensionar N
G
essa matriz, ser utilizado o seguinte comando: U
A
G
E
int array [ 5 ] [ 10 ] [ 20 ]; N
S
D
E
Para que a matriz se torne dinmica, preciso criar um ponteiro para esse tipo de dados
P
que vai ser utilizado na matriz, nesse dado deve conter a mesma quantidade de indirees que R
O
as dimenses da matriz, para isso vamos utilizar uma matriz bidimensional de valores inteiros G
R
e posterior a isso deve-se criar um ponteiro que esteja apontado para outro ponteiro. Vamos A
M
analisar o exemplo a seguir, de como seria a criao dessa matriz dinmica: A
O
int * *array;
E
E
S
Posterior a isso precisa-se alocar os ponteiros das linhas e depois alocar cada linha T
R
da matriz. Vamos analisar o exemplo a seguir de como seriam os comandos para alocar os U
ponteiros das linhas: T
U
R
A
array = (int **)maloc(sizeof(int *) * 10);
D
for(c = 0; c < 10; c++) E
com algum ngulo ou algo do tipo. Sempre se deve observar que as matrizes servem para
O representar dados das dimenses da matriz e como essas dimenses esto ordenadas e
E organizadas, pode ser utilizada para vrios tipos de operaes, seja para clculos de adio,
E multiplicao e inverso.
S
T
R
U Para representar um tipo de matriz, pode ser escolhido um conjunto de operaes que
T
U pode ser implementado sobre o tipo de matriz escolhido, utilizando esses clculos anteriormente
R
A citados, como adio, multiplicao e a inverso das matrizes. Para que isso ocorra vamos
D utilizar a implementao das seguintes operaes bsicas da matriz, como:
E
D
A
D
O
S
UNIDADE 2 TPICO 3 135
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
FONTE: Fontes (2009)
E
Para representar um grafo por uma matriz de adjacncia, utiliza-se uma matriz E
quadrada booleana M(1..N, 1..N), onde N indica o nmero de vrtices do grafo S
a ser representado, sendo preenchido com valores verdade ( v ) sempre que T
R
um vrtice j adjacente a um vrtice i, i e j variando de 1 a n, com notao U
M(i, j) = v. M(i, j) = falso (f) quando um vrtice j no adjacente a um vrtice i. T
U
Para matrizes onde N grande, essa representao deve ser evitada, devido R
ao desperdcio de memria. (LOPES 1997, p. 429). A
D
A lista da matriz de incidncia formada por uma tabela, em que sua funcionalidade E
listar todos os vrtices V, como tambm listar todas as arestas incidentes em V. Essa matriz D
A
de incidncia geralmente composta, em sua maior parte, por valores em zero. A matriz de D
O
incidncia possui como vantagem a possibilidade de representar todos os grafos gerais da S
136 TPICO 3 UNIDADE 2
matriz. Tambm pode ser construda uma representao mais eficiente em relao ao uso
eficiente do espao da memria. A matriz incidncia est em desvantagem nas representaes,
pois suas funcionalidades precisam rotular todas as arestas existentes do grafo. Perceba:
L
I
N
G
U FONTE: Arenales; et al. (2011)
A
G
E
N A matriz adjacncia possui a finalidade de representar atravs de grafos simples suas
S
listas, com isso as representaes se tornam mais eficientes, constituda em sua grande parte
D
E
por suas adjacncias por valores zero. A matriz adjacncia de um grafo G = (V, A), formada
P
por n vrtices, como se pode afirmar que uma matriz n x n contendo n bits, em que A[i, j]
R
O
1 (ou verdadeiro) possui um arco do vrtice i apontado para o vrtice j. A existncia de grafos
G A[i, j], onde esses possuem o rtulo ou peso que est associado com a aresta e, com isso se
R
A pode afirmar que a matriz no formada por bits. Acaso ocorra de no possuir uma aresta de i
M
A para j existe a necessidade de utilizar um valor que no possa ser usado como rtulo ou peso.
E
Lipson e Lipschutz (1997, p. 205), afirma que quaisquer duas matizes de adjacncia
E
S esto intimamente relacionados, podendo uma ser obtida a partir da outra pela simples troca
T
R de posio de linhas e colunas, no entanto, LIPSON e LIPSCHUTZ (1997, p. 171) diz que:
U
T
U a matriz de adjacncia A de um grafo G depende da ordenao dos vrtices
R
A de G, isto , uma ordem diferente dos vrtices conduz a uma matriz de adja-
cncia diferente. Porm, duas matrizes de adjacncia do mesmo grafo esto
D
E
fortemente relacionadas entre si, de modo que uma pode ser obtida a partir
da outra, simplesmente permutadas as linhas e colunas. Por outro lado, a
D matriz de adjacncia no depende da ordem na qual as arestas so inseridas
A
D
no computador.
O
S
UNIDADE 2 TPICO 3 137
UNI D
E
E
S
O significado de matriz simtrica, seguindo conceitos de matemtica, esse resultado T
R
vem da matriz transposta, em que essa matriz o resultado da troca de linhas por colunas, U
T
isso pode ocorrer em uma determinada matriz, por isso toda matriz simtrica chamada desta U
R
forma por ser igual a sua matriz transposta. A
D
E
Para entendermos melhor o que significa a matriz simtrica, vamos analisar a definio
D
desta matriz. A
D
O
S
138 TPICO 3 UNIDADE 2
Outra forma para enunciar esta definio fazendo as igualdades dos elementos
da matriz. Dizemos que uma matriz simtrica quando,
L
I
N
G
U
A
G
E
N
S Vejamos um exemplo geral, com elementos quaisquer, simtricos.
D
E
P
R
O
G
R
A
M
A
Voc parou para pensar por que uma matriz simtrica uma matriz quadrada?
O Faamos a seguinte reflexo: o que devemos fazer para obter a matriz transposta de
E uma determinada matriz?
E Devemos inverter as linhas com as colunas, ou seja, uma matriz:
S
T
R
U
T
U
R
A
Veja que trocamos a quantidade de linhas pela quantidade de colunas. Para que
D
E uma matriz seja simtrica devemos ter a igualdade desta matriz com a sua transposta.
D
A
D
O
S
UNIDADE 2 TPICO 3 139
Isto s ser possvel caso, m = n, e quando isso ocorre dizemos que a matriz quadrada.
A matriz transposta formada pela base de uma matriz A, seguindo a ordem m x n, com
isso teremos uma matriz transposta, indicando diretamente para At, em que sero invertidas as
posies de m e n, isso significa que ser n x m, vamos analisar como sero expostos esses
valores:
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
FONTE: S (2014) O
E
Analisando o exemplo anterior podemos perceber que a primeira linha de A tornou-se a
E
primeira coluna de At; a segunda linha de A tornou-se a segunda coluna de At; a terceira linha S
T
de A tornou-se a terceira coluna de At. Vamos analisar no exemplo a seguir como fica a linha R
U
e coluna de B: T
U
R
A
D
E
D
A
D
O
S
140 TPICO 3 UNIDADE 2
FONTE: S (2014)
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
FONTE: S (2014)
T
U
R
A
Agora que conseguimos observar como so dispostos os elementos da matriz simtrica,
vamos analisar no exemplo a seguir como pode ser aplicado o conceito da representao da
D
E matriz simtrica.
D
A
D
O
S
UNIDADE 2 TPICO 3 141
L
I
N
G
U
A
G
E
N
S
FONTE: S (2014)
D
E
Agora que temos noo do que uma matriz simtrica, vamos aprofundar ainda mais
P
nossos estudos, analisando que uma matriz simtrica considerada como n x n, e no existe R
O
a necessidade de armazenar os seguintes elementos mat[ i ] [ j ] e mat[ j ] [ i ], pois tanto G
R
esses valores quanto i j, possuem o mesmo valor. Com isso existe a necessidade apenas A
M
de armazenar os valores dos elementos que esto na diagonal, bem como da metade dos A
elementos restantes, segundo o exemplo dos elementos da diagonal, com os quais i > j, isso
O
pode ajudar no processo e obter mais espao na memria, aumentando a eficincia com a
E
alocao da matriz. Vamos analisar a seguir o exemplo de como realizar esse processo, ao
E
invs de n2 valores, vamos armazenar apenas s como elementos, sendo este s dado, com o S
T
seguinte comando: R
U
T
U
R
A
D
E
Quando um mdulo define um novo tipo de dado, como define o conjunto de operaes
que iro manipular os dados desse novo tipo de dado? Esse procedimento est representando
um tipo abstrato de dado, conhecido pela sigla TAD. O tipo de dado abstrato definido por
ter sua finalidade do tipo e de suas operaes, no como so implementadas. Para criar uma
TAD para que esta possa representar matrizes que sejam alocadas dinamicamente, preciso
criar um tipo de matriz, como tambm uma srie de funes para manipular essas matrizes. No
caso de criar formas de acessar a matriz, podem ser utilizadas funes que possam acessar
e manipular os elementos dessa matriz, para que isso ocorra podemos criar um tipo abstrato
de dado, onde possvel esconder a forma como so implementadas essas funes.
A definio de um TAD serve para especificar e descrever quais os dados podem ser
armazenados, como possvel utilizar esses dados atravs dos operadores dos dados TAD,
no entanto, essas definies no descrevem como devem ser implementados o TAD em um
programa. Sua aplicao possui apenas a definio de ser um TAD modelo, em que este
modelo define e especifica como manipular e armazenar os dados.
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
Para a criao de um tipo de dado, em que seja possvel representar um ponto no R2,
deve-se primeiramente definir um tipo de dado abstrato, que pode ser chamado de Ponto,
como o conjunto de funes que pode operar sobre esse tipo de dado. Esse ponto realiza as
seguintes operaes, de acordo com Lima (2014):
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
A Podemos citar alguns exemplos de caractersticas do TAD Ponto, como por exemplo,
D
O
definir o nome do tipo e definir os nomes das funes que sero exportadas. Este TAD Ponto
S
UNIDADE 2 TPICO 3 145
Podemos encontrar outras limitaes em relao aos mdulos que utilizam o TAD Ponto,
essas limitaes do mdulo so: no possvel acessar diretamente os campos da estrutura do
Ponto e s podem acessar aos dados que foram obtidos atravs das funes exportadas. Para
realizar a implementao do TAD Ponto so seguidos os passos como incluir os arquivos de
interface de Ponto, definir qual a composio da estrutura Ponto e incluir a implementao das
funes externas. Vamos analisar a seguir um exemplo de como pode ser utilizado o TAD Ponto:
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
FONTE: Lima (2014) A
O
E
2.6.2 Tipo de dado abstrato Matriz S
T
R
U
T
Como um TAD implementado de forma que fica escondido dentro do seu prprio U
R
mdulo, dessa forma fica mais fcil de experimentar formas que sejam diferentes para A
implementar um mesmo tipo de dado TAD. Esse processo de utilizar o mesmo tipo de dado D
E
TAD, torna-se mais fcil de experimentar diversas formas de implementar o mesmo TAD, sem
D
mesmo afetar os seus clientes. Com esta dependncia da implementao de dados TAD, em A
D
que se pode criar vrios tipos de dados abstratos, em que esse representa matrizes de valores O
S
146 TPICO 3 UNIDADE 2
reais, e esses valores reais esto alocados de forma dinmica, onde as dimenses de m x
n, so fornecidos no mesmo tempo de execuo. Especificamente existe a necessidade de
definir um tipo de dado abstrato, que ser denominado de matriz, como tambm ser definido
o conjunto de funes que iro operar sobre esses tipos de dados. Segundo Lima (2014) neste
dado do TAD matriz sero consideradas as seguintes operaes:
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E FONTE: Celes e Rangel (2008)
D
A
D Para que possamos analisar e verificar se uma matriz realmente simtrica, precisa-se
O
S
UNIDADE 2 TPICO 3 147
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
148 TPICO 3 UNIDADE 2
RESUMO DO TPICO 3
Quando a grande parte dos elementos igual a zero ou considerada como um valor
constante, chamado de matriz especial. Esta matriz exige muita ateno devido ao seu
desperdcio de espao ao realizar a alocao da memria. Isso se deve matriz especial
possuir elementos que tem o mesmo valor, para que o espao no seja desperdiado precisa-
se apresentar apenas valores que so representativos e significativos para a matriz.
E
A representao de matrizes simtricas ocorre atravs de um processo em que existe
E
S
um resultado na troca de linhas e colunas, esse procedimento conhecido como matriz
T transposta, ento a matriz simtrica igual a sua matriz transposta e isso a define como a
R
U matriz simtrica.
T
U
R
A O tipo abstrato de dados TAD definido por ser formado de um novo tipo de dado, em
D que o mdulo define um conjunto de operaes que sero manipuladas por esse novo tipo
E
de dado, sua principal caracterstica a finalidade de suas operaes. A utilizao do TAD
D
A para saber qual a sua finalidade e sua funcionalidade de ser implementada, formado
D
O por um grupo de operadores, em que esses manipulam os dados. O TAD representado
S
atravs de dois tipos de dados: dado Abstrato Ponto e o dado Abstrato Matriz.
UNIDADE 2 TPICO 3 149
ID ADE
ATIV
AUTO
2 A definio de tipos abstratos de dados se d atravs da sua forma de definir para qual
finalidade pode ser utilizada e como pode utilizar as suas operaes. Suas estruturas
so divididas em duas partes de dados e operaes. O tipo de dado abstrato Ponto
L
formado por cinco operaes, analise as alternativas a seguir e assinale a alternativa I
N
correta. G
U
( ) Linha, Colunas, Cria, Libera e Acessa. A
G
( ) Cria, Libera, Acessa, Atribui e Distancia. E
N
( ) Atribui, Distancia, Aloca, Retorna e Liga. S
( ) Aloca, Retorna, Liga, Linha e Colunas. D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
150 TPICO 3 UNIDADE 2
IAO
AVAL
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3
Objetivos de aprendizagem
PLANO DE ESTUDOS L
I
N
Esta unidade est dividida em quatro tpicos. Ao final de G
U
cada um deles, voc encontrar atividades que auxiliaro a fixar A
G
as estruturas e praticar problemas prticos em uma linguagem de E
N
programao. S
D
E
P
TPICO 1 Listas Encadeadas R
O
G
TPICO 2 Listas Duplamente Encadeadas R
A
M
TPICO 3 Pilhas A
TPICO 4 Filas
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3
TPICO 1
LISTAS ENCADEADAS
1 INTRODUO
P
R
O
G
FONTE: O autor R
A
M
Ao declarar um vetor, reserva-se um espao contguo de memria para armazenar A
seus elementos, sendo que seu ndice iniciar na posio 0, conforme ilustra a figura a seguir.
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
154 TPICO 1 UNIDADE 3
vet[0] vet[1] vet[2] vet[3] vet[4] vet[5] vet[6] vet[7] vet[8] vet[9]
0 1 2 3 4 5 6 7 8 9
FONTE: O autor
O fato de o vetor ocupar um espao contguo na memria nos permite acessar qualquer
um de seus elementos a partir do ponteiro para o primeiro elemento. Efetivamente, o smbolo
vet, aps a declarao acima, como j vimos, representa um ponteiro para o primeiro elemento
do vetor, isto , o valor de vet o endereo da memria onde o primeiro elemento do vetor
est armazenado. De posse do ponteiro para o primeiro elemento, podemos acessar qualquer
elemento do vetor atravs do operador de indexao vet[i]. Dizemos que o vetor uma estrutura
que possibilita acesso randmico aos elementos, pois podemos acessar qualquer elemento
aleatoriamente.
O
Com o objetivo de minimizar estes problemas, a soluo utilizar estruturas de dados
E
que possibilitem o seu dimensionamento de forma automtica, acrescentando ou retirando
E
S elementos conforme a necessidade de armazenamento. Tais estruturas so chamadas
T
R dinmicas e armazenam cada um dos seus elementos usando alocao dinmica.
U
T
U
R Nas sees a seguir, discutiremos a estrutura de dados conhecida como lista encadeada.
A
As listas encadeadas so amplamente utilizadas na implementao de diversas outras estruturas
D
E de dados com semnticas prprias, que sero tratadas nos tpicos seguintes.
D
A
D
O
S
UNIDADE 3 TPICO 1 155
2 A Lista Encadeada
Ao utilizar uma lista encadeada, cada novo elemento inserido na estrutura ser alocado
de forma dinmica na memria. Consequentemente, o espao total de memria utilizado pela
estrutura ser proporcional ao nmero de elementos nela armazenado.
D
Figura 83 ARRANJO DA MEMRIA DE UMA LISTA ENCADEADA E
P
R
O
G
R
A
M
FONTE: O autor A
O
A estrutura consiste numa sequncia encadeada de elementos, comumente denominada
de ns da lista. A lista representada por um ponteiro para o primeiro elemento (ou n), a E
partir do qual se pode ascender ao segundo, seguindo o encadeamento, e assim por diante. E
S
O ltimo elemento da lista aponta para NULL, indicando que no h mais elementos na lista. T
R
U
T
Para exemplificar a implementao de listas encadeadas em Java, vamos considerar U
R
um exemplo simples em que queremos armazenar o nome e o peso de uma pessoa numa lista A
D
A
D
O
S
156 TPICO 1 UNIDADE 3
FONTE: O autor
A classe PessoaLista trata-se de uma estrutura autorreferenciada, pois, alm dos campos
que armazenam as informaes (nome e peso), h o atributo (prox) que um ponteiro para uma
prxima estrutura do mesmo tipo. Normalmente, o acadmico fica confuso em relao a isso,
como se esse cdigo fosse gerar um lao infinito, ou uma recurso infinita. No entanto, no o
caso, j que a declarao do atributo prox apenas uma referncia, que no cria uma instncia
de PessoaLista na memria, apenas criando uma referncia a referida classe j instanciada!
L
I
N
G
U
A
G
E
N
S FONTE: O autor
D
E
Importante destacar que, embora a Figura 85 represente as pessoas uma ao lado da
P
R outra, na memria provavelmente elas estejam em regies bem distintas, contudo, cada uma
O
G delas sabe dizer em que local se encontra a prxima pessoa j que h a referncia ao prximo
R
A pelo atributo prox.
M
A
Neste sentido, para criar uma estrutura mais funcional, utiliza-se uma classe separada
como ns, evitando mesclar a classe de dados (Pessoa) da nossa estrutura.
UNI
Ao trabalhar com lista duplamente encadeada, alm de armazenar
a referncia para o prximo n, ser necessrio armazenar a
referncia para o n anterior, conforme veremos no tpico a L
seguir. I
N
G
U
A
G
E
Atravs do ambiente integrado de desenvolvimento Eclipse Luna, disponvel para N
S
download no link <http://www.eclipse.org/downloads/>, daremos incio ao projeto de
D
desenvolvimento da Lista Encadeada, criando inicialmente a classe No, conforme figura a E
seguir, a qual ir possuir apenas dois atributos getters e setters, alm dos construtores para P
facilitar nosso trabalho. R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
158 TPICO 1 UNIDADE 3
L
I
N
G
U
A FONTE: O autor
G
E
N
S Importante ressaltar que a classe No nunca ser acessada diretamente por quem
D for desenvolver uma classe de Lista Encadeada. Desta forma, estaremos escondendo
E
funcionamento da nossa classe e, consequentemente, garantindo que ningum altere o
P
R funcionamento da sua estrutura interna.
O
G
R
A Concluda a classe No, crie uma nova classe denominada ListaEncadeada que
M
A possuir inicialmente apenas uma referncia para o primeiro n e outra para o ltimo. Atravs
do primeiro n ocorrer a iterao para chegar a qualquer posio necessria, enquanto que
O
a referncia ao ltimo ir facilitar a insero no fim da Lista.
E
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 1 159
FONTE: O autor
D
E
P
R
O
G
R
A
M
A
O
E
S
FONTE: O autor T
R
U
T
Atravs da utilizao de uma lista encadeada, as operaes de adicionar e remover U
R
da primeira e da ltima posio sero computacionalmente eficientes, diferentemente do que A
ocorria quando da utilizao de vetores. Contudo, para que isso seja possvel, precisaremos D
E
desenvolver mais trs mtodos na classe ListaEncadeada, que observamos na figura a seguir.
D
A
D
O
S
160 TPICO 1 UNIDADE 3
FONTE: O autor
Neste momento, voc deve se perguntar: por que no foi definido o mtodo
adicionaNoFim()? A explicao simples: O mtodo adiciona() j definido anteriormente (Figura
88), exercer a funo de inserir no fim da Lista, no havendo desta forma, a necessidade de
criar um novo mtodo para realizar esta tarefa.
D
E
P
R
O
G FONTE: O autor
R
A
M
A
FONTE: O autor
D
E
P
R
O
G
R
A
M
A
FONTE: O Autor
O
D
E
D
A
D
O
S
162 TPICO 1 UNIDADE 3
FONTE: O autor
L
o fim da Lista para alterar a referncia proximo do ltimo n, reduzindo consideravelmente
I o desempenho do nosso programa, j que havendo um grande nmero de elementos e o
N
G processo tornar-se-ia lento.
U
A
G
E No caso especial da Lista estar vazia, adicionar no comeo ou no fim dessa lista d o
N
S mesmo efeito. Ento, se a Lista estiver vazia, chamaremos o mtodo j definido anteriormente
D adicionaNoComeco(Object), (CAELUM, 2014). Conforme veremos no cdigo-fonte a seguir.
E
P
R
FIGURA 94 ADICIONA NO LTIMO N COM A LISTA NO VAZIA
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
FONTE: O autor
D
E
D
A
D
O
S
UNIDADE 3 TPICO 1 163
FONTE: O autor
Perceba que aqui estamos fazendo que haja n ns para n elementos, isto , um n
para cada elemento. Outra implementao clssica de lista encadeada usar um n sentinela
a mais para indicar o comeo da Lista, e outro para o fim, assim poderamos simplificar um
pouco alguns desses mtodos, como o caso particular de inserir um elemento quando no h
ainda elemento algum. Vale sempre lembrar que aqui estamos estudando uma implementao
de estrutura de dados, e que h sempre outras formas de codific-las que podem ser mais ou
menos elegantes.
L
FONTE: Caelum (2014) I
N
G
U
A
G
E
N
2.3.3 Mtodo adicionaPosicao() S
D
E
A insero no comeo e no fim da Lista j foram devidamente tratadas nos itens P
R
anteriores. Aqui vamos nos preocupar em inserir em uma posio no interior da Lista, ou O
G
seja, qualquer posio que no seja a primeira e nem a ltima. Para inserir um elemento em R
A
qualquer posio precisamos pegar o n anterior ao da posio desejada, porque precisamos M
A
mexer na sua referncia proximo. (CAELUM, 2014). Para isso vamos criar um mtodo auxiliar
responsvel por pegar determinado n, ao qual atribuiremos o nome de pegaNo. Ao utilizar este
O
mtodo devemos tomar cuidado no caso da posio no existir. Para tanto, iremos inicialmente E
desenvolver o mtodo posicaoOcupada, que verificar se a posio existe ou no.
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
164 TPICO 1 UNIDADE 3
FONTE: O autor
P
FIGURA 97 ADICIONA EM UMA POSIO DA LISTA
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A FONTE: O autor
D
E
D
A
D
O
S
UNIDADE 3 TPICO 1 165
FONTE: O autor
Para pegar um elemento muito simples: basta pegarmos o n em que aquele elemento
se encontra e acessar o elemento que se encontra dentro dele. Podemos utilizar o mtodo L
I
pegaNo(int) previamente criado: N
G
U
FIGURA 99 CDIGO PARA PEGAR UM ELEMENTO NA LISTA A
G
E
N
S
D
FONTE: O autor E
P
R
O
Perceba que este mtodo consome tempo linear. Esta uma grande desvantagem da G
R
Lista Encadeada em relao aos Vetores. Vetores possuem o chamado acesso aleatrio aos A
M
elementos, ou seja, qualquer posio pode ser acessada em tempo constante. Apesar dessa A
grande desvantagem, diversas vezes utilizamos uma Lista e no necessrio ficar acessando
O
posies aleatrias: comumente percorremos a lista por completa, que veremos como fazer
E
mais adiante.
E
FONTE: O autor S
T
R
U
T
U
R
A
D
A
Antes de tentar remover devemos verificar se a posio est ocupada. No faz sentido D
O
remover algo que no existe. Depois, basta avanar a referncia que aponta para o primeiro n. S
166 TPICO 1 UNIDADE 3
Por fim, importante perceber que a Lista pode ficar vazia. Neste caso, devemos colocar
null na referncia que aponta para o ltimo n.
L
I FONTE: O autor
N
G
U
A
G
E FIGURA 101 REMOVE DO COMEO LISTA COM PELO MENOS DOIS (2) ELEMENTOS
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T FONTE: O autor
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 1 167
FONTE: O autor
A primeira verificao a ser realizada tem por objetivo constatar se a ltima posio
existe, que poder ser realizada atravs do mtodo anteriormente criado posicaoOcupada(int).
L
Ao constatar que a Lista possui apenas um elemento o processo de remoo do fim I
N
ser idntico a remover do comeo, possibilitando desta forma a reutilizao do mtodo G
U
removeDoComeco(), nestes casos. A
G
E
N
No entanto, se a Lista possui mais que um elemento, devemos pegar o penltimo n, S
fazer o prximo do penltimo ser null e fazer o atributo ultimo apontar para o penltimo. D
E
P
A questo neste momento : como pegar o penltimo n? Podemos fazer isso usando R
O
o mtodo pegaNo(int), mas isso consumiria tempo linear, reduzindo consideravelmente o G
R
desempenho de nosso programa. Desta forma, como queremos consumo constate teremos A
M
que achar outra soluo. A
O
Ento, em vez de fazer uma Lista Encadeada simples, vamos fazer uma Lista Duplamente
Encadeada. Ou seja, cada n aponta para o seu anterior alm de apontar para a prxima. E
(CAELUM, 2014). Para tanto, devemos reabrir a classe No e adicionar o cdigo a seguir. E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
168 TPICO 1 UNIDADE 3
FONTE: O autor
Com cada n sabendo quem o seu anterior, fica fcil escrever o mtodo removeDoFim().
FIGURA 104 REMOVE DO FIM LISTA COM PELO MENOS DOIS (2) ELEMENTOS
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G FONTE: O autor
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 1 169
FONTE: O autor
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
170 TPICO 1 UNIDADE 3
FONTE: O autor
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O FONTE: O autor
G
R
A
M
A
O
2.3.8 Mtodo contem()
E
E
S Est operao deve percorrer a Lista e comparar com o mtodo equals(Object) o
T
R elemento procurado contra todos os elementos da Lista.
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 1 171
FONTE: O autor
Est operao no tem segredo, pois j definimos um atributo que possui esta
informao, qual seja totalDeElementos.
L
I
FIGURA 109 CDIGO PARA RETORNAR O TAMANHO DA LISTA N
G
U
A
G
E
N
S
FONTE: O autor
D
E
P
R
O
G
R
2.4 VERIFICANDO O FUNCIONAMENTO DOS MTODOS A
M
A
Para que possamos verificar se os mtodos anteriormente definidos esto funcionando O
corretamente, iremos implementar algumas classes que nos permitiro fazer a incluso e E
excluso de pessoas em nossa Lista Encadeada. E
S
T
R
Todavia, para que esses mtodos consigam imprimir o contedo da nossa lista, devemos U
primeiramente reescrever o mtodo toString(), o qual permitir visualizar facilmente o contedo T
U
da Lista. Utilizamos a classe StringBuilder para construir a String que mostrar os elementos R
A
da Lista.
D
E
D
A
D
O
S
172 TPICO 1 UNIDADE 3
FONTE: O autor
D
E
P
R
O
G
R FONTE: O autor
A
M
A
Ao executar a classe acima, teremos como sada esperada:
O [Guilherme, Felipe]
E
E
S
T
R
U
T 2.4.2 Classe TesteAdicionaPorPosicao
U
R
A
D
Crie a classe TesteAdicionaPorPosicao, conforme a figura a seguir, a qual possibilitar
E adicionarmos pessoas em nossa Lista Encadeada, conforme a posio informada.
D
A
D
O
S
UNIDADE 3 TPICO 1 173
FONTE: O autor
L
I
Crie a classe TestePegaPorPosicao, conforme a figura a seguir, a qual possibilitar N
G
pegarmos uma pessoa em nossa Lista Encadeada, de acordo com a posio informada. U
A
G
FIGURA 113 IMPLEMENTAO DA CLASSE TestePegaPorPosicao E
N
S
D
E
P
R
O
G
R
A
M
A
FONTE: O autor O
D
E
D
A
D
O
S
174 TPICO 1 UNIDADE 3
FONTE: O autor
L
I
N Ao executar a classe acima, teremos como sada esperada:
G
U [Guilherme, Letcia]
A
G
E
N
S
D
E 2.4.5 Classe TesteTamanho
P
R
O
G Crie a classe TesteTamanho, conforme a figura a seguir, a qual possibilitar visualizarmos
R
A a quantidade de elementos que compem nossa Lista Encadeada.
M
A
O
FIGURA 115 IMPLEMENTAO DA CLASSE TesteTamanho
E
E
S
T
R
U
T
U
R
A
D
E
D
A
D FONTE: O autor
O
S
UNIDADE 3 TPICO 1 175
L
I
N
G
FONTE: O autor U
A
G
E
Ao executar a classe acima, teremos como sada esperada: N
S
true
D
false E
P
R
O
G
R
A
M
2.4.7 Classe TesteAdicionaNoComeco A
O
Crie a classe TesteAdicionaNoComeco, conforme a figura a seguir, a qual permitir
E
inserir um novo elemento no comeo da nossa Lista Encadeada.
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
176 TPICO 1 UNIDADE 3
FONTE: O autor
D
E
P
R
O
G
R
A
M
A
FONTE: O autor
O
E
Ao executar a classe acima, teremos como sada esperada:
E
S [Felipe]
T
R
U
T
U
R
A
D
A Crie a classe TesteRemoveDoFim, conforme a figura a seguir, a qual permitir remover
D
O o ltimo elemento da nossa Lista Encadeada.
S
UNIDADE 3 TPICO 1 177
FONTE: O autor
private No ultimo; P
R
O
G
private int totalDeElementos; R
A
M
A
private Object elemento;
O
this.ultimo = this.primeiro; D
E
}
D
this.totalDeElementos++; A
D
} O
S
178 TPICO 1 UNIDADE 3
P
R public Object pega(int posicao) {
O
G return this.pegaNo(posicao).getElemento();
R
A }
M
A
anterior.setProximo(proximo);
proximo.setAnterior(anterior);
this.totalDeElementos--;
}
}
this.primeiro = this.primeiro.getProximo(); P
R
this.totalDeElementos--; O
G
if (this.totalDeElementos == 0) { R
A
this.ultimo = null; M
A
}
} O
this.removeDoComeco(); D
E
} else {
D
No novo = new No(elemento); A
D
this.ultimo.setProximo(novo); O
S
180 TPICO 1 UNIDADE 3
novo.setAnterior(this.ultimo);
this.ultimo = novo;
No penultima = this.ultimo.getAnterior();
penultima.setProximo(null);
this.ultimo = penultima;
this.totalDeElementos--;
}
}
this.primeiro = primeiro;
O
}
E
E
S public No getUltimo() {
T
R return ultimo;
U
T }
U
R
A
public void setUltimo(No ultimo) {
D
E this.ultimo = ultimo;
D }
A
D
O
S
UNIDADE 3 TPICO 1 181
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
No temp = primeiro;
for(int i = 0; i< this.totalDeElementos;i++){
sb.append(temp.getElemento()+" ");
temp = temp.getProximo();
L
} I
N
return sb.toString(); G
U
} A
G
E
public Object getElemento() { N
S
return elemento; D
} E
P
R
public void setElemento(Object elemento) { O
G
this.elemento = elemento; R
A
} M
A
} O
E
FONTE: O autor E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
182 TPICO 1 UNIDADE 3
RESUMO DO TPICO 1
A classe autorreferencial contm uma referncia para outro objeto do mesmo tipo de classe.
Os objetos autorreferenciais podem ser encadeados entre si para formar estruturas de dados
teis, como listas, filas e pilhas.
P
R
O
O operador new recebe como operando o tipo do objeto que est sendo dinamicamente
G
R
alocado e devolve uma referncia a um objeto desse tipo recm-criado.
A
M
A A lista encadeada uma coleo linear (isto , uma sequncia) de objetos de classe
E
A lista encadeada acessada atravs de uma referncia ao primeiro n da lista. Cada n
E
S subsequente acessado atravs do membro de referncia de ponteiro armazenado no n
T
R anterior.
U
T
U
R Por conveno, a referncia de ponteiro do ltimo n de uma lista configurada como null
A
para marcar o fim da lista.
D
E
IDADE
ATIV
AUTO
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
184 TPICO 1 UNIDADE 3
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3
TPICO 2
1 INTRODUO
Para o mtodo responsvel por remover o elemento do fim da Lista ter consumo de
tempo constante, o ltimo n deve se referir ao penltimo. Isso possvel se utilizarmos o
esquema de Lista Duplamente Encadeada, no qual os ns possuem referncias tanto para a
L
prxima, quanto para o n anterior (CAELUM, 2014). I
N
G
U
Est modificao implica alteraes na implementao dos outros mtodos, como j A
G
falamos anteriormente, as quais sero vistas a seguir. Para realizar estas mudanas, iremos E
N
criar uma nova classe, a qual chamaremos de ListaDuplamenteEncadeada e posteriormente S
copiaremos todos os mtodos j definidos na classe ListaEncadeada a fim de agilizar nosso D
E
trabalho.
P
R
O
G
R
A
M
2 Mtodo adicionaNoComeco() A
O
Para este mtodo devemos considerar dois casos: Lista Vazia e Lista no Vazia, sendo E
que para o primeiro caso o novo n ser o primeiro e o ltimo. Alm disso, ele no ter prximo E
S
nem anterior, pois ser o nico n. T
R
U
T
J no caso da Lista no encontrar-se vazia, ser necessrio ajustar os ponteiros para U
R
o novo segundo (antiga referncia primeiro) apontar para o novo primeiro e vice-versa. A
D
E
D
A
D
O
S
186 TPICO 2 UNIDADE 3
FONTE: O autor
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A FONTE: O autor
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
FONTE: O autor
UNIDADE 3 TPICO 2 187
3 Mtodo adiciona()
L
I
N
G
U
A
G
E
N
FONTE: O autor S
D
FIGURA 125 CDIGO PARA ADICIONAR NO FIM DA LISTA DUPLAMENTE ENCADEADA E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
FONTE: O autor D
E
D
A
D
O
S
188 TPICO 2 UNIDADE 3
4 Mtodo adicionaPosicao()
Resta a situao em que a insero no meio da Lista, ou seja, entre dois ns existentes.
Neste caso, devemos ajustar as referncias para o novo n ser apontado corretamente pelos
dois ns relacionados a ele (o anterior e o prximo). E tambm fazer o novo n apontar para
o anterior e o prximo (Caelum, 2014).
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M FONTE: O autor
A
E
S 5 Mtodo removeDoComeco()
T
R
U
T Esta operao idntica em ambos os tipos de Lista Encadeada (simples ou dupla).
U
R Ela apenas deve avanar a referncia primeira para o segundo n e tomar cuidado com o
A
caso da Lista ficar vazia, pois, neste caso, a referncia ltimo deve ser atualizada tambm
D
E (CAELUM, 2014, p. 34).
D
A
D
O
S
UNIDADE 3 TPICO 2 189
FIGURA 128 REMOVE DO COMEO LISTA DUPLAMENTE ENCADEADA COM PELO MENOS
DOIS ELEMENTOS
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
FONTE: O autor
E
S
T
R
U
T
U
6 Mtodos removeDoFim() e remove() R
A
D
E
Estes dois mtodos j foram tratados e implementados anteriormente usando o esquema
D
de Lista Duplamente Encadeada. A
D
O
S
190 TPICO 2 UNIDADE 3
FONTE: O autor
L
I
N
G
U
A
G
E
N
S
D
E
P FONTE: O autor
R
O
G
R
A
UNI
M
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 2 191
RESUMO DO TPICO 2
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
192 TPICO 2 UNIDADE 3
IDADE
ATIV
AUTO
2 Desenvolva uma funo que possibilite a cpia dos dados de um vetor para uma lista
duplamente encadeada.
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3
TPICO 3
PILHAS
1 INTRODUO
Um determinado produto composto por diversas peas (digamos p1, p2, ...,pn). O
processo de montagem deste produto automtico (executado por uma mquina) e exige que
as peas sejam colocadas em uma ordem especfica (primeiro a p1, depois a p2, depois a p3 L
I
e assim por diante). N
G
U
A
As peas so empilhadas na ordem adequada e a mquina de montagem vai retirando G
E
pea por pea do topo desta pilha para poder montar o produto final. N
S
D
A mesma mquina que faz a montagem capaz de trocar uma pea quebrada de um E
produto j montado. P
R
O
G
O que a mquina faz desmontar o produto at chegar pea defeituosa, troc-la R
e ento depois recolocar as peas que foram retiradas. Isso tambm feito com o uso da A
M
pilha de peas. Veja a seguir o algoritmo que a mquina montadora implementa para fazer a A
manuteno de um produto com defeito.
O
E
1) Retirar e empilhar pea por pea do produto at chegar na pea defeituosa.
E
2) Retirar a pea defeituosa. S
T
3) Colocar uma pea nova sem defeitos. R
U
4) Desempilhar e montar pea por pea do topo da pilha at a pilha ficar vazia. T
U
R
FONTE: Caelum (2014, p. 1) A
D
E
D
A
D
O
S
194 TPICO 3 UNIDADE 3
2 o conceito de pilhas
A pilha uma verso limitada de uma lista encadeada novos nodos podem
ser adicionados a uma pilha e removidos de uma pilha apenas na parte supe-
rior (topo). Por essa razo, a pilha conhecida como uma estrutura de dados
ltimo a entrar, primeiro a sair (last-in, first-out - LIFO). O membro de link do
nodo inferior (isto , o ltimo) da pilha configurado como nulo para indicar a
base da pilha. (DEITEL E DEITEL, 2003, p. 56).
E
S
T
R
U
T
U
R
A
D
E
D
A FONTE: O autor
D
O
S Com a classe Peca j possvel criar objetos para representar as peas que
UNIDADE 3 TPICO 3 195
E
S
T
R
U
T
U
R
A
FONTE: O autor
D
E
O primeiro fato importante que devemos observar que uma vez que a interface da D
A
Pilha foi definida, j saberamos usar a classe Pilha. Vamos criar uma classe de teste bem D
O
simples para exemplificar o uso de uma Pilha (CAELUM, 2014). S
196 TPICO 3 UNIDADE 3
FONTE: O autor
O segundo fato importante que a estrutura que queremos aqui muito similar as Listas
que vimos anteriormente. A semelhana fundamental entre as Listas e as Pilhas que ambas
devem armazenar os elementos de maneira sequencial. Este fato o ponto-chave deste Tpico.
Qual a diferena entre uma Lista e uma Pilha? A diferena est nas operaes destas
L
I duas estruturas de dados. As operaes de uma Pilha so mais restritas do que as de uma
N
G Lista. Por exemplo, voc pode adicionar ou remover um elemento em qualquer posio de
U
A uma Lista, mas em uma Pilha voc s pode adicionar ou remover do topo.
G
E
N
S Ento, uma Lista uma estrutura mais poderosa e mais genrica do que uma Pilha. A
D Pilha possui apenas um subconjunto de operaes da Lista. Ento o interessante que para
E
implementar uma Pilha podemos usar uma Lista. Isso mesmo! Vamos criar restries sobre
P
R as operaes da Lista e obteremos uma Pilha.
O
G
R
A
Ns implementamos dois tipos de Listas: Vetores e Listas Encadeadas. Vimos, tambm
M
A
que, na biblioteca do Java, h implementaes prontas para estes dois tipos de Listas. Neste
captulo, vamos utilizar a classe LinkedList para armazenar as peas que sero guardadas
O na Pilha.
E
D
Qual a diferena entre uma Lista e uma Pilha? A diferena est nas operaes destas
A
D
duas estruturas de dados. As operaes de uma Pilha so mais restritas do que as de uma
O
S
Lista. Por exemplo, voc pode adicionar ou remover um elemento em qualquer posio de
UNIDADE 3 TPICO 3 197
uma Lista, mas em uma Pilha voc s pode adicionar ou remover do topo.
Ento, uma Lista uma estrutura mais poderosa e mais genrica do que uma Pilha. A
Pilha possui apenas um subconjunto de operaes da Lista. Ento o interessante que para
implementar uma Pilha podemos usar uma Lista. Isso mesmo! Vamos criar restries sobre
as operaes da Lista e obteremos uma Pilha.
Para tanto, ser indispensvel que a classe Pilha faa a importao das referidas
bibliotecas do Java, conforme demonstra a figura a seguir:
D
E
FONTE: O autor P
R
O
G
Dentro de nossa Pilha teremos uma LinkedList encapsulada, que vai simplificar bastante R
A
o nosso trabalho: delegaremos uma srie de operaes para essa Lista Ligada, porm sempre M
A
pensando nas diferenas essenciais entre uma Pilha e uma Lista.
O
Devemos ter um getPecas() que devolve uma referncia para essa nossa LinkedList? E
Nesse caso, a resposta no, pois estaramos expondo detalhes de nossa implementao, e o E
S
usurio dessa classe poderia mexer no funcionamento interno da nossa pilha, desrespeitando as T
R
regras de sua interface. sempre uma boa prtica expor o mnimo possvel do funcionamento U
T
interno de uma classe, gera um menor acoplamento entre as classes. U
R
A
FONTE: Caelum (2014)
D
E
D
A
D
O
S
198 TPICO 3 UNIDADE 3
L
I
N
G
U
A
G
E
N
S
D
E
P
R FONTE: O autor
O
G
R
A Recordando que o mtodo add(Object) adiciona no fim da Lista.
M
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 3 199
FONTE: O autor
bom observar que se o mtodo remove() for usado com a Pilha vazia ento uma
exceo ser lanada, pois o mtodo remove(int) da List lana IndexOutOfBoundsException
quando no existir elemento para remover. (CAELUM, 2014, p. 12).
L
I
N
3.2.3 Informar se a Pilha est vazia G
U
A
G
Para implementar esta operao basta verificar se o tamanho da Lista zero. Contudo, E
N
o mtodo isEmpty() j implementado e disponvel na classe LinkedList a forma mais S
P
FIGURA 137 CDIGO PARA IMPLEMENTAR O MTODO PARA VERIFICAR SE A PILHA EST R
VAZIA O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
FONTE: O autor D
A
D
O
S
200 TPICO 3 UNIDADE 3
3.2.4 Generalizao
Nossa Pilha s funciona para armazenar objetos da classe Peca. Vamos generalizar a
Pilha para poder armazenar qualquer tipo de objeto. Isso ser feito utilizando a classe Object
da qual todas as classes derivam direta ou indiretamente. Criaremos uma LinkedList de Object
em vez de uma LinkedList de Peca. (CAELUM, 2014).
L
I
N
G
U
A
G
E
N
S
D
E
FONTE: O autor
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 3 201
Agora, podemos armazenar qualquer tipo de objeto na Pilha. Isso uma grande
vantagem, pois a classe Pilha poder ser reaproveitada em diversas ocasies. Mas, h
uma desvantagem, quando removemos um elemento da Pilha no podemos garantir qual
o tipo de objeto que vir.
No Java 5 poderamos usar Generics para solucionar este problema. A nossa classe
Pilha poderia ser uma classe parametrizada. Na criao de um objeto de uma classe
parametrizada possvel dizer com qual tipo de objeto que queremos trabalhar.
L
I
N
G
U
A
G
E
N
S
D
FONTE: O autor E
P
Poderamos tambm adicionar outros mtodos, provavelmente teis a manipulao R
O
de uma pilha, como saber o tamanho da pilha, espiar um elemento em determinada posio, G
R
entre outros. Vamos testar a classe Pilha que usa Generics. A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
202 TPICO 3 UNIDADE 3
FONTE: O autor
D
E
UNI
P
R
O Na biblioteca do Java existe uma classe que implementa a
G estrutura de dados que foi vista neste Tpico, esta classe chama-
R
A se Stack e ser testada pelo cdigo a seguir.
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 3 203
FONTE: O autor
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
204 TPICO 3 UNIDADE 3
RESUMO DO TPICO 3
A pilha uma verso limitada de uma lista encadeada novos ns podem ser adicionados e
removidos apenas da parte superior de uma pilha. A pilha conhecida como uma estrutura
de dados ltimo a entrar, primeiro a sair (LIFO).
Os mtodos primrios utilizados para manipular uma pilha so push e pop (classe Stack).
O mtodo push adiciona um novo n ao topo da pilha, enquanto o mtodo pop remove um
L n do topo da pilha e devolve o objeto do n retirado.
I
N
G
U As pilhas tm muitas aplicaes interessantes. Quando feita uma chamada de mtodo, o
A
G mtodo chamado deve saber retornar para seu chamador, assim o endereo de retorno
E
N
adicionado pilha de execuo do programa. Se ocorrer uma srie de chamadas de mtodos,
S
os sucessivos valores de retorno so adicionados pilha, na ordem ltimo a entrar, primeiro
D
E
a sair, de modo que cada mtodo possa retornar para seu chamador.
P
R A tcnica de implementar cada mtodo de pilha como uma chamada para um mtodo List
O
G chamada de delegao, o mtodo de pilha invocado delega a chamada para o mtodo de
R
A List adequado.
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 3 205
IDADE
ATIV
AUTO
1 Desenvolva um programa que permita a leitura de uma linha de texto e utiliza uma
pilha para imprimir as palavras da linha na ordem inversa.
2 Uma estrutura de dados caracteriza-se como sendo um objeto do tipo LIFO, assim,
correto afirmar que:
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
206 TPICO 3 UNIDADE 3
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3
TPICO 4
FILAS
1 INTRODUO
No dia a dia, estamos acostumados com as filas em diversos lugares: nos bancos,
nos mercados, nos hospitais, nos cinemas entre outros. As filas so importantes, pois elas
determinam a ordem de atendimento das pessoas. L
I
N
As pessoas so atendidas conforme a posio delas na fila. O prximo a ser atendido G
U
o primeiro da fila. Quando o primeiro da fila chamado para ser atendido a fila anda, ou A
G
seja, o segundo passa a ser o primeiro, o terceiro passa a ser o segundo e assim por diante E
N
at a ltima pessoa. S
D
E
Normalmente, para entrar em uma fila, uma pessoa deve se colocar na ltima posio,
P
ou seja, no fim da fila. Desta forma, quem chega primeiro tem prioridade. R
O
G
R
Neste tpico estamos interessados em desenvolver estrutura de dados com o A
M
comportamento das filas. Assim como Listas e Pilhas, as Filas so estruturas de dados que A
armazenam os elementos de maneira sequencial.
O
E
Assim como as Pilhas, as Filas tm operaes mais restritas do que as operaes das
E
Listas. Nas Filas, os elementos so adicionados na ltima posio e removidos da primeira S
T
posio. Nas Listas, os elementos so adicionados e removidos de qualquer posio. R
U
T
U
Ento, podemos implementar uma Fila simplesmente colocando as restries adequadas R
A
nas operaes de adicionar e remover elementos de uma Lista. Isso bem parecido ao que
D
fizemos com as Pilhas. E
D
FONTE: Caelum (2014, p. 2) A
D
O
S
208 TPICO 4 UNIDADE 3
2 o conceito de filas
Segundo Deitel e Deitel (2003), as filas podem ser aplicadas em diversas aplicaes
computacionais, haja vista que a maioria dos computadores tem apenas um nico processador,
logo, apenas um aplicativo pode ser atendido por vez. Desta forma, os pedidos dos outros
aplicativos so colocados em uma fila, onde cada pedido avana gradualmente para o incio
da fila medida que os aplicativos vo sendo atendidos.
L
I
N
So exemplos de uso de fila em um sistema:
G
U
A
G
Controle de documentos para impresso (spool de impresso).
E
N
Troca de mensagem entre computadores numa rede (pacotes de informaes).
S Solicitaes de acesso a arquivos em uma rede.
D
E
P
R
O
G
R 3 Interface de uso
A
M
A
Em nosso estudo de caso realizaremos uma fila de Pessoas, para tanto, precisaremos
O
criar inicialmente a classe Pessoa, responsvel por permitir a criao de objetos para representar
E
as pessoas a serem cadastradas.
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 4 209
FONTE: O autor
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
FONTE: O autor A
D
E
Agora que j temos a interface de uso da Fila definida vamos escrever a classe TesteFila,
D
a fim de verificar como ela deveria se comportar. A
D
O
S
210 TPICO 4 UNIDADE 3
FONTE: O autor
D
E
P
R
O
FONTE: O autor
G
R
A
M
A
E
S Na sequncia, implementaremos as operaes da Fila de pessoa.
T
R
U
T
U
R
A
D
3.1.1 Inserir uma pessoa
E
D
A As pessoas que entram na Fila devem sempre se colocar no fim da mesma. Vamos
D
O definir que o fim da Fila o fim da Lista que estamos utilizando para implementar. Ento, entrar
S
UNIDADE 3 TPICO 4 211
FONTE: O autor
A prxima pessoa a ser atendida sempre a que est no incio da Fila. No nosso caso,
quem est no incio da Fila a pessoa que est no incio da Lista. L
I
N
G
Ento, basta remover a primeira pessoa. U
A
G
FIGURA 147 CDIGO PARA REMOVER UMA PESSOA DA FILA E
N
S
D
E
P
R
O
G
R
A
M
A
O
FONTE: O autor E
E
S
bom observar que se o mtodo remove() for usado com a Fila vazia ento uma T
R
exceo ser lanada, pois o mtodo removeFirst() lana IndexOutOfBoundsException quando U
T
no existir elemento para remover. (CAELUM, 2014, p. 5). U
R
A
D
E
D
A
D
O
S
212 TPICO 4 UNIDADE 3
FONTE: O autor
D
E
P
R
O
G
R
A
M
A
E
FONTE: O autor
E
S
T
R
U
T
U
R 3.2 GENERALIZAO
A
D
E
Nossa Fila s funciona para armazenar objetos da classe Pessoa. Vamos generaliz-
D
A la para poder armazenar qualquer tipo de objeto. Isso ser feito utilizando a classe Object da
D
O qual todas as classes derivam direta ou indiretamente. Criaremos uma LinkedList de Object
S
UNIDADE 3 TPICO 4 213
FONTE: O autor
Agora podemos armazenar qualquer tipo de objeto na Fila. Isso uma grande
vantagem, pois a classe Fila poder ser reaproveitada em diversas ocasies.
L
Mas, h uma desvantagem, quando removemos um elemento da Fila no I
podemos garantir qual o tipo de objeto que vir. N
A soluo para este problema utilizar o recurso do Generics. A nossa classe G
U
Fila vai ser uma classe parametrizada. Assim, quando criarmos uma Fila, A
poderemos definir com qual tipo de objetos ela deve trabalhar. (CAELUM, G
2014, p. 16). E
N
S
P
FIGURA 151 - CDIGO DA CLASSE FILA GENERALIZADA E PARAMETRIZADA R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
FONTE: O autor A
D
O
S
214 TPICO 4 UNIDADE 3
Vamos criar duas Filas, uma para Pessoa e outra para String.
L
I
N
G
U
A FONTE: O autor
G
E
N
S
Ao executar a classe acima, teremos como sada esperada:
D
[
E A fila est vazia
P Guilherme
R
O Letcia
G
R ]
A
M
A
Em tempo de compilao verificado o tipo de objetos que esto sendo adicionados
O na Fila. Portanto, se voc tentar inserir um objeto do tipo Pessoa em uma Fila de String um
E erro de compilao ser gerado. (CAELUM, 2014, p. 17).
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 4 215
FONTE: O autor
UNI
Na biblioteca do Java, existe uma interface que define a estrutura
de dados Fila. Essa interface chama-se Queue, umas das classes
que implementam Queue a LinkedList. O funcionamento fica
extremamente semelhante com a implementao que fizemos
neste Tpico.
D
E
P
R
O
G
R
A
M
A
O
E
FONTE: O autor
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
216 TPICO 4 UNIDADE 3
LEITURA COMPLEMENTAR
O Collections Framework
Desde a verso 1.2 do JDK (depois que o renomearam para Java 2 SDK), a plataforma
J2SE inclui um framework de colees (a Collections Framework). Uma coleo um objeto
que representa um grupo de objetos. Um framework de colees uma arquitetura unificada
para representao e manipulao de colees, permitindo que elas sejam manipuladas
independentemente dos detalhes de sua implementao.
P
- Reduo do esforo de projetar e implementar APIs, eliminando a necessidade de se criar
R
O
APIs de colees prprias.
G
R
A - Promover o reuso de software, fornecendo uma interface padro para colees e algoritmos
M
A para manipul-los.
O
O Collections Framework consiste em:
E
E
S - Interfaces de colees - representam diferentes tipos de coleo, como conjuntos, listas e
T
R arrays associativos. Estas interfaces formam a base do framework.
U
T
U
R - Implementao de uso geral - implementaes bsicas das interfaces de colees.
A
D
E - Implementaes legadas - as classes de colees de verses anteriores, Vector e Hashtable,
D foram remodeladas para implementar as interfaces de colees (mantendo a compatibilidade).
A
D
O
S - Implementaes de wrappers - adicionam funcionalidades, como sincronizao, a outras
UNIDADE 3 TPICO 4 217
implementaes.
- Algoritmos - mtodos estticos que performam funes teis sobre colees, como a ordenao
de uma lista.
Colees
Collection
L
I
Interface base para todos os tipos de coleo. Ela define as operaes mais bsicas N
G
para colees de objetos, como adio (add) e remoo (remove) abstratos (sem informaes U
A
quanto ordenao dos elementos), esvaziamento (clear), tamanho (size), converso para G
E
array (toArray), objeto de iterao (iterator), e verificaes de existncia (contains e isEmpty). N
S
D
List E
P
Interface que extende Collection, e que define colees ordenadas (sequncias), onde R
O
se tem o controle total sobre a posio de cada elemento, identificado por um ndice numrico. G
R
Na maioria dos casos, pode ser encarado como um array de tamanho varivel, pois como os A
M
arrays primitivos, acessvel por ndices, alm disso, possui mtodos de insero e remoo. A
O
ArrayList
E
E
Implementao de List que utiliza internamente um array de objetos. Em uma insero S
T
onde o tamanho do array interno no suficiente, um novo array alocado (de tamanho R
U
igual a 1.5 vezes o array original), e todo o contedo copiado para o novo array. Em uma T
U
insero no meio da lista (ndice < tamanho), o contedo posterior ao ndice deslocado em R
A
uma posio. Esta implementao a recomendada quando o tamanho da lista previsvel
D
(evitando realocaes) e as operaes de insero e remoo so feitas, em sua maioria, no fim E
da lista (evitando deslocamentos), ou quando a lista mais lida do que modificada (otimizado D
A
para leitura aleatria). D
O
S
218 TPICO 4 UNIDADE 3
LinkedList
Vector
E Stack
E
S
T
Implementao de List que oferece mtodos de acesso para uso da lista como uma
R
U
pilha (LIFO - Last-In-First-Out), como push(), pop() e peek(). Estende Vector, portanto herda
T
U
as vantagens e desvantagens da sincronizao deste. Pode ser usado para se aproveitar as
R implementaes das operaes especficas de pilha.
A
D
E Set
D
A
D Interface que define uma coleo, ou conjunto, que no contm duplicatas de objetos.
O
S Isto , so ignoradas as adies caso o objeto ou um objeto equivalente j exista na coleo.
UNIDADE 3 TPICO 4 219
Por objetos equivalentes, entenda-se objetos que tenham o mesmo cdigo hash (retornado pelo
mtodo hashCode()) e que retornem verdadeiro na comparao feita pelo mtodo equals().
HashSet
Implementao de Set que utiliza uma tabela hash (a implementao da Sun utiliza
a classe HashMap internamente) para armazenar seus elementos. No garante a ordem de
iterao, nem que a ordem permanecer constante com o tempo (uma modificao da coleo
pode alterar a ordenao geral dos elementos). Por utilizar o algoritmo de tabela hash, o acesso
rpido, tanto para leitura quanto para modificao.
LinkedHashSet
E
TreeSet
E
S
T
Implementao de SortedSet que utiliza internamente uma TreeMap, que por sua R
U
vez utiliza o algoritmo Red-Black para a ordenao da rvore de elementos. Isto garante a T
U
ordenao ascendente da coleo, de acordo com a ordem natural dos elementos, definida R
A
pela implementao da interface Comparable ou Comparator. Use esta classe quando precisar
D
de um conjunto (de elementos nicos) que deve estar sempre ordenado, mesmo sofrendo E
modificaes. Para casos onde a escrita feita de uma s vez, antes da leitura dos elementos, D
A
talvez seja mais vantajoso fazer a ordenao em uma List, seguida de uma cpia para uma D
O
LinkedHashSet (dependendo do tamanho da coleo e do nmero de repeties de elementos). S
220 TPICO 4 UNIDADE 3
Map
Interface que define um array associativo, isto , ao invs de nmeros, objetos so usados
como chaves para se recuperar os elementos. As chaves no podem se repetir (seguindo o
mesmo princpio da interface Set), mas os valores podem ser repetidos para chaves diferentes.
Um Map tambm no possui necessariamente uma ordem definida para o percorrimento.
HashMap
Implementao de Map que utiliza uma tabela hash para armazenar seus elementos.
O tempo de acesso aos elementos (leitura e modificao) constante (muito bom) se a funo
de hash for bem distribuda, isto , a chance de dois objetos diferentes retornarem o mesmo
valor pelo mtodo hashCode() pequena.
LinkedHashMap
D
E Hashtable
P
R
O Assim como o Vector, a Hashtable um legado das primeiras verses do JDK, igualmente
G
R sincronizado em cada uma de suas operaes. Pelos mesmos motivos da classe Vector, d
A
M preferncia a outras implementaes, como a HashMap, LinkedHashMap e TreeMap, pelo
A
ganho na performance.
E Properties
E
S
T
Classe que estende Hashtable, especializada para trabalhar com Strings. No
R
U
propriamente uma coleo (j que se restringe basicamente a Strings), mas serve como exemplo
T
U
de uma implementao especializada da interface Map.
R
A
IdentityHashMap
D
E
para equivalncia.
WeakHashMap
SortedMap
TreeMap
L
I
Implementao de SortedMap que utiliza o algoritmo Red-Black para a ordenao da N
G
rvore de elementos. Isto garante a ordenao ascendente da coleo, de acordo com a ordem U
A
natural dos elementos, definida pela implementao da interface Comparable ou Comparator. G
E
Use esta classe quando precisar de um conjunto (de elementos nicos) que deve estar sempre N
S
ordenado, mesmo sofrendo modificaes. Anlogo ao TreeSet, para casos onde a escrita feita
D
de uma s vez, antes da leitura dos elementos, talvez seja mais vantajoso fazer a ordenao E
em uma List, seguida de uma cpia para uma LinkedHashSet (dependendo do tamanho da P
coleo e do nmero de repeties de chaves). R
O
G
R
Interfaces auxiliares A
M
A
O framework Collections define ainda uma srie de interfaces auxiliares, que definem
O
operaes de objetos retornados por mtodos das interfaces de colees.
E
E
Iterator S
T
R
U
Interface que define as operaes bsicas para o percorrimento dos elementos da T
U
coleo. Utiliza o pattern de mesmo nome (Iterator, GoF), desacoplando o cdigo que utiliza R
A
as colees de suas estruturas internas. possvel remover elementos da coleo original
D
utilizando o mtodo remove(), que remove o elemento atual da iterao, mas esta operao E
ListIterator
Interface que estende Iterator, adicionando funes especficas para colees do tipo
List. obtida atravs do mtodo listIterator() de uma List, e possui operaes de percorrimento
em ambos os sentidos (permitido pela indexao dos elementos feita pela List).
Comparable
Interface que define a operao de comparao do prprio objeto com outro, usado
para definir a ordem natural dos elementos de uma coleo. Pode ser usado caso os objetos
que sero adicionados na coleo j implementem a interface (Integer, Double, String etc.),
ou sero implementados pelo programador, que tem a chance de embutir esta interface em
seu cdigo.
Comparator
Interface que define a operao de comparao entre dois objetos por um objeto externo.
utilizado quando os objetos a serem adicionados no podem ser modificados para aceitarem
L a interface Comparable (so de uma biblioteca de terceiros, por exemplo), ou necessria a
I
N troca da estratgia de ordenao em tempo de execuo (ordenao das linhas de uma tabela,
G
U por exemplo). Esta interface prov maior flexibilidade, sem custo adicional significativo. Prefira
A
G seu uso, ao invs da interface Comparable, a no ser que esta seja necessria (isto , voc
E
N usa uma classe que espera objetos que a implementem) ou se a prpria semntica dos objetos
S
exija essa ordem natural (o que bem subjetivo e especfico do domnio/sistema).
D
E
P Enumeration
R
O
G
R \Ancestral\ da interface Iterator, que prov as mesmas funes, a no ser a retirada de
A
M elementos da coleo. Os nomes de seus mtodos so bem mais longos - hasMoreElements()
A
e nextElement() contra hasNext() e next() - o que dificulta a digitao e a leitura do cdigo.
O utilizada basicamente apenas nas classes Vector e Hashtable, podendo ser praticamente
E ignorada e substituda pela interface Iterator.
E
S
T
RandomAccess
R
U
T
U
Interface marcadora (marker interface), que apenas assinala que determinadas
R implementaes de List so otimizadas para acesso aleatrio (por ndice numrico, ao invs
A
de iterators). Esta informao pode ser usada por algumas classes, para que estas possam
D
E alterar suas estratgias internas para ganho de performance.
D
A
D Classes Utilitrias
O
S
UNIDADE 3 TPICO 4 223
Classes utilitrias, como assumidas aqui, so classes que possuem apenas mtodos
estticos, provendo algoritmos comuns.
Collections
Oferece mtodos que efetuam operaes sobre colees. Algumas operaes disponveis
so: busca binria em listas; substituio dos elementos de uma lista por um determinado
objeto; busca pelo menor ou maior elemento (de acordo com a ordem natural definida pelas
interfaces Comparable ou Comparator); inverso de uma lista; embaralhamento; deslocamento
dos elementos; obteno de colees sincronizadas ou imutveis, baseadas em colees j
existentes (atravs do pattern Decorator).
Arrays
Classe utilitria que oferece operaes sobre arrays, incluindo: ordenao, procura
binria, comparao entre arrays, preenchimento, clculo do hashCode baseados nos elementos
de um array, transformao em String e o invlucro de um array por uma implementao de
tamanho fixo de List.
L
I
Programando por Interfaces N
G
U
A
O Collections framework do Java nos fornece toda uma infraestrutura para estruturas G
E
de dados. E, por usar interfaces bsicas bem definidas (Collection, List, Set, SortedSet, Map, N
S
SortedMap), cria tambm abstraes que aumentam a flexibilidade e a facilidade de modificao.
D
E
Quando programamos usando estas classes, devemos sempre referenci-las pelas P
interfaces. Algum pode dizer: Mas no d para instanciar interfaces! Claro que no. Quando R
O
precisamos instanciar uma coleo, utilizamos a implementao concreta mais apropriada, G
R
mas os tipos de parmetros e retornos dos mtodos devem sempre ser uma destas interfaces A
M
bsicas. A
O
Por exemplo, no cdigo seguinte:
E
E
1. privateVectorlistaDeCompras; S
T
2. publicvoidsetListaDeCompras(Vectorlista){ R
U
3. this.listaDeCompras=lista; T
U
4. } R
A
5. publicVectorgetListaDeCompras(){
D
6. returnthis.listaDeCompras; E
7. } D
A
Suponha que tenhamos notado que no h acesso concorrente a este objeto, e a D
O
sincronizao inerente do Vector est impactando na performance do sistema. Para alterarmos S
224 TPICO 4 UNIDADE 3
Nestes casos, se no lugar de Vector tivssemos usado a interface List, bastaria alterar
o local de instanciao da classe, que todo o resto do cdigo teria automaticamente a nova
implementao, sem modificaes. Uma coleo criada em um componente poderia facilmente
ser utilizada por outro, pois tudo o que ele espera uma implementao de List, e no uma
classe concreta.
D
E A Collection a mais genrica, portanto a mais indicada sempre, certo?
P
R
O Errado! Por ser to genrica, suas operaes so muito restritas, dificultando sua
G
R manipulao. Por exemplo, ela no permite o acesso direto a um elemento, toda a leitura
A
M deve ser feita atravs de seu Iterator. Se a coleo ser sempre lida como uma sequncia de
A
elementos, e o acesso aleatrio (por ndice) no faz sentido, isto no problema. Mas se este
O tipo de acesso necessrio (ou mesmo conveniente), faz mais sentido usar uma interface List.
E
E
Este um problema sem uma resposta definitiva, pois depende muito de cada caso.
S
T
Mas posso listar algumas regras bsicas, obtidas da minha prpria experincia. No que isso
R
U
seja grande coisa, mas vale a tentativa.
T
U
R - A interface Collection normalmente usada para conjuntos descartveis, isto , que vo ser
A
lidos apenas uma vez, e no guardados internamente e manipulados (no mximo copiados
D
E para uma outra estrutura).
D - A interface Set serve mais como um marcador da semntica esperada, pois ela no acrescenta
A
D nenhuma operao Collection.
O
S - As interfaces SortedSet e SortedMap servem para forar um contrato, de que os elementos
da coleo viro ordenados. Aparecem, principalmente, como parmetros de mtodos que
UNIDADE 3 TPICO 4 225
esperam por esta ordenao. Porm, na maioria das vezes, as classes TreeSet e TreeMap
sero usadas apenas localmente, como containers temporrios de ordenao.
Exemplos de uso:
5. listaCores.add(amarelo);
6. listaCores.add(branco);
7.
8. //Versoabreviadautilizandoumarray
9. ListlistaCores=newArrayList(Arrays.asList(newString[]{
10. vermelho,verde,amarelo,branco}));
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
UNIDADE 3 TPICO 4 227
RESUMO DO TPICO 4
As filas representam filas de espera; as inseres so feitas na parte superior de uma fila e
as excluses so feitas na parte da frente.
A fila uma verso limitada de uma lista, sendo semelhante a uma fila de caixa de
supermercado, onde a primeira pessoa a ser atendida a primeira da fila, enquanto os
outros clientes entram na fila apenas no fim e esperam ser atendidos.
L
As filas tm muitas aplicaes nos sistemas de computador. A maioria dos computadores I
N
tem apenas um nico processador, portanto apenas um usurio por vez pode ser atendido. G
U
Os pedidos para os outros usurios so colocados em uma fila. O pedido no incio da fila A
G
o prximo a ser atendido. Cada entrada avana gradualmente para o incio da fila medida E
N
que os usurios so atendidos. S
D
E
As filas tambm so muito utilizadas para suportar spooling de impresso. Um ambiente
P
multiusurio pode ter s uma impressora. Muitos usurios podem estar gerando sadas para R
O
impresso. Se a impressora estiver ocupada, outras sadas ainda podem ser geradas. Estas G
R
so colocadas no spool em disco, onde esperam na fila at a impressora ficar disponvel. A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
228 TPICO 4 UNIDADE 3
ID ADE
ATIV
AUTO
1 Considerando os seguintes dados de entrada: 08, 20, 31, 13, 28, 39, 09, 19, 21, 11. Insira
os dados de entrada numa fila. Em seguida retire cada dado da fila e insira numa pilha.
Exiba a pilha. Depois retire os dados da pilha e insira na fila. Exiba a fila. Diante disso,
analise as afirmativas a seguir identificando como as estruturas sero exibidas ao usurio.
I. Pilha: (topo) 11 - 21 - 19 - 09 - 39 - 28 - 13 - 31 - 20 - 08
II. Fila: (comeo) 08 - 20 - 31 - 13 - 28 - 39 - 09 - 19 - 21 - 11 (fim)
III. Fila: (comeo) 11 - 21 - 19 - 09 - 39 - 28 - 13 - 31 - 20 - 08 (fim)
IV. Pilha: (topo) 08 - 20 - 31 - 13 - 28 - 39 - 09 - 19 - 21 - 11
V. A fila mostrada fica com os elementos em ordem invertida dos dados de entrada.
P
R
2 Considere uma estrutura de Fila composta por nmeros inteiros e que possui duas
O
G
operaes bsicas: Inserir(x) e Excluir( ). Alm disso, a representao do estado
R
A
da fila em determinado momento realizada listando os elementos, de forma que o
M primeiro elemento, da esquerda para a direita, o mais antigo presente na fila. Diante
A
disso, analise a sequncia de comandos a seguir, considerando que a lista comea
O vazia.
E
E Inserir (2) > Inserir (3) > Exluir ( ) > Inserir (1) > Excluir( ) > Inserir (4) > Inserir
S
T (5) Excluir ( )
R
U
T
U O estado final da fila ser:
R
A
D a) 1 2 3 4 5
E
b) 2 3 1 4 5
D
A c) 3 1 4
D
O d) 4 5
S
e) 5
UNIDADE 3 TPICO 4 229
IAO
AVAL
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
230 TPICO 4 UNIDADE 3
L
I
N
G
U
A
G
E
N
S
D
E
P
R
O
G
R
A
M
A
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S
231
REFERNCIAS
AKITA, Fabio. Repensando a web com rails. Rio de Janeiro: Ed. Brasport, 2006.
L
ALVES, Ricardo. Recursividade em Java. Disponvel em: <http://www.linhadecodigo.com. I
N
br/artigo/3316/recursividade-em-java.aspx#ixzz3EQu8W9rl>. Acesso em: 08 set. 2014. G
U
A
G
ANCIBE. Conceitos bsicos de linguagem de programao C. Disponvel em: <http:// E
N
www.ancibe.com.br/Apostila%20de%20Algoritmos/apostila%20de%20linguagem%20C%20 S
E
BORAKS, Silvio. Programao com Java: Uma Introduo Abrangente. Rio de Janeiro. Ed. S
T
Bookman, 2013. R
U
T
U
BRAZ. Maria H. Conceitos bsicos de programao. Disponvel em: <https://fenix.tecnico. R
A
ulisboa.pt/downloadFile/3779571246306/aula78911.pdf>. Acesso em: 10 Set. 2014.
D
E
BROOKSHEAR, Glenn J. Cincia da computao, uma viso abrangente. Porto Alegre: D
Ed. Bookman, 2013. A
D
O
S
232
CELES, Waldemar; RANGEL, Jos Luis. Cadeia de caracteres. Disponvel em: <http://
www.ic.unicamp.br/~ra069320/PED/MC102/1s2008/Apostilas/Cap06.pdf>. Acesso em: 1 out.
2014.
P COSTA, Daniel G. Administrao de redes com scripts: Bash Script, Python e VBScript. 2
R
O ed. Rio de Janeiro: Ed. Brasport, 2010.
G
R
A
M
COSTA, Umberto S.; NETA, Natlia, S. L. Matemtica aplicada. Disponvel em: <http://
A
O
out. 2014.
E
CRUZ, Adriano. Ponteiros. 1999. Disponvel em: <http://equipe.nce.ufrj.br/adriano/c/apostila/
E
S ponte.htm#matrizes>. Acesso em: 3 out. 2014.
T
R
U
T Deitel. Harvey M.; DEITEL. Paul J. Java, como programar. Traduo Carlos Arthur Lang
U
R Lisba, 4. ed. Porto Alegre: Bookman, 2003.
A
D
E DORNELLES, Adalberto A. F. Fundamentos Linguagem de C. 1997. Disponvel em:
D <http://www.ebah.com.br/content/ABAAAAmX8AL/fundamentos-linguagem-c>. Acesso em:
A
D 08 set. 2014.
O
S
233
EDELWEISS, Nina; GALANTE, Renata. Estrutura de dados. Porto Alegre: Ed. Bookman,
2009.
FEIJ, Bruno; SILVA, Flvio S. C.; CLUA, Esteban. Introduo cincia da computao
Com Jogos. Rio de Janeiro: Ed. Elsevier, 2010.
E
FROZZA, Angelo Augusto. Estrutura de dados variveis compostas. Disponvel
E
em: <http://www.ifc-camboriu.edu.br/~frozza/2011.1/IX10/IX10-EDD-Aula004- S
T
VariaveisCompostas-parcial.pdf >. Acesso em: 1 out. 2014. R
U
T
U
GARCIA, Vincius. Mtodos computacionais. Tipos estruturados. 2010. Disponvel em: R
A
<http://viniciusgarcia.files.wordpress.com/2010/08/aulatiposestruturados.pdf>. Acesso em: 1
D
out. 2014. E
D
A
GACHO, Felipe. Bsico e intermedirio. Disponvel em: <http://www.milfont.org/blog/wp- D
O
content/upload/Manual.pdf>. Acesso em: 10 set. 2014. S
234
GRIFFITHS, David e GRIFFITHS, Dawn. O guia amigo do seu crebro. Use a cabea!
(Head First) Rio de Janeiro: Ed. Alta Books, 2013.
HORSTMANN, Cay. Conceitos de computao com Java. Porto Alegre: Ed. Bookman,
2008.
E
Laboratrio de Programao I. Estruturas de Dados Homognea. Disponvel em: <http://cae.
ucb.br/conteudo/programar/labor1/new_matriz.html>. Acesso em: 3 out. 2014.
E
S
T
R LAUREANO, Marcos. Estrutura de dados com algoritmos. Rio de Janeiro. Brasport. 2008.
U
T
U
R LEITE, Mario. Tcnicas de programao. Uma abordagem Moderna. Rio de Janeiro: Ed.
A
Brasport, 2006.
D
E
D LIMA, Edirlei S. INF 1007 Programao II. Aula 12 Tipos Abstratos de Dados. Disponvel
A
D em: <http://edirlei.3dgb.com.br/aulas/prog2_2014_1/Prog2_Aula_12_TAD.pdf>. Acesso em:
O
S 3 out. 2014.
235
LIPSON, Marc e LIPSCHUTZ, Seymour. Matemtica discreta. Porto Alegre: Ed. Bookman,
1997.
LOPES, Arthur V. Introduo programao com ADA 95. Canoas: Ed. Ulbra, 1997.
D
A
MITCHELL, Mark; OLDHAM, Jeffrey e SAMUEL, Alex. Programao linux avanada. Ed. D
O
S
236
First, 2001.
MOKARZEL, Fbio; SOMA, Nei Y. Introduo Cincia da Computao. Rio de Janeiro: Ed.
Elsevier, 2008.
D
E RAMOS, Vincius M; NETO, Joo N.; VEGA, talo S. Linguagens formais. Porto Alegre: Ed.
P Artmed, 2009.
R
O
G
R REBOLLO, Carlos. Introduo linguagem C. 2013. Disponvel em: <http://www.cenapad.
A
M
unicamp.br/servicos/treinamentos/apostilas/apostila_C.pdf>. Acesso em: 09 out. 2014.
A
O
RITA, Sandra. Treinamento em lgica de programao. So Paulo: Ed. Digerati Books,
E
2009.
E
S ROCHA, Csar. Linguagem C: Estruturas e Alocao Dinmica. 2010. Disponvel em:
T
R <http://www.linuxemais.com/cesar/_media/disciplinas/pged/pged_02.pdf>. Acesso em: 10
U
T Set. 2014.
U
R
A
RODRIGUES, Diego M. Linguagem C (Algoritmos). Disponvel em: <http://www.ebah.
D
E com.br/content/ABAAABacgAB/linguagem-c-algoritmo>. Acesso em: 08 set. 2014.
D
A
D S, Robison. Transposio de matrizes. Disponvel em: <http://www.infoescola.com/
O
S matematica/transposicao-de-matrizes/>. Acesso em: 3 out. 2014.
237
D
WordPress. CEULP. Paradigmas de Linguagem de Programao 2009/1 Ceulp. E
Disponvel em: <http://plp2009c.wordpress.com/>. Acesso em: 08 set. 2014. P
R
O
XAVIER, Denys W. Funes. 2010. Disponvel em: <http://www.tiexpert.net/programacao/ G
R
java/funcoes.php>. Acesso em: 10 set. 2014. A
M
A
O
E
S
T
R
U
T
U
R
A
D
E
D
A
D
O
S