-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLDE.py
96 lines (76 loc) · 2.36 KB
/
LDE.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"""."""
class LDE:
"""."""
def __init__(self):
"""Construtor."""
self.tamanho = 0
self.primeiro = None
def insere(self, conteudo):
"""Insere no fim da lista."""
novo = No(conteudo=conteudo)
if self.tamanho == 0:
self.primeiro = novo
else:
elemento = self.primeiro
while elemento.proximo:
elemento = elemento.proximo
elemento.proximo = novo
self.tamanho += 1
def busca(self, pos):
"""Busca por posicao."""
if pos < 0:
return None
elemento = self.primeiro
for i in range(pos):
if elemento.proximo:
elemento = elemento.proximo
else:
return None
return elemento.conteudo
def remove(self, pos):
"""Deleta por posicao."""
if pos < 0 or self.tamanho == 0 or pos >= self.tamanho:
return False
if pos == 0:
self.primeiro = self.primeiro.proximo if self.tamanho > 1\
else None
else:
elemento = self.primeiro
for i in range(pos - 1):
if elemento.proximo:
elemento = elemento.proximo
if elemento.proximo.proximo:
elemento.proximo = elemento.proximo.proximo
else:
elemento.proximo = None
self.tamanho -= 1
return True
def __str__(self):
"""Usado para dar print na lista."""
elemento = self.primeiro
str_lista = '['
while elemento:
str_lista += str(elemento.conteudo)
if elemento.proximo:
str_lista += ', '
elemento = elemento.proximo
str_lista += ']'
return str(str_lista)
def __iter__(self):
"""Constroi o iterador da classe."""
elemento = self.primeiro
while elemento:
yield elemento.conteudo
elemento = elemento.proximo
def __len__(self):
"""Retorna o tamanho da lista."""
return self.tamanho
class No:
"""No."""
def __init__(self, conteudo=None, proximo=None):
"""Construtor."""
self.conteudo = conteudo
self.proximo = proximo
def __str__(self):
"""Usando para printar o conteudo do no."""
return str(self.conteudo)