public void RemoverNo(ref NoLista <Dado> atual, ref NoLista <Dado> anterior) { if (!EstaVazia) { if (atual == primeiro) { primeiro = primeiro.Prox; if (EstaVazia) { ultimo = null; } } else if (atual == ultimo) { ultimo = anterior; ultimo.Prox = null; } else { anterior.Prox = atual.Prox; } quantosNos--; } }
public void InserirEmOrdem(Dado dados) { if (!ExisteDado(dados)) // existeChave configura anterior e atual { // aqui temos certeza de que a chave não existe // guarda dados no novo nó var novo = new NoLista <Dado>(dados, null); if (EstaVazia) // se a lista está vazia, então o { InserirAntesDoInicio(novo); // novo nó é o primeiro da lista } else // testa se nova chave < primeira chave if (anterior == null && atual != null) { InserirAntesDoInicio(novo); // liga novo antes do primeiro } else // testa se nova chave > última chave if (anterior != null && atual == null) { InserirAposFim(novo); } else { InserirNoMeio(novo); // insere entre os nós anterior e atual } } }
public void InserirAntesDoInicio(NoLista <Dado> novoNo) { if (EstaVazia) // se a lista está vazia, estamos { ultimo = novoNo; // incluindo o 1o e o último nós! } novoNo.Prox = primeiro; // faz o novo nó apontar para o nó primeiro = novoNo; // atualmente no início da lista quantosNos++; // (que pode ser null) }
private void InserirNoMeio(NoLista <Dado> novo) { // existeDado() encontrou intervalo de inclusão do novo nó anterior.Prox = novo; // liga anterior ao novo novo.Prox = atual; // e novo no atual if (anterior == ultimo) // se incluiu ao final da lista, { ultimo = novo; // atualiza o apontador ultimo } quantosNos++; // incrementa número de nós da lista } }
public void InserirAposFim(NoLista <Dado> novoNo) { if (EstaVazia) { primeiro = novoNo; } else { ultimo.Prox = novoNo; } quantosNos++; ultimo = novoNo; ultimo.Prox = null; // garantimos final lógico da lista }
public Dado Desempilhar() { if (EstaVazia) { return(default(Dado)); } Dado valor = base.Primeiro.Info; NoLista <Dado> pri = base.Primeiro; NoLista <Dado> ant = null; base.RemoverNo(ref pri, ref ant); return(valor); }
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 ProcurarMenorDado (ref NoLista <Dado> menorAteAgora, ref NoLista <Dado> anteriorAoMenor) { menorAteAgora = primeiro; anteriorAoMenor = null; IniciarPercursoSequencial(); while (PodePercorrer()) { if (atual.Info.CompareTo(menorAteAgora.Info) < 0) { anteriorAoMenor = anterior; menorAteAgora = atual; } } }
public ListaSimples() { primeiro = ultimo = anterior = atual = null; quantosNos = 0; primeiroAcessoDoPercurso = false; }
public void Empilhar(Dado elemento) { var no = new NoLista <Dado>(elemento, null); base.InserirAntesDoInicio(no); }
public NoLista(Dado novaInfo, NoLista <Dado> proximo) { Info = novaInfo; prox = proximo; }