def __init__(self): self.__elementos = ListaLigada() self.__numero_categorias = 10 # criar uma nova lista ligada para associar os elementos ao seu respectivo indice for i in range(self.__numero_categorias): self.__elementos.inserir(ListaLigada())
def __init__(self): self.__elementos = ListaLigada() self.__numeroCategorias = 10 # numero de categorias para a tabela self.__tamanho = 0 # o tamanho da tabela for i in range( self.__numeroCategorias ): # for para percorrer o numero de categorias da tabela self.__elementos.inserir(ListaLigada( )) # inserir uma lista para armazenar o elementos da categoria
class Fila(): def __init__(self): self.__elementos = ListaLigada() # metodo verifica se esta vazia def esta_vazia(self): self.__elementos.estar_vazia() # metodo inserir na fila def enfileirar(self, elemento): self.__elementos.inserir(elemento) # insere sempre no fim da fila # metodo remove da fila def desenfileirar(self): if self.esta_vazia(): return None resultado = self.__elementos.recuperar_elemento_no( 0) # pega o primeiro elemento da fila self.__elementos.remover_posicao( 0) # remove o elemento do inicio da fila return resultado # retorna o elemento desenfileirado # metodo para retornar todos os elementos da fila / sobreescreve o metodo str presente na lista ligada def __str__(self): temp = self.__elementos.__str__() return temp
class TabelaHash(): def __init__(self): self.__elementos = ListaLigada() self.__numeroCategorias = 10 # numero de categorias para a tabela self.__tamanho = 0 # o tamanho da tabela for i in range( self.__numeroCategorias ): # for para percorrer o numero de categorias da tabela self.__elementos.inserir(ListaLigada( )) # inserir uma lista para armazenar o elementos da categoria @property def tamanho(self): return self.__tamanho def __gerar_numero_hash(self, elemento): # gera um hash pro elemento, divide por 10 e retorna o resto da divisao. nunca sera gerado um numero maior # que o numero de categorias return hash(elemento) % self.__numeroCategorias def contem(self, elemento): numero_hash = self.__gerar_numero_hash( elemento) # gera um hash e joga na variavel categoria = self.__elementos.recuperar_elemento_no( numero_hash) # recupara a categoria do elemento return categoria.cotem( elemento ) # verifica se o elemento passado como paramentor esa na categoria def inserir(self, elemento): if self.contem( elemento ): # verifica se o elemento existe. Caso sim retorna false return False # gera uma hash do elemento para ver qual categoria se enquadra numero_hash = self.__gerar_numero_hash(elemento) categoria = self.__elementos.recuperar_elemento_no( numero_hash) # recupera a categoria categoria.inserir(elemento) # insere o elemento self.__tamanho += 1 # incrementa o tam da tabela return True def remover(self, elemento): numero_hash = self.__gerar_numero_hash(elemento) categoria = self.__elementos.recuperar_elemento_no(numero_hash) categoria.remover_elemento(elemento) self.__tamanho -= 1 # metodo para retornar todos os elementos da tabela de espalhamento def __str__(self): return self.__elementos.__str__()
def __init__(self): self.__elementos = ListaLigada()
class Conjunto(): def __init__(self): self.__elementos = ListaLigada() def inserir(self, elemento): # verificar se o elemento nao esta no conjunto para poder inserir if not self.contem( elemento ): # se o metodo contem retorna falso, entra na condição self.__elementos.inserir(elemento) return True # Retorna True caso o elemento tenha sido inserido com sucesso return False # nao conseeguiu inserir retorna falso def inserir_posicao(self, posicao, elemento): # mesma logica do metodo inserir if not self.contem(elemento): self.__elementos.inserir_posicao(elemento, posicao) return True return False def __str__(self): return self.__elementos.__str__() def contem(self, elemento): return self.__elementos.cotem(elemento) def indice(self, elemento): return self.__elementos.indice(elemento) def estar_vazia(self): return self.__elementos.estar_vazia() def recuperar_elemento_no(self, posicao): return self.__elementos.recuperar_elemento_no(posicao) def recuperar_no(self, posicao): return self.__elementos.recuperar_no(posicao) def tamanho(self): return self.__elementos.tamanho def remover_posicao(self, posicao): self.__elementos.remover_posicao(posicao) def remover_elementos(self, elemento): self.__elementos.remover_elemento(elemento)
from Listas.Listas_ligadas import ListaLigada from Listas.Listas_dupl_ligadas import ListaDuplamenteLigada print(30 * "-", "MENU", 30 * "-") print("1.Listas Ligadas\n2.Listas Duplamente Ligadas") op = int(input("Escolha a estrutura: ")) if op == 1: lista = ListaLigada() lista.inserir(1) lista.inserir(3) lista.inserir(5) lista.inserir_posicao(10, 2) lista.remover_elemento(2) # lista.remover_posicao(0) print(lista) lista.remover_posicao(0) # print(lista.recuperar_no(2)) # recupera o No da posicao 2 # print(lista.recuperar_elemento_no(2)) # printa o elemento da posicao 2 # print(lista.cotem(5)) # verifica se existe o elemento 5 na lista # print(lista.indice(5)) # retorna a posicao do elemento 5 elif op == 2: lista = ListaDuplamenteLigada() lista.inserir(1) lista.inserir(3) lista.inserir(5) lista.inserir_posicao(10, 2) print(lista)
class Mapa(): def __init__(self): self.__elementos = ListaLigada() self.__numero_categorias = 10 # criar uma nova lista ligada para associar os elementos ao seu respectivo indice for i in range(self.__numero_categorias): self.__elementos.inserir(ListaLigada()) # gerar um hash para a chave def gerar_numero_espalhamento(self, chave): return hash(chave) % self.__numero_categorias def contem(self, chave): numero_hash = self.gerar_numero_espalhamento(chave) categoria = self.__elementos.recuperar_elemento_no(numero_hash) for i in range( categoria.tamanho): # percorrer toda a lista da categoria associacao = categoria.recuperar_elemento_no(i) if associacao.chave == chave: # verifica se a chave da associacao do range e a passada por parametro return True return False # metodo remover elemento apartir da sua chave def remover(self, chave): numero_hash = self.gerar_numero_espalhamento(chave) categoria = self.__elementos.recuperar_elemento_no( numero_hash) # obter a categoria da chave for i in range(categoria.tamanho): associacao = categoria.recuperar_elemento_no(i) if associacao.chave == chave: categoria.remover_elemento( associacao ) # remove tda a associação da lista da categoria encontrada return True return False # metodo para inserir mapa def adcionar(self, chave, valor): if self.contem(chave): # verifica se ja existe a chave no mapa self.remover(chave) # se existir, remove a associação dessa chave numero_hash = self.gerar_numero_espalhamento( chave) # gerar uma hash apartir da chave categoria = self.__elementos.recuperar_elemento_no( numero_hash) # obter a categoria q se encaixa categoria.inserir(Associacao( chave, valor)) # inserir a associaco nessa determinada categoria # recuperar uma associacao apartir da chave def recuperar(self, chave): numero_hash = self.gerar_numero_espalhamento(chave) categoria = self.__elementos.recuperar_elemento_no(numero_hash) for i in range(categoria.tamanho): associacao = categoria.recuperar_elemento_no(i) if associacao.chave == chave: return associacao.valor # retorna o valor da associacao return False def __str__(self): temp = self.__elementos.__str__() return temp