SlideShare uma empresa Scribd logo
2
Mais lidos
3
Mais lidos
4
Mais lidos
CIRO RAFAEL FEITOSA LOPES
GRADUANDO S.I - UAST/UFRPE
class No:
def __init__(self,dado):
self.dado = dado
self.proximo = None
self.anterior = None
class Lista:
def __init__(self):
self.inicio = None
self.fim = None
self.__tamanho = 0
def vazia(self):
if self.inicio is None:
return True
return False
def add_inicio(self, valor):
no = No(valor)
if self.vazia():
self.inicio = self.fim = no
else:
no.proximo = self.inicio
self.inicio.anterior = no
no.anterior = None
self.inicio = no
self.__tamanho += 1
def add_fim(self, valor):
no = No(valor)
if self.vazia():
self.inicio = self.fim = no
else:
self.fim.proximo = no
no.anterior = self.fim
no.proximo = None
self.fim = no
self.__tamanho += 1
def inserir(self, i, valor):
metade = int(self.__tamanho / 2)
if i > self.__tamanho:
raise IndexError ("Posição de memória inválida")
elif i == self.__tamanho:
self.add_fim(valor)
CIRO RAFAEL FEITOSA LOPES
GRADUANDO S.I - UAST/UFRPE
elif i == 0:
self.add_inicio(valor)
else:
if i <= metade:
no = No(valor)
perc = self.inicio
cont = 0
while cont < i - 1:
perc = perc.proximo
cont += 1
no.proximo = perc.proximo
perc.proximo.anterior = no
perc.proximo = no
no.anterior = perc
else:
no = No(valor)
perc = self.fim
cont = self.__tamanho
while cont > i:
perc = perc.anterior
cont -= 1
no.proximo = perc.proximo
perc.proximo.anterior = no
perc.proximo = no
no.anterior = perc
self.__tamanho += 1
def remover_inicio(self):
if self.vazia():
raise TypeError("Lista está vazia!")
elif self.__tamanho == 1:
self.inicio = None
self.fim = None
else:
self.inicio = self.inicio.proximo
self.inicio.anterior = None
self.__tamanho -= 1
def remover_fim(self):
if self.vazia():
raise TypeError("Lista está vazia!")
elif self.__tamanho == 1:
self.inicio = None
self.fim = None
else:
self.fim = self.fim.anterior
self.fim.proximo = None
self.__tamanho -= 1
CIRO RAFAEL FEITOSA LOPES
GRADUANDO S.I - UAST/UFRPE
def remover_index(self, i):
if self.vazia(): #self.inicio is None:
raise TypeError("Lista está vazia!")
elif i == 0:
self.remover_inicio()
elif i == self.__tamanho - 1:
self.remover_fim()
else:
perc = self.inicio
cont = 0
while cont < i -1:
perc = perc.proximo
cont += 1
aux = perc.proximo
perc.proximo = aux.proximo
aux.proximo.anterior = perc
aux = None
self.__tamanho -= 1
def remover_valor(self, elemento):
if self.__tamanho == 0:
return None
perc = self.inicio
cont = 0
while perc.elemento != elemento:
perc = perc.proximo
cont += 1
self.remover_index(cont)
def buscarIndex(self,idc):
perc=self.inicio
cont=0
while cont<self.tamanho:
if cont==idc:
return f'No indice {idc} tem valor {perc.dado}. '
perc=perc.proximo
cont+=1
raise IndexError('list out of range')
def buscarValor(self,elem):
perc=self.inicio
cont=0
while perc:
if perc.dado==elem:
return f'{elem} está na posição {cont}.'
perc=perc.proximo
cont+=1
CIRO RAFAEL FEITOSA LOPES
GRADUANDO S.I - UAST/UFRPE
raise ValueError(f'{elem} não está na lista.')
def sobrescrever(self, index, elemento):
perc = self.inicio
cont = 0
while cont != index:
perc = perc.proximo
cont += 1
perc.elemento = elemento
def get_tamanho(self):
return self.__tamanho
def get_index(self, i):
perc = self.inicio
cont = 0
while cont < self.__tamanho:
if cont == i:
return perc.dado
perc = perc.proximo
cont += 1
def countPorValor(self, var):
cont=0
perc=self.inicio
while perc:
if perc.dado==var:
cont+=1
perc=perc.proximo
print(f'{var} aparece {cont} vezes na lista.')
def __str__(self):
valor = '['
if self.inicio is not None:
perc = self.inicio
valor += str(perc.dado)
while perc.proximo is not None:
perc = perc.proximo
valor += ', '
valor += str(perc.dado)
valor += ']'
return valor
def __len__(self):
return self.get_tamanho()
def __getitem__(self, item):#aqui é pra exibi desse jeito: lista[5] exibindo o valor em seguida
CIRO RAFAEL FEITOSA LOPES
GRADUANDO S.I - UAST/UFRPE
if item >= self.__tamanho:
raise StopIteration
return self.get_index(item)
def __setitem__(self, key, value):
return self.sobrescrever(key, value)
lista = Lista()
lista.add_inicio(2)
lista.add_fim(1)
lista.add_fim(3)
lista.add_inicio(0)
lista.inserir(2,2)
lista.inserir(1,1)
lista.remover_index(3)
print(lista)
print(lista[0])
print(lista.buscarValor(3))

