Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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__()
Exemplo n.º 5
0
 def __init__(self):
     self.__elementos = ListaLigada()
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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