> Existe ponteiro em python?
Só debaixo do pano. Python é uma linguagem de alto-nível próxima
do problema. Ponteiro é uma abstração de baixo-nível, próxima do
hardware.
Python lida com referências para objetos, as quais desenpenham papéis
similares aos ponteiros.
> como eu estou aprendendo estrutura de dados árvore na faculdade, eu
> gostaria de implementá-la em python,se não tiver ponteiros como se faz
> então?
Existem diversas formas. É provável que vc esteja estudando estruturas
de dados em C ou Pascal. Vc pode implementá-las nestas linguagens e
usar Python para testes (usando Python C-API ou PythonForDelphi).
Ou vc pode fazer uma implementação em Python puro usando orientação
a objetos e referências.
Vou só te dar um empurrãozinho inicial...
class No(object):
def __init__(self, valor):
self.valor = valor
self.esq = None
self.dir = None
class Arvore(object):
def __init__(self):
self.raiz = None
def procura(self, valor, pivo):
if pivo is None:
return None
if pivo.valor==valor:
return pivo
if pivo.valor<valor:
return self.procura(valor, pivo.dir)
else:
return self.procura(valor, pivo.esq)
A implementação de inserção fica como exercício, se vc se enroscar
a gente dá uma mão.
> Mais uma pergunta. Um colega, certa vez, me perguntou se existe algo
> parecido com o "struct" da linguagem C em python. Eu respondi que não,
> estou certo?
Sim e não. Olha para o exemplo que eu dei, a classe No serve ao mesmo
propósito
que uma struct do C, mas a forma como são implementadas e materializadas
na memória é bem diferente.
O importante é lembrar que o nível de abstração é diferente. Numa struct
vc sabe alguma coisa sobre como os campos são armazenados na memória, no
caso da classe não. Quando vc quer se preocupar com isso, se usa C.
Quando não precisamos, uma linguagem de alto nível é legal.
Abração,
Senra
Rodrigo Senra
______________
rsenra @ acm.org
http://rodrigo.senra.nom.br
========================================================
Antes de enviar sua mensagem dê uma lida em:
http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar
========================================================
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html
Na verdade, tem pelo menos uma coisa:
Acessar um arquivo binário, em que os campos de dados são contados em
bytes.
(ex. ao se gravar, ou ler um arquivo de imagens - em geral usamos uma
biblitoeca de alto-nível para isso, mas podemos estar implementando
suporte a um novo tipo de arquivo, ou querer apenas uma informação
básica para a qual seria "overkill" importar o PIL)
Para esses casos, python tem o módulo "struct" - que justamente
permite que você tenha acesso a bytes, inteiros de 4 bytes, floats, e
etc, que estejam dentro de um conjunto de bytes lidos de um arquivo
(que em geral tratamos apenas como string)
>>> import struct
>>> a = open ("error.bmp")
>>>
>>> a.s
a.seek a.softspace
>>> a.seek (18)
>>> b = a.read (8)
>>> width, height = struct.unpack ("<ii", b)
>>> width
554
>>> height
491
>>>
O exemplo acima le oito bytes no offset 18 de um arquivo BMP, e usa o
método unpack para interpreta-los como dois inteiros de 4 bytes
consecutivos. (usei outras ferramentas antes para verificar que esses
campos continham a largura e a altura da imagem).
Numa aplicação que fosse escrever arquivos BMP, como numa aplicação em
C, o cabeçalho desse tipo de arquivo teria que ter todos os seus
campos codificados - ai sim, entram os objetos: em Python cria-se um
objeto que contem (ou extende) um dicionário, com uma entrada para
cada campo do cabeçalho, com valores padrão onde for possível, e
nesta classe, um método "encode" que usa o struct.pack para devolver
uma string com o cabeçalho codificado de forma binária. (O __init__
desta classe se recebesse uma string, decodificaria a mesma
preenchendo os campos).
Resumindo: na aplicação Python só nos preocupariamos com a "struct" em
si em exatas duas linhas de código para cada estrutura de dados
binária, não importando a complexidade da aplicação - uma para
codificar a estrutura,e outra para decodifica-la. (e claro, a
estrutura é representada por uma string que estará numa única linha)
Eu gostaria de ter encontrado este link quando eu tava pagando a cadeira =(
Boa sorte!
--
Até,
Luciano
<quote>
"Na prática, a teoria é outra!"
</quote>
:wq!
class Arvore:
def __init__(self , info):
self.info = info
self.dir = None
self.esq = None
def procura (self , pivo , info ):
if pivo.info >= info:
if pivo.esq == None:
return pivo
else:
return self.procura (pivo.esq , info)
else:
if pivo.dir == None:
return pivo
else:
return self.procura (pivo.dir , info)
def insere (self , info):
pai = self.procura (self , info)
if pai.info >= info:
pai.esq = Arvore(info)
else:
pai.dir = Arvore(info)
def imprime (self):
if self != None:
print self.info
if self.esq != None:
self.esq.imprime ()
if self.dir != None:
self.dir.imprime ()
while 1:
info = int(raw_input ('Digite a informação: '))
if info == -1 :
break
try:
raiz.insere (info)
except NameError:
raiz = Arvore(info)
print "Imprimindo a Arvore\n"
raiz.imprime ()
--
Thiago <toton...@gmail.com>
> Exercício resolvido, não sei se ficou legal. Agora só falta criar um
> método de remoção, e dar um jeito de manter a árvore balanceada. Mas
> estas coisas ainda não aprendi.
Acho que vc vai gostar disso aqui:
http://en.wikipedia.org/wiki/Binary_search_tree
Agora todo mundo comigo no refrão:
""" Google é amigo da garotada, dá... e não cobra nada """ ;o)
Só zoeira, o problema do Google ainda é o de todo oráculo...
para se obter a resposta certa ainda é necesseario um
acólito bizurado na arte de fazer a pergunta certa =)
> Aqui o algoritmo.
Parece que o empurrãozinho ajudou ;o)
Abração,
Senra
Rodrigo Senra
______________
rsenra @ acm.org
http://rodrigo.senra.nom.br