Mais conteúdo relacionado

PDF
Data Preprocessing Cheatsheet for learners
PPTX
The Case for Learned Index Structures
PPTX
O caixeiro viajante é np completo
PDF
NVIDIA Rapids presentation
PDF
Goodfellow, Bengio, Couville (2016) "Deep Learning", Chap. 7
PPTX
Scott Lundberg, Microsoft Research - Explainable Machine Learning with Shaple...
PPTX
Active learning
PPT
deep learning UNIT-1 Introduction Part-1.ppt
Data Preprocessing Cheatsheet for learners
The Case for Learned Index Structures
O caixeiro viajante é np completo
NVIDIA Rapids presentation
Goodfellow, Bengio, Couville (2016) "Deep Learning", Chap. 7
Scott Lundberg, Microsoft Research - Explainable Machine Learning with Shaple...
Active learning
deep learning UNIT-1 Introduction Part-1.ppt

Mais procurados (20)

PDF
Tabela Hash com Lista Encadeada
PPT
Árvore Binária
PDF
Estrutura de Dados - Listas Encadeadas
PDF
Inserindo em Ordem Crescente na Lista Encadeada
PDF
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
PPTX
Introdução a linguagem C# (CSharp)
PDF
Java script - funções
PDF
Como descobrir e classificar coisas usando machine learning sem compilcação
ODP
Lista Duplamente Encadeada
PPTX
Caminhos Mínimos - Algoritmo de Dijkstra
PDF
Insertion sort
PDF
0679-L - Implantação do plano diretor da atenção primária à saúde acolhimen...
PDF
Manual de portugol
PDF
Simbolos do teclado do computador
PDF
Estrutura de dados - Pilhas
PPTX
Curso Microsoft Excel Specialist
PPTX
Funções e Fórmulas em Excel 2010
PPTX
Algoritmo recursivo
PPTX
Algoritmo de quicksort
PPTX
Linguagem C - Vetores
Tabela Hash com Lista Encadeada
Árvore Binária
Estrutura de Dados - Listas Encadeadas
Inserindo em Ordem Crescente na Lista Encadeada
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Introdução a linguagem C# (CSharp)
Java script - funções
Como descobrir e classificar coisas usando machine learning sem compilcação
Lista Duplamente Encadeada
Caminhos Mínimos - Algoritmo de Dijkstra
Insertion sort
0679-L - Implantação do plano diretor da atenção primária à saúde acolhimen...
Manual de portugol
Simbolos do teclado do computador
Estrutura de dados - Pilhas
Curso Microsoft Excel Specialist
Funções e Fórmulas em Excel 2010
Algoritmo recursivo
Algoritmo de quicksort
Linguagem C - Vetores
Anúncio

