// 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); } }
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); } } } } }