// exercicio 3

    public void CasamentoCom(ListaSimples <Dado> outra,
                             ref ListaSimples <Dado> nova)
    {
        nova = new ListaSimples <Dado>();
        NoLista <Dado> a = null,
                       b = null;

        while (!this.EstaVazia && !outra.EstaVazia)
        {
            a = this.primeiro;
            b = outra.primeiro;

            if (a.Info.CompareTo(b.Info) < 0)
            {
                this.quantosNos--;
                this.primeiro = this.primeiro.Prox; // avança na lista 1
                nova.InserirAposFim(a);
            }
            else
            if (b.Info.CompareTo(a.Info) < 0)
            {
                outra.quantosNos--;
                outra.primeiro = outra.primeiro.Prox; // avança na lista 2
                nova.InserirAposFim(b);
            }
            else
            {
                this.quantosNos--;
                outra.quantosNos--;
                this.primeiro  = this.primeiro.Prox;  // avança na lista 1
                outra.primeiro = outra.primeiro.Prox; // avança na lista 2
                nova.InserirAposFim(a);
            }
        }
        if (!this.EstaVazia)  // não acabou a lista 1
        {
            nova.ultimo.Prox = this.primeiro;
            nova.ultimo      = this.ultimo;
            nova.quantosNos += this.quantosNos;
        }

        if (!outra.EstaVazia)
        {
            nova.ultimo.Prox = outra.primeiro;
            nova.ultimo      = outra.ultimo;
            nova.quantosNos += outra.quantosNos;
        }

        this.primeiro   = this.ultimo = null;
        this.quantosNos = 0;

        outra = new ListaSimples <Dado>();
    }
    public void Ordenar()
    {
        ListaSimples <Dado> ordenada     = new ListaSimples <Dado>();
        NoLista <Dado>      menorDeTodos = null,
                            antesDoMenor = null;

        while (!this.EstaVazia)
        {
            ProcurarMenorDado(ref menorDeTodos, ref antesDoMenor);

            NoLista <Dado> novoNo = menorDeTodos;
            this.RemoverNo(ref menorDeTodos, ref antesDoMenor);

            ordenada.InserirAposFim(novoNo);
        }
    }
Ejemplo n.º 3
0
        private void achaProx(ref ListaSimples <Rota> lista, int codO, int codD)
        {
            for (int i = 0; i < quantosdados; i++)
            {
                if (rotasMatriz[i, 0] == codO)
                {
                    for (int a = 0; a < quantosdados; a++)
                    {
                        ListaSimples <Caminho> novaRota = new ListaSimples <Caminho>();

                        if (rotasMatriz[i, a] > 0)
                        {
                            novaRota.InserirAntesDoInicio(new Caminho(rotasMatriz[i, 0], rotasMatriz[a, 0], rotasMatriz[i, a]));

                            if (rotasMatriz[0, a] == codD)
                            {
                                Rota RotaPronta = new Rota();
                                while (!novaRota.EstaVazia)
                                {
                                    RotaPronta.AdicionarCaminho(novaRota.Primeiro.Info);
                                    novaRota.Remover(novaRota.Primeiro.Info);
                                }
                                lista.InserirAposFim(RotaPronta);
                            }
                            else
                            {
                                achaProx(ref lista, rotasMatriz[a, 0], codD);
                            }
                        }
                        else
                        if (a == quantosdados)
                        {
                            novaRota.Remover(novaRota.Ultimo.Info);
                            achaProx(ref lista, novaRota.Ultimo.Info.CodOrigem, codD);
                        }
                    }
                }
            }
        }