Semelhante a Lista duplamente encadeada em python (20)

PDF
05 listas
PDF
Programando em python listas
PDF
004 programando em python - listas
PPT
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
PPT
Aula_02_-_Listas_com_Vetores-OOP.ppt
PDF
PPT
004 - Programando em Python - Listas.ppt
PDF
PDF
Listas Encadeadas
DOCX
Listas saod inamicas20172
PPTX
PDF
Estrutura de dados - Implementação de filas com listas
PPTX
PDF
Lista duplamente encadeada
PPTX
Estruturas de dados em Python
PDF
Usar explicação 01
PDF
Usar explicação 01
PDF
Listas Estáticas Encadeadas usando linguagem C
PDF
Algorimos java
05 listas
Programando em python listas
004 programando em python - listas
Aula_02_-_Listas_com_Vetores-OOP_2011_2.ppt
Aula_02_-_Listas_com_Vetores-OOP.ppt
004 - Programando em Python - Listas.ppt
Listas Encadeadas
Listas saod inamicas20172
Estrutura de dados - Implementação de filas com listas
Lista duplamente encadeada
Estruturas de dados em Python
Usar explicação 01
Usar explicação 01
Listas Estáticas Encadeadas usando linguagem C
Algorimos java
Anúncio

Último (20)

PDF
Fiqh da adoração (islamismo)
PDF
Formação politica brasil_2017.pptx.pdf
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPTX
Revolução Industrial - Aula Expositiva - 3U4.pptx
PPTX
INDÚSTRIA_ Histórico da industrialização.pptx
PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PPTX
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
O retorno a origem (islã Islamismo)
PPTX
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PPT
História e Evolução dos Computadores domésticos
PPTX
Ocupação e transformação dos territórios.pptx
PDF
[Slides] A Literatura no ENEM 2017 (1).pdf
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
Fiqh da adoração (islamismo)
Formação politica brasil_2017.pptx.pdf
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
Revolução Industrial - Aula Expositiva - 3U4.pptx
INDÚSTRIA_ Histórico da industrialização.pptx
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
O retorno a origem (islã Islamismo)
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
GUERRAFRIA.pptdddddddddddddddddddddddddx
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
História e Evolução dos Computadores domésticos
Ocupação e transformação dos territórios.pptx
[Slides] A Literatura no ENEM 2017 (1).pdf
Uma Introdução às Ciências do Alcorão (Islam)
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
HISTÓRIA DO BRASIL - anos de Democracia.pptx
Aula 13 - Tópico Frasal - Argumentação.pptx
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf

