-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLDDE.py
119 lines (95 loc) · 3.03 KB
/
LDDE.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"""."""
class LDDE:
"""."""
def __init__(self):
"""Construtor."""
self.tamanho = 0
self.primeiro = None
self.ultimo = None
def insere(self, conteudo):
"""Insere no fim."""
novo = No(conteudo=conteudo)
if self.tamanho == 0:
self.primeiro = novo
self.ultimo = novo
else:
novo.anterior = self.ultimo
self.ultimo.proximo = novo
self.ultimo = 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 busca_conteudo(self, conteudo):
"""Busca por conteudo, retorna posicao."""
if self.primeiro.conteudo == conteudo:
return 0
if self.ultimo.conteudo == conteudo:
return self.tamanho - 1
posicao = 0
for i in self:
if i == conteudo:
return posicao
posicao += 1
return -1
def remove(self, pos):
"""Remove por posicao."""
if pos < 0 or pos >= self.tamanho or self.tamanho == 0:
return False
if pos == 0:
self.primeiro = self.primeiro.proximo if self.tamanho > 1\
else None
elif pos == self.tamanho - 1:
self.ultimo.anterior.proximo = None
self.ultimo = self.ultimo.anterior
else:
elemento = self.primeiro
for i in range(pos):
if elemento.proximo:
elemento = elemento.proximo
if elemento.proximo:
elemento.anterior.proximo = elemento.proximo
elemento.proximo.anterior = elemento.anterior
self.tamanho -= 1
return True
def remove_conteudo(self, conteudo):
"""Remove por conteudo."""
return self.remove(self.busca_conteudo(conteudo))
def __str__(self):
"""Permite o print direto na instancia da 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):
"""Iterador."""
elemento = self.primeiro
while elemento:
yield elemento.conteudo
elemento = elemento.proximo
def __len__(self):
"""Tamanho da lista."""
return self.tamanho
class No:
"""."""
def __init__(self, conteudo=None, anterior=None, proximo=None):
"""Construtor."""
self.conteudo = conteudo
self.anterior = anterior
self.proximo = proximo
def __str__(self):
"""Usando para dar print direto no No."""
return str(self.conteudo)