How to create a chained and double chained list?

-1

Can be in languages: C, Java, JavaScript and Python.

I'm trying to create a Chained List and a Double-Chained List with the Movies theme.

I researched the internet on the themes and got to this code:

<html>
<head>
<title>List</title>

<script language="javascript" type="text/javascript" src="List.js"> 
</script>
<script language="javascript" type="text/javascript">
  function onLoad() {
  var oList = new List();
  var oList2 = new List();

    oList.Add('Filmes');

    oList2.Add('Pulf Fiction');
    oList2.Add('Closer');

  var itemSub2 = 'Quentin Tarantino';

    oList2.Insert(1, itemSub2);

    oList.AddRange(oList2);

  for (var i = 0; i < oList.Count(); i++) {
    document.writeln(oList.GetItem(i) + "<br>");
  }

  document.writeln('oList2 - Exists<br>');

if (oList2.Exists(itemSub2)) {
    document.writeln('Yes<br>');
}
else {
    document.writeln('No<br>');
}

document.writeln('oList - Exists<br>');

var item2 = 'Mike Nichols';

if (oList.Exists(item2)) {
    document.writeln('Yes<br>');
}
else {
    document.writeln('No<br>');
}

oList.Add(item2);

document.writeln('oList Index = ' + oList.Find(item2) + "<br>");

    var copyList = oList;

    document.writeln('Equal = ' + oList.Equal(oList, copyList) + "<br>");

    copyList.ForEach(function (obj) {
        document.writeln(obj + "<br>");
    }

        document.writeln("<br>GetRange()<br>");

        var rangeList = copyList.GetRange(2, 2);

            rangeList.ForEach(function (obj) {
        document.writeln(obj + "<br>");
            }
        );
  }
</script>
</head>
<body onload="onLoad();">

</body>
</html>

I wonder if this code is valid or "acceptable" as a linked and double-chained list and, if it is not, what is needed to make it into the lists quoted. And I have doubts if one of the linguagns mentioned, there is an "easier" to create the lists in relation to the theme.

I have tried to see the result screen of this code in HelloWebFree for Mac but I did not get the screen and so I am appealing here.

    
asked by anonymous 21.09.2018 / 07:31

1 answer

0

Here is a fairly smooth example of implementing a double-chained list in Java: Class No:

package teste;

public class No {
    private No ant, prox;
    private Filme filme;

    public No(No ant, No prox, Filme filme) {
        this.ant = ant;
        this.prox = prox;
        this.filme = filme;
    }

    public No getAnt() {
        return ant;
    }

    public void setAnt(No ant) {
        this.ant = ant;
    }

    public No getProx() {
        return prox;
    }

    public void setProx(No prox) {
        this.prox = prox;
    }

    public Filme getFilme() {
        return filme;
    }

    public void setFilme(Filme filme) {
        this.filme = filme;
    }
}

Movie Class

package teste;

import java.util.Date;

public class Filme {
    private String nomeFilme;
    private Date dataLancamento;

    public String getNomeFilme() {
        return nomeFilme;
    }
    public void setNomeFilme(String nomeFilme) {
        this.nomeFilme = nomeFilme;
    }
    public Date getDataLancamento() {
        return dataLancamento;
    }
    public void setDataLancamento(Date dataLancamento) {
        this.dataLancamento = dataLancamento;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((dataLancamento == null) ? 0 : dataLancamento.hashCode());
        result = prime * result + ((nomeFilme == null) ? 0 : nomeFilme.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Filme other = (Filme) obj;
        if (dataLancamento == null) {
            if (other.dataLancamento != null)
                return false;
        } else if (!dataLancamento.equals(other.dataLancamento))
            return false;
        if (nomeFilme == null) {
            if (other.nomeFilme != null)
                return false;
        } else if (!nomeFilme.equals(other.nomeFilme))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Filme [nomeFilme=" + nomeFilme + ", dataLancamento=" + dataLancamento + "]";
    }

}   

Class List

package teste;

public class Lista {
    /*
     * Aqui criamos 2 variaveis do tipo No para não perdermos a nossa lista
     * imagine a lista como um varal… e os nós como roupas… o ant e prox do nó
     * será nossos pregadores e os bambus que seguram o varal são as variaveis
     * inicio e fim… se essas variaveis perderem seu valor é como se soltasse o
     * fio do varal… continuaremos a ter 2 bambus mas não teremos mais o varal…
     */
    private No inicio;
    private No fim;

    // construtor
    public Lista() {
        inicializa();
        // chama inicializa para economizar codigo
    }

    public void inicializa() {
        inicio = null;
        fim = null;
        // inicializa faz a lista ficar vazia
    }

    /*
     * ai vem a famoza pergunta…se eu tenho uma lista cheia e pego meu inicio e
     * fim e seto eles para que a lista esteja vazia.. e meus nós que ja
     * instanciei??? Bom quando um objeto no java (no caso o nó) perde sua
     * referencia (no caso o inicio e fim) o próprio java retira da memória o
     * que está sobrando quem faz isso é o Garbage Collector… ou como preferir…
     * coletor de lixo
     */

    // aqui fazemos uma lista para inserir somente no final
    public void insereNoFim(Filme filme) {
        // declaramos e instanciamos a variavel caixa
        // do tipo nó. seu anterior vai ser o fim
        // pois estamos inserindo depois do fim
        No caixa = new No(inicio, null, filme);
        if (inicio == null)// se lista estiver vazia
            inicio = fim = caixa;
        else {
            // seta prox do No do fim para receber caixa
            fim.setProx(caixa);
            fim = caixa;
        }
    }

    // aqui fazemos uma lista para inserir somente no comeco
    public void insereNoComeco(Filme filme) {
        // declaramos e instanciamos a variavel caixa
        // do tipo nó. seu proximo vai ser o incio
        // pois estamos inserindo antes do inicio
        No caixa = new No(null, inicio, filme);
        if (inicio == null)// se lista estiver vazia
            inicio = fim = caixa;
        else {
            // seta ant do No do inicio para receber caixa
            inicio.setAnt(caixa);
            inicio = caixa;
        }
    }

    public void exibeLista() {
        No aux;
        aux = inicio;
        while (aux != null) {
            System.out.println(aux.getFilme());
            aux = aux.getProx();
        }
    }

    public No Busca_Exaustiva(Filme elemento) {
        No p = inicio;
        while ((p != null) && (p.getFilme() != elemento)) {
            p = p.getProx();
        }
        if ((p != null) && (p.getFilme() == elemento))
            return p;
        else
            return null;
    }

    // no remove temos 5 casos a considerar
    public void removeLista(Filme elemento) {
        No pos;
        pos = Busca_Exaustiva(elemento);
        if (pos != null)// 1- se existe o No a ser deletado
        {
            if (inicio != fim)// 2- se só existe um Nó na lista
            {
                if (pos == inicio)// 3- se o Nó esta no começo
                {
                    inicio = pos.getProx();
                    pos.getProx().setAnt(null);
                } else if (pos == fim)// 4- se o Nó esta no fim
                {
                    fim = pos.getAnt();
                    pos.getAnt().setProx(null);
                } else// 5- se o no esta no meio
                {
                    pos.getAnt().setProx(pos.getProx());
                    pos.getProx().setAnt(pos.getAnt());
                }
                pos.setAnt(null);
                pos.setProx(null);
            } else {
                inicio = null;
                fim = null;
            }
        } else
            System.out.println("Elemento nao encontrado");
    }
}

Application Class

package teste;

import java.util.Date;

public class Aplicacao {
    Lista lista;

    public Aplicacao() {
        lista = new Lista();
    }

    public void executa() {
        for (int i = 1; i <= 5; i++) {
            Filme filme = new Filme();
            filme.setDataLancamento(new Date());
            filme.setNomeFilme("Matrix " + i);

            lista.insereNoFim(filme);
            System.out.println("Lista inserindo no final");
            lista.exibeLista();
            System.out.println("\n\n");
        }

        Filme filme = new Filme();
        filme.setDataLancamento(new Date());
        filme.setNomeFilme("Guerra Civil ");

        System.out.println("Lista inserindo no inicio ");
        lista.insereNoComeco(filme);
        lista.exibeLista();

        // Removendo alguns elementos
        lista.removeLista(filme);
        // Lista após remover alguns dos elementos (30,1,5)
        System.out.println("\n\nDepois de Remover os elementos");
        lista.exibeLista();
    }

    public static void main(String args[]) {
        Aplicacao a = new Aplicacao();
        a.executa();
    }
}
    
21.09.2018 / 16:03