Lista duplamente encadeada em python

  • 1. CIRO RAFAEL FEITOSA LOPES GRADUANDO S.I - UAST/UFRPE class No: def __init__(self,dado): self.dado = dado self.proximo = None self.anterior = None class Lista: def __init__(self): self.inicio = None self.fim = None self.__tamanho = 0 def vazia(self): if self.inicio is None: return True return False def add_inicio(self, valor): no = No(valor) if self.vazia(): self.inicio = self.fim = no else: no.proximo = self.inicio self.inicio.anterior = no no.anterior = None self.inicio = no self.__tamanho += 1 def add_fim(self, valor): no = No(valor) if self.vazia(): self.inicio = self.fim = no else: self.fim.proximo = no no.anterior = self.fim no.proximo = None self.fim = no self.__tamanho += 1 def inserir(self, i, valor): metade = int(self.__tamanho / 2) if i > self.__tamanho: raise IndexError ("Posição de memória inválida") elif i == self.__tamanho: self.add_fim(valor)
  • 2. CIRO RAFAEL FEITOSA LOPES GRADUANDO S.I - UAST/UFRPE elif i == 0: self.add_inicio(valor) else: if i <= metade: no = No(valor) perc = self.inicio cont = 0 while cont < i - 1: perc = perc.proximo cont += 1 no.proximo = perc.proximo perc.proximo.anterior = no perc.proximo = no no.anterior = perc else: no = No(valor) perc = self.fim cont = self.__tamanho while cont > i: perc = perc.anterior cont -= 1 no.proximo = perc.proximo perc.proximo.anterior = no perc.proximo = no no.anterior = perc self.__tamanho += 1 def remover_inicio(self): if self.vazia(): raise TypeError("Lista está vazia!") elif self.__tamanho == 1: self.inicio = None self.fim = None else: self.inicio = self.inicio.proximo self.inicio.anterior = None self.__tamanho -= 1 def remover_fim(self): if self.vazia(): raise TypeError("Lista está vazia!") elif self.__tamanho == 1: self.inicio = None self.fim = None else: self.fim = self.fim.anterior self.fim.proximo = None self.__tamanho -= 1
  • 3. CIRO RAFAEL FEITOSA LOPES GRADUANDO S.I - UAST/UFRPE def remover_index(self, i): if self.vazia(): #self.inicio is None: raise TypeError("Lista está vazia!") elif i == 0: self.remover_inicio() elif i == self.__tamanho - 1: self.remover_fim() else: perc = self.inicio cont = 0 while cont < i -1: perc = perc.proximo cont += 1 aux = perc.proximo perc.proximo = aux.proximo aux.proximo.anterior = perc aux = None self.__tamanho -= 1 def remover_valor(self, elemento): if self.__tamanho == 0: return None perc = self.inicio cont = 0 while perc.elemento != elemento: perc = perc.proximo cont += 1 self.remover_index(cont) def buscarIndex(self,idc): perc=self.inicio cont=0 while cont<self.tamanho: if cont==idc: return f'No indice {idc} tem valor {perc.dado}. ' perc=perc.proximo cont+=1 raise IndexError('list out of range') def buscarValor(self,elem): perc=self.inicio cont=0 while perc: if perc.dado==elem: return f'{elem} está na posição {cont}.' perc=perc.proximo cont+=1
  • 4. CIRO RAFAEL FEITOSA LOPES GRADUANDO S.I - UAST/UFRPE raise ValueError(f'{elem} não está na lista.') def sobrescrever(self, index, elemento): perc = self.inicio cont = 0 while cont != index: perc = perc.proximo cont += 1 perc.elemento = elemento def get_tamanho(self): return self.__tamanho def get_index(self, i): perc = self.inicio cont = 0 while cont < self.__tamanho: if cont == i: return perc.dado perc = perc.proximo cont += 1 def countPorValor(self, var): cont=0 perc=self.inicio while perc: if perc.dado==var: cont+=1 perc=perc.proximo print(f'{var} aparece {cont} vezes na lista.') def __str__(self): valor = '[' if self.inicio is not None: perc = self.inicio valor += str(perc.dado) while perc.proximo is not None: perc = perc.proximo valor += ', ' valor += str(perc.dado) valor += ']' return valor def __len__(self): return self.get_tamanho() def __getitem__(self, item):#aqui é pra exibi desse jeito: lista[5] exibindo o valor em seguida
  • 5. CIRO RAFAEL FEITOSA LOPES GRADUANDO S.I - UAST/UFRPE if item >= self.__tamanho: raise StopIteration return self.get_index(item) def __setitem__(self, key, value): return self.sobrescrever(key, value) lista = Lista() lista.add_inicio(2) lista.add_fim(1) lista.add_fim(3) lista.add_inicio(0) lista.inserir(2,2) lista.inserir(1,1) lista.remover_index(3) print(lista) print(lista[0]) print(lista.buscarValor